Wildfly 8 - 多个 EAR - ClassCastException

Wildfly 8 - Multiple EAR - ClassCastException

一段时间以来我一直在努力解决一个问题。

我有两个 EAR 文件部署到 Wildfly 8.1.0,它们具有相同的 EJB.jar 和相同的 JPA.jar,但 EJB.jar 用于 'Scheduling' A.K.A 运行在 EJB 中设置不同的功能。调度程序访问 EJB.jars,后者又访问 JPA.jars。两者 EARs/JPAs 使用相同的数据库。

两个EAR的布局如下:

EAR1:

EAR2:

一切都部署得很好,但是在调度程序 运行ning 几分钟后,我得到一个 ClassCastException 用于用户定义 类 .示例:

java.lang.ClassException: persistence.Foo cannot be cast to persistence.Foo

我尝试使用依赖性、Class-路径和 EAR 隔离技术,但无法解决我的问题。

仅当 两个 EAR 都已部署并且 运行ning 时才会出现此问题,它们单独 运行 没有任何问题。

欢迎提出任何建议。提前致谢。

我不知道 Jboss 如何在内部处理具有相同名称的持久性单元,但它们之间似乎有一些共享过程。您的一个 JPA.jars 已经在缓存中保存了一个对象,后来另一个 JPA.jar 尝试重用它。

应用程序服务器为每个 ear/war 创建自己的类加载器。您尝试将一个对象从 war1 传递到 war2,war2 尝试转换该对象,但不能。

解决方法: 创建一个包含您的 JPA 和 EJB.jar 的 EAR 并部署两个 schedular-jars。

您的部署文件夹如下所示:

.) Backend.ear

.) Schedular1.jar

.) Schedular2.jar