我一直在努力解决问题。
我有两个EAR文件被部署到Wildfly 8.1.0,使用相同的EJB.jar和相同的JPA.jar,但是有单独的EJB.jars用于' Scheduling' A.K.A在EJB中运行不同的功能。调度程序访问EJB.jars,EJB.jars又访问JPA.jars。两个EAR / JPA都使用相同的数据库。
两个EAR的布局如下:
EAR1:
SCHEDULER1-EJB.jar
EJB.jar
的lib \ JPA.jar
EAR2:
预订2-EJB.jar
EJB.jar
的lib \ JPA.jar
一切都很好,但是在调度程序运行几分钟后,我得到了一个用于用户定义类的 ClassCastException 。例如:
java.lang.ClassException: persistence.Foo cannot be cast to persistence.Foo
我尝试过使用Dependency,Class-Path和EAR隔离技术,但无法解决我的问题。
只有在部署并运行两个 EAR时才会出现此问题,单独运行时没有任何问题。
欢迎任何建议。提前谢谢。
答案 0 :(得分:1)
我不知道Jboss如何在内部处理具有相同名称的持久性单元,但似乎在这些之间存在一些共享过程。其中一个JPA.jars已经在缓存中保存了一个对象,后来另一个JPA.jar尝试重用它。
应用程序服务器为每个ear / war创建自己的类加载器。您尝试将对象从war1传递给war2,war2尝试将对象传递给war2,但不能。
解决方案: 创建包含JPA和EJB.jar的EAR并部署两个schedular-jar。
您的deployment-folder看起来像这样:
。)Backend.ear
。)Schedular1.jar
。)Schedular2.jar