SSH項目中發(fā)布出現(xiàn)Error:listenerStart錯誤

字號:

最近看《WebWork.Spring.Hibernate整合開發(fā)網(wǎng)絡(luò)書城》視頻教程,自己按照教程上說的做練習(xí),在啟動tomcat時總是出一個錯誤:
    2007-5-31 14:27:13 org.apache.catalina.core.StandardContext start
    嚴重: Error listenerStart
    2007-5-31 14:27:13 org.apache.catalina.core.StandardContext start
    嚴重: Context [/testWSH] startup failed due to previous errors
    教程的作者在錄制教程時也遇到了此問題,但是他刪了一個jar包后就沒事了,可是我的一直無法正常啟動,從昨天到現(xiàn)在一天的時間都在研究這個問題,也“百 度”到了很多有關(guān)此問題的信息,但是都沒有很明確的解決方案?,F(xiàn)在此問題已經(jīng)解決,而且基本肯定問題所在,所以將解決方案寫出來以供參考。
    有一種解決方案是把web.xml文件中的
     org.springframework.web.context.ContextLoaderListenerlistener-class>
    listener>
    改為
    
    SpringContextServletservlet-name>
    
    org.springframework.web.context.ContextLoaderServlet
    servlet-class>
    1load-on-startup>
    servlet>
    但這種方法可能會出現(xiàn)其他問題(網(wǎng)上又說會導(dǎo)致其他文件無法打開)。
    
    我的最終解決方案如下:
    我用的是tomcat5.5,配置了日志之后打印出下列信息:
    ERROR main org.springframework.web.context.ContextLoader - Context initialization failed
    org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'dataSource' defined in ServletContext resource [/WEB-INF/applicationContext.xml]: Instantiation of bean failed; nested exception is java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
    Caused by:
    java.lang.NoClassDefFoundError: org/apache/commons/pool/impl/GenericObjectPool
    at java.lang.Class.getDeclaredConstructors0(Native Method)
    at java.lang.Class.privateGetDeclaredConstructors(Class.java:2328)
    at java.lang.Class.getConstructor0(Class.java:2640)
    at java.lang.Class.getDeclaredConstructor(Class.java:1953)
    ……
    從日志信息看問題已經(jīng)很明顯了,是 applicationContext.xml 的 dataSource 問題。
    將
    
    改為
    
    之后問題得到解決。
    出現(xiàn)"Error listenerStart"一般是applicationContext.xml中的bean加載有問題。在用eclipse做webwork + spring + hibernate 的項目時一般都是用Myeclipse自動生成那些配置文件,而有些相關(guān)的jar或者文件并沒有加載在至項目中,以至引出奇怪的問題,又因為是自動生成的東西所以往往會忽略一些文件,而問題確恰恰是這些生成的文件所致,所以自動化的東西也未必一定是正確的,呵呵……
    org.springframework.jdbc.datasource.DriverManagerDataSource 不可以使用連接池。org.apache.commons.dbcp.BasicDataSource作為注入的DataSource源,為了使用 DBCP的功能,必須要將commons-dbcp.jar加入CLASSPATH中,另外還需要commons-pool.jar和commons- collections.jar,這些都可以在Spring的lib目錄下找到。
    org.springframework.jdbc.datasource.DriverManagerDataSource并沒有提供連接池的功能,只能作作簡單的單機連接測試。
    使用org.apache.commons.dbcp.BasicDataSource時缺少commons-pool.jar所以會出現(xiàn)如題的問題。
    再次修正:
    昨天又遇到此問題,解決的辦法是刪除無用的jar。
    工程是 spring+hibernate+tomcat5.5.25,jar都是用eclipse自動加載的,很多jar明顯的用不到,例如:ibatis,toplink等。將無用的jar刪除后問題解決。