5

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

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

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

4

3 回答 3

6

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

错误:

hibernate.properties 未找到

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

如果你只有 hibernate-core 的依赖,我使用的是 hibernate-annotations 和 hibernate-common-annotations 并且它会产生冲突。hibernate 5不需要这两个,我在某处读过。尝试删除;)

之后出现一个新错误:

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

原因是最古老的 jboss-logging.jar 位于:“YOUR_GLASSFISH_FOLDER/glassfish/modules”

为什么?hibernate 5 依赖于最新版本的 jboss-logging,而 glassfish 4 使用最旧的版本,即使您在 POM 文件中声明了最新版本。实际上我正在使用:

org.jboss.logging jboss-logging 3.3.0.Final

然后我下载了它并替换了模块路径中的旧 .jar 并恢复工作,我花了 2 天时间试图解决这个问题,我希望它可以帮助一些未来的问题 =D

我使用此链接来帮助我:https ://medium.com/@mertcal/using-hibernate-5-on-payara-cc242212a5d6#.npq2hdprz

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

于 2016-08-25T10:50:08.667 回答
3

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

<?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 不会加载它的内部库,而是从您的项目中加载库。

于 2017-08-08T15:35:01.420 回答
2

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

于 2016-01-15T15:43:54.677 回答