2012-09-23 19 views
4

我正在使用Java web開發,使用spring3.1.1 + hibernate3.6.0 + tomcat7.0.29 + mysql5.5,但運行後我的服務器時,Eclipse提示說java.lang.NoClassDefFoundError:org/springframework/orm/hibernate3/support/HibernateDaoSupport

HTTP Status 500 - Handler processing failed; nested exception is java.lang.NoClassDefFoundError:  org/springframework/orm/hibernate3/support/HibernateDaoSupport 

和具體如下, 類型異常報告

message Handler processing failed; nested exception is java.lang.NoClassDefFoundError:   org/springframework/orm/hibernate3/support/HibernateDaoSupport 

description The server encountered an internal error (Handler processing failed; nested exception is java.lang.NoClassDefFoundError:  org/springframework/orm/hibernate3/support/HibernateDaoSupport) that prevented it from fulfilling this request. 

例外

org.springframework.web.util.NestedServletException: Handler processing failed; nested exception is java.lang.NoClassDefFoundError:  org/springframework/orm/hibernate3/support/HibernateDaoSupport 



org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:972) 


org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
root cause 

java.lang.NoClassDefFoundError: org/springframework/orm/hibernate3/support/HibernateDaoSupport 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2901) 
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) 
cc.fanbang.api.manager.DBManager.addUser(DBManager.java:139) 
cc.fanbang.api.controller.TestController.handleDBManagerTestRequest(TestController.java:42) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:601) 
org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
    org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 
root cause 

java.lang.ClassNotFoundException:  org.springframework.orm.hibernate3.support.HibernateDaoSupport 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1711) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) 
java.lang.ClassLoader.defineClass1(Native Method) 
java.lang.ClassLoader.defineClass(ClassLoader.java:791) 
java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) 
org.apache.catalina.loader.WebappClassLoader.findClassInternal(WebappClassLoader.java:2901) 
org.apache.catalina.loader.WebappClassLoader.findClass(WebappClassLoader.java:1170) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1678) 
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556) 
cc.fanbang.api.manager.DBManager.addUser(DBManager.java:139) 
    cc.fanbang.api.controller.TestController.handleDBManagerTestRequest(TestController.java:42) 
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
java.lang.reflect.Method.invoke(Method.java:601) 
    org.springframework.web.bind.annotation.support.HandlerMethodInvoker.invokeHandlerMethod(HandlerMethodInvoker.java:176) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.invokeHandlerMethod(AnnotationMethodHandlerAdapter.java:436) 
    org.springframework.web.servlet.mvc.annotation.AnnotationMethodHandlerAdapter.handle(AnnotationMethodHandlerAdapter.java:424) 
org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) 
org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) 
org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) 
org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:778) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:621) 
javax.servlet.http.HttpServlet.service(HttpServlet.java:722) 

我不明白爲什麼它告訴我,沒有休眠的支持,我已經在引用的庫和web-inf/lib項目中導入它。 包我已經導入如下,

commons-beanutils-1.8.3.jar 
    commons-coder-1.4.jar 
    commons-io-2.3.jar 
    commons-lang-2.6.jar 
    commons-logging-1.1.1.jar 
    ezorph-1.0.6.jar 
    json-lib-2.4-jdk15.jar 
    jstl-1.2.jar 
    org.springframework.asm-3.1.1.release.jar 
    org.springframework.beans-3.1.1.release.jar 
    org.springframework.context-3.1.1.release.jar 
    org.springframework.core-3.1.1.release.jar 
    org.springframework.expression-3.1.1.release.jar 
    org.springframework.web.servlet-3.1.1.release.jar 
    org.springframework.web-3.1.1.release.jar 
    servlet-api.jar 
    antlr-2.7.6 
    c3p0-0.9.1.jar 
    commons-collections-3.1.jar 
    dom4j-1.6.1.jar 
    ehcache-1.5.0.jar 
    hibernate-jpa-2.0-api-1.0.1.final.jar 
    hibernate3.jar 
    javassist-3.12.0.ga.jar 
    jta-1.1.jar 
    mysql-connector-java-5.1.12-bin.jar 
    org.springframework.orm-3.1.1.release.jar 
    org.springframework.jdbc-3.1.1.release.jar 
    org.springframework.aop-3.1.1.release.jar 
    org.springframework.transaction-3.1.1.release.jar 
    slf4j-api-1.6.1.jar 
    slf4j-nop-1.6.1.jar 

與如下有關交易過程的applicationContext.xml的一部分內容,

<bean id="transactionManager"   class="org.springframework.orm.hibernate3.HibernateTransactionManager"> 
    <property name="sessionFactory" ref="sessionFactory" /> 
</bean> 

<tx:advice id="txAdvice" transaction-manager="transactionManager"> 
    <tx:attributes> 
     <tx:method name="get*" read-only="true" /> 
     <tx:method name="*" /> 
    </tx:attributes> 
</tx:advice> 

<aop:config> 
    <aop:pointcut id="fbPointcut" expression="bean(dbManager)" /> 
    <aop:advisor advice-ref="txAdvice" pointcut-ref="fbPointcut" /> 
</aop:config> 

回答

3

NoClassDefFoundError意味着,類裝載器不能找到一個類org.springframework.orm.hibernate3.support.HibernateDaoSupport取決於。不是HibernateDaoSupport本身缺失。找到缺失的依賴關係的最好方法是看看HibernateDaoSupport的輸入部分

看起來您在類路徑中缺少org.springframework.dao庫。

+0

我已經將版本從3.0.6更改爲3.1.1,所以org.springframework的所有包都是一致的,但不幸的是,它不起作用,並且與以前相同。 –

+0

此外,我已經導入org.springframework.dao,它在org.springframework.transaction-3.1.1.release.jar –

+0

你得到確切的相同的異常? – gigadot

1

我認爲這是因爲你的圖書館裏有spring-orm不同版本的spring-orm類庫,它有org.springframework.orm.hibernate3.support.HibernateDaoSupport類。

spring-orm 3.1 jar添加到您的庫。您可以在底部找到jar下載鏈接。

一般來說,如果你得到一個NoClassDefFoundError,谷歌爲具有類的jar。 Maven Central Repository是一個很好的去處。

你的spring aop,jdbc和transaction jar也是不同的版本(3.0.7而不是3.1.1)。始終使用相同版本的罐子。如果您使用不同版本的jar,應用程序可能會拋出一些錯誤。

+0

+1指出版本不一致 – madth3

+0

好點但並不總是可以解決所有彈簧庫使用相同的版本。春季圖書館的某些版本依賴於較老的春季,有時會引發問題。例如,我爲我的大多數彈簧庫使用3.1.2版本,但其中一些取決於3.0.7。 – gigadot

+0

我不確定這種依賴。我會建議使用[Maven](http://maven.apache.org/)。依賴管理變得更容易。它可以擺脫這些頭痛。 – shazinltc

0

14.3 Hibernate

We will start with a coverage of Hibernate 3 in a Spring environment, using it to demonstrate the approach that Spring takes towards integrating O/R mappers. This section will cover many issues in detail and show different variations of DAO implementations and transaction demarcation. Most of these patterns can be directly translated to all other supported ORM tools. The following sections in this chapter will then cover the other ORM technologies, showing briefer examples there.

Note: As of Spring 3.0, Spring requires Hibernate 3.2 or later.

來源:http://static.springsource.org/spring/docs/current/spring-framework-reference/html/orm.html#orm-hibernate

你的Hibernate版本太舊。

在重新閱讀您的問題時,您說您正在使用Hibernate 3.6,但您在依賴關係中列出了hibernate3.jar。這是什麼?