gpt4 book ai didi

hibernate - 并排部署 EJB 和 WAR 的 JBoss AS 6 中的类加载器问题

转载 作者:行者123 更新时间:2023-12-02 02:29:19 25 4
gpt4 key购买 nike

在处理具有多个 EE 可部署项的项目时,我发现了一个相当复杂的问题。问题似乎是 EJB3.1 TimerService 的 Hibernate 依赖项和类加载器隔离不足的共同作用。

从库存 AS 6 CR1 构建开始,我部署了一个 WAR。此 WAR 包含 Hibernate jar。

然后,我在 JAR 中部署一个 EJB(技术上是 MDB)。当我这样做时,JBoss 会启动 TimerService,以提供完整的 EJB3.1 支持。 TimerService 依赖于 Hibernate。 JBoss 然后继续罢工,因为类加载器检测到一个已经加载的 Hibernate 版本。

我什至尝试过将其中的每一个打包到一个单独的 EAR 中并进行部署。没有骰子。 TimerService 的加载方式似乎完全忽略了类加载隔离。

我的问题是,除了禁用 TimerService 之外,我还能做些什么吗?我打算在项目的后期使用它的漂亮功能。老实说,我什至不知道这是否是一个错误,因为 JBoss 的类加载器文档似乎是由愤怒的克林贡人编写的。尽管如此,我还是希望有一个变通办法。

编辑 - 事实上,我什至没有办法禁用 TimerService,因为我的每项努力都以某种方式受挫。就目前而言,我看不出任何人如何将 Hibernate 和 EJB 部署到同一个 JBoss 实例。

编辑 - 我最终设法通过不在我的 MDB 或 WAR 中包含 Hibernate jar 来进行部署,而是依靠 JBoss 的 Hibernate 实现。这是不令人满意的;我感觉容器和我的 bean 之间没有隔离。但至少它是当前版本的 Hibernate (3.6)。

最佳答案

不确定到目前为止您尝试了什么,但这应该有效:

EAR 包含:

  • EJB 的 JAR
  • JPA 的 JAR
  • 网络应用的 war
  • 您需要的所有库。
  • jboss-app.xml,具有独特的“loader-repository”

并且还在您的 EAR 的 META-INF 中包含一个 jboss-app.xml:

<jboss-app>
<loader-repository>...</loader-repository>
</jboss-app>

您可能需要检查这两个页面:

http://community.jboss.org/wiki/ClassLoadingConfiguration

http://community.jboss.org/wiki/JBossClassLoadingUseCases

但我会重新考虑捆绑您自己的 Hibernate 版本的决定。虽然这听起来很合理,但 AS 在那里为您提供了一个“应用程序托管”的环境,并且它已经提供了一些服务,比如持久性。所以,把这个问题留给 AS ;-)

关于hibernate - 并排部署 EJB 和 WAR 的 JBoss AS 6 中的类加载器问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4415118/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com