【问题标题】:Jboss as 7.1 throws java.lang.NoClassDefFoundError while using hibernate 4.3.8Jboss as 7.1 在使用休眠 4.3.8 时抛出 java.lang.NoClassDefFoundError
【发布时间】:2015-05-05 21:18:35
【问题描述】:

我是 hibernate 新手,并尝试用于我的项目,我使用的是 hibernate 4.3.8-Final,当我以 7.1 部署到 Jboss 时,我遇到了错误

Caused by: java.lang.ClassNotFoundException: org.jboss.as.jpa.hibernate4.JBossAppServerJtaPlatform from [Module "org.jboss.as.jpa.hibernate:4" from lo
cal module loader @699774b8 (roots: D:\Softwares\jboss-as-7.1.1.Final\modules)]
        at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:190) [jboss-modules.jar:1.1.1.GA]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:468) [jboss-modules.jar:1.1.1.GA]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClassChecked(ConcurrentClassLoader.java:456) [jboss-modules.jar:1.1.1.GA]
        at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:398) [jboss-modules.jar:1.1.1.GA]
        at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:120) [jboss-modules.jar:1.1.1.GA]

我遵循下面的 jboss 配置来使用更新的休眠版本

https://docs.jboss.org/author/display/AS72/JPA+Reference+Guide#JPAReferenceGuide-ReplacingthecurrentHibernate4.0.xjarswithanewerversion

但是在 joboss 中进行了这些配置之后,我得到了上述异常。

当我查看 Jboss jpa 配置时,我看到 jboss.api 被加载而不是休眠。

<module xmlns="urn:jboss:module:1.1" name="org.jboss.as.jpa">
    <properties>
        <property name="jboss.api" value="private"/>
    </properties>

    <resources>
        <resource-root path="jboss-as-jpa-7.1.1.Final.jar"/>
        <!-- Insert resources here -->
    </resources>

所以我的问题是如何在 jboss jpa 之前加载 hibernate jpa,或者有没有其他方法可以解决这个问题。

【问题讨论】:

  • 仅供参考:Hibernate 4.3.8 最终版支持 JPA 2.1(自 Hibernate 4.3.0 最终版为 released(2013 年 12 月 16 日)引入)
  • 请添加您的 jboss-deployment-structure.xml
  • jboss 使用的 jvm 版本是什么? 1.5?!
  • 使用java 1.7版本
  • @MartinBaumgartner 我没有文件.. 我只有 jboss-web.xml

标签: java jboss7.x jpa-2.0 hibernate-4.x


【解决方案1】:
  • Jboss 7.1.1 捆绑了 Hibernate 4.0.1。
  • Wildy 8.2 提供 4.3.7。

实际上这意味着,如果您想依赖“提供的”Hibernate-JPA 库,您的应用程序的“休眠”要求必须符合上述要求。但是,您可以选择创建一个 war、jar 或 ear 应用程序,在其中提供您首选的 Hibernate-JPA 版本。

我的建议是尝试 Wildfly,它比 7.1.x 好得多,而且 Hibernate 4.3.7 和 4.3.8 之间没有大的变化

我个人会避免“修补”应用程序服务器,除非存在影响我的应用程序的关键问题。

如需进一步帮助,您必须提供 Maven pom 文件。

【讨论】:

  • 我不能尝试不同的服务器,因为我使用的是使用 jboss 7.1 服务器的云平台,我提供的链接解释了如何使用 hibernate 4 和 jboss 7.1,但我犯了一些错误现在不适合我。
  • JPA 2.1 规范添加了一些更奇特的特性,如映射转换器、存储过程支持和用于改进会话操作的非同步持久性上下文。它还增加了创建实体图并将它们传递给查询的能力,相当于通常所说的在返回的对象集上获取组约束。
  • 忽略前面的评论。我不使用本机 Hibernate,我只使用 JPA。 Hibernate 4.0.x 符合 JPA 2.0,Hibernate 4.3.x 符合 JPA 2.1。 JPA 2.1 规范增加了一些特性,例如映射转换器、存储过程支持和不同步的持久性上下文。我目前的应用程序非常符合 JPA 2.0。也许这就是你的情况。为什么不尝试提供的 JPA 2.0 支持?要尝试此操作,只需对您的 maven pom 进行最小的更改。将任何与 Hibernate/JPA 相关的范围从编译范围更改为提供的范围。
猜你喜欢
  • 2018-09-23
  • 2019-05-04
  • 1970-01-01
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2013-05-11
  • 2015-09-11
  • 2021-02-22
相关资源
最近更新 更多