在将 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-common-core jar 是运行 jboss 服务器所必需的。
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。但它仍然会引发相同的异常。
有没有人有一些想法来解决这个问题?