在将Hibernate从3.2升级到4.3.8时,我面临以下错误消息,导致我的jboss服务器(boss 4.0.1 sp1服务器)没有启动。
java.lang.NoSuchMethodError: org.jboss.logging.Logger.getMessageLogger(Ljava/lang/Class;Ljava/lang/String;)Ljava/lang/Object;
at org.hibernate.cfg.Configuration.<clinit>(Configuration.java:194)
进一步研究,我观察到Hibernate引用了自己的Jboss日志jar文件(jboss-logging-3.0.1.GA jar文件),Jboss引用了jboss-common-core jar文件,它们都有共同的类名“logger” .class“在相同的包级别”org.jboss.logging“导致上述错误。
这似乎与Jar冲突有关。我已经尝试了以下选项来解决这个问题,但是我没有成功。
1)从/ lib目录中删除'Jboss-common-core'jar并添加Jboss-logging jar。但是Jboss服务器没有启动,因为运行jboss服务器必须使用Jboss-common-core jar。
2)在server / xxx / lib目录中添加Jboss-logging但它仍然抛出相同的异常。
3)在WEB-INF目录下的war文件中实现类加载机制(“jboss-web.xml”),如下所示。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-web PUBLIC "-//JBoss//DTD Web Application 5.0//EN" "http://www.jboss.org/j2ee/dtd/jboss-web_4_0.dtd">
<jboss-web>
<class-loading java2ClassLoadingCompliance="false" >
<loader-repository>com.example:archive=Example.war<loader-repository-config>java2ParentDelegaton=false</loader-repository-config>
</loader-repository>
</class-loading>
</jboss-web>
4)在META-INF目录的ear文件中实现类加载机制(“jboss-app.xml”)。在我们的ear文件中还包含war文件。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE jboss-app
PUBLIC "-//JBoss//DTD J2EE Application 1.4//EN"
"http://www.jboss.org/j2ee/dtd/jboss-app_4_0.dtd">
<jboss-app>
<loader-repository>
com.example:archive=example.ear
<loader-repository-config>
java2ParentDelegation=false
</loader-repository-config>
</loader-repository>
</jboss-app>
5)通过调整位于server / xxx / deploy / jbossweb-tomcat50.sar / META-INF / jboss-service.xml描述符中的“UseJBossWebLoader”属性为false。但是它会抛出相同的异常。
有人有想法解决这个问题吗?