最近看《WebWork.Spring.Hibernate整合開發網絡書城》視頻教程,自己按照教程上說的做練習,在啟動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包后就沒事了,可是我的一直無法正常啟動,從昨天到現在一天的時間都在研究這個問題,也“百 度”到了很多有關此問題的信息,但是都沒有很明確的解決方案?,F在此問題已經解決,而且基本肯定問題所在,所以將解決方案寫出來以供參考。
有一種解決方案是把web.xml文件中的
<listener> <listener-class>org.springframework.web.context.ContextLoaderListenerlistener-class>
listener>
改為
<servlet>
<servlet-name>SpringContextServlet</servlet-name>
<servlet-class>
org.springframework.web.context.ContextLoaderServlet
</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet> 但這種方法可能會出現其他問題(網上又說會導致其他文件無法打開)。
我的最終解決方案如下:
我用的是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)
……
從日志信息看問題已經很明顯了,是 applicationContext.xml 的 dataSource 問題。
將
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource">
<!--[if !supportLineBreakNewLine]-->改為
<bean id="dataSource" class="org.springframework.jdbc.datasource.DriverManagerDataSource">
之后問題得到解決。
出現"Error listenerStart"一般是applicationContext.xml中的bean加載有問題。在用eclipse做webwork + spring + hibernate 的項目時一般都是用Myeclipse自動生成那些配置文件,而有些相關的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所以會出現如題的問題。
再次修正:
昨天又遇到此問題,解決的辦法是刪除無用的jar。
工程是 spring+hibernate+tomcat5.5.25,jar都是用eclipse自動加載的,很多jar明顯的用不到,例如:ibatis,toplink等。將無用的jar刪除后問題解決。
posted on 2008-05-15 15:22
長春語林科技 閱讀(1303)
評論(0) 編輯 收藏 所屬分類:
java