在处理具有多个 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 实现。这令人不满意;我觉得容器和我的豆子之间没有隔离。但至少它是当前版本的 Hibernate (3.6)。