Hibernate 5 + Glassfish 4.1.1: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V

Hibernate 5 + Glassfish 4.1.1: java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V

当我将 Hibernate 5 添加到我的网站时,我无法让它在 Glassfish 4.1.1 中运行。我总是收到错误

java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V

我尝试替换 Glassfish 模块文件夹中的 jboss-logging 库,就像我在对类似问题的回答中读到的那样,但它没有改变任何东西。我也尝试过使用 Hibernate 4,但出现了另一个错误。

尝试清理您域中的 glassfish osgi-cache 文件夹。您可以在这个 Payara github 问题中找到详细信息:https://github.com/payara/Payara/issues/554(Payara 是 Glassfish 的一个分支,具有附加功能,因此基本机制与 Glassfish 中的相同)

就我而言,我是 运行 在 tomcat 上带有 JPA 注释的 Hibernate 5,当我更改为 glassfish 4.1

时停止工作

错误:

hibernate.properties 未找到

确保:src/main/resources/hibernate.cfg.xml 存在

如果您只有 hibernate-core 的依赖项,我使用的是 hibernate-annotations 和 hibernate-common-annotations,这会造成冲突。 hibernate 5 不需要这两个,我读过 somewhere.Try 来删除 ;)

之后出现新的错误:

java.lang.NoSuchMethodError: org.jboss.logging.Logger.debugf(Ljava/lang/String;I)V

The reason was the oldest jboss-logging.jar at: "YOUR_GLASSFISH_FOLDER/glassfish/modules"

Why? The hibernate 5 has dependency with the newest version of jboss-logging, and the glassfish 4 uses the oldest version even if you declare inside your POM file the newest version. Actually I'm using:

org.jboss.logging jboss-logging 3.3.0.Final

Then I downloaded it and replace the old .jar inside the modules path and it back to work, I spent 2 days trying to solve that and I hope it helps some future issues =D

我用这个 link 来帮助我:https://medium.com/@mertcal/using-hibernate-5-on-payara-cc242212a5d6#.npq2hdprz

另一个解决方案,就我而言,可以回到上一个 Hibernate 4 版本 (4.3.11.Final),但在我看来它已经太旧了

我有一个类似的问题,我可以通过在 WEB-INF 目录中创建一个 glassfish-web.xml 文件来修复它。文件内容如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE glassfish-web-app PUBLIC "-//GlassFish.org//DTD GlassFish Application Server 3.1 Servlet 3.0//EN" "http://glassfish.org/dtds/glassfish-web-app_3_0-1.dtd">
<glassfish-web-app>
     <class-loader delegate="false"/>
</glassfish-web-app>

这确保 glassfish 不会加载它的内部库,而是加载您项目中的库..