升级到Hibernate 3.3.2后出现java.lang.AbstractMethodError错误
我们有一个使用Hibernate 3.0.5的遗留应用程序,我们正在尝试将其升级到Hibernate 3.3.2(对当前代码影响较小的版本) 更新升级到Hibernate 3.3.2后出现java.lang.AbstractMethodError错误,java,hibernate,maven,jboss5.x,javassist,Java,Hibernate,Maven,Jboss5.x,Javassist,我们有一个使用Hibernate 3.0.5的遗留应用程序,我们正在尝试将其升级到Hibernate 3.3.2(对当前代码影响较小的版本) 更新pom.xml中的依赖项后,应用程序将正确部署,但在存在惰性关联的查询中,会发生以下错误: java.lang.AbstractMethodError:org.hibernate.proxy.pojo.javassist.javassistlazinitializer.setUnwrap(Z)V 依赖项的配置如下所示: <dependency&g
pom.xml
中的依赖项后,应用程序将正确部署,但在存在惰性关联的查询中,会发生以下错误:
java.lang.AbstractMethodError:org.hibernate.proxy.pojo.javassist.javassistlazinitializer.setUnwrap(Z)V
依赖项的配置如下所示:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.3.2.GA</version>
<exclusions>
<!--
Excludes to avoid conflict with JBoss libs
See http://stackoverflow.com/questions/3413488/saxparser-errors-with-hibernate-and-jboss-conflicting-versions
-->
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
<version>1.0.b2</version>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.5.2</version>
</dependency>
<dependency>
<groupId>javassist</groupId>
<artifactId>javassist</artifactId>
<version>3.4.GA</version>
</dependency>
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.14</version>
</dependency>
org.hibernate
)
我遇到了一个与此非常类似的问题,结果是JBoss类加载器问题。JBoss的配置从一个版本到下一个版本变化很快,我提议的解决方案对我使用JBoss EAP 5.1.2非常有效。
来吧
首先,确保在POM中明确包含Hibernate版本:
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-core</artifactId>
<version>3.3.2.GA</version>
</dependency>
其中my application.war
是war文件的名称。请注意,java2ParentDelegation
设置为false可能有助于解决其他类加载器问题(以我的经验来看,尤其是slf4j)
最后,JBoss 5.1.x类加载器问题需要处理,因此我希望这能有所帮助。要记住的是,这个问题本身并不是与JavaScript有关的(你可以考虑在你的POM中删除显式的JavaSudio>代码> <代码>,让Maven根据Hibernate <代码> <代码>解析它。这很可能是类加载器问题。默认的JBoss类加载策略在大多数情况下都非常有效,直到您使用HibernateJBoss第6版之前的版本与JBoss附带的特定版本的Hibernate有着紧密的联系,因此尝试使用不同于JBoss想要使用的版本的Hibernate是一件非常痛苦的事情。但这是可以做到的强>
对于EAR文件,该文件名为jboss app.xml
,位于EAR文件的META-INF
文件夹中:
<jboss-app>
<loader-repository>
org.hibernate:archive=my-application.ear
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</jboss-app>
org.hibernate:archive=my-application.ear
java2ParentDelegation=false
祝你好运 你在用JBoss吗?如果没有,什么应用服务器?我以前见过这个问题(主要是JBoss),但在提供任何具体指导之前,我想知道这个问题。这是“完整”的错误信息吗java.lang.AbstractMethodError:org.hibernate.proxy.pojo.javassist.JavassistLazyInitializer.setUnwrap(Z)V
@JStevenPerry,在这个问题上添加了JBoss版本。我猜这是由ASM JAR冲突引起的,CGLIB依赖于ASM。CGLIB的解决方案是一个专用的CGLIB-nodep.jar,它包括正确的ASM版本和重命名的包。@jabliuka、ASM
和CGLIB
不作为依赖项包含。此外,根据Hibernate 3.3,默认值现在是javassist
,尽管配置正确,错误仍会继续。我启用了JBoss类加载日志,使用的JAR(javassist、hibernate核心)显然是WEB-INF/lib中的JAR。我不完全确定您在说什么。你能澄清一下吗?JAR在WEB-INF/lib
中,但是jboss WEB.xml
文件需要进入WEB-INF
中。对不起,我在一句话中混合了两个答案。我做了您在jboss web.xml
中建议的配置,还删除了pom.xml
中显式的javassist
依赖项,但它不起作用。所以我注意到$JBOSS_HOME/lib
中有一个javassist.jar
,我认为它没有被加载(因为它被配置为不从父级加载),并在POM中显式声明了它。日志确认jar是从WEB-INF/lib
读取的,但我收到了相同的错误消息。EAP5.1中的JBoss类加载绝对是地狱般的。很抱歉,我的建议对您不起作用。最奇怪的是JBoss附带的3.3.1版本工作得很好。无论如何谢谢你的帮助!
<jboss-app>
<loader-repository>
org.hibernate:archive=my-application.ear
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</jboss-app>