Wildfly 8 - 多个EAR - ClassCastException

时间:2015-01-29 16:52:15

标签: jpa jboss classpath classcastexception wildfly-8

我一直在努力解决问题。

我有两个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时才会出现此问题,单独运行时没有任何问题。

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

1 个答案:

答案 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