【问题标题】:Wildfly 8 - Multiple EAR - ClassCastExceptionWildfly 8 - 多个 EAR - ClassCastException
【发布时间】:2015-01-29 16:52:14
【问题描述】:

一段时间以来,我一直在尝试解决一个问题。

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

两个EAR的布局如下:

EAR1:

  • SCHEDULER1-EJB.jar

  • EJB.jar

  • lib\JPA.jar

EAR2:

  • SCHEDULER2-EJB.jar

  • EJB.jar

  • lib\JPA.jar

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

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

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

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

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

【问题讨论】:

    标签: jpa jboss classpath classcastexception wildfly-8


    【解决方案1】:

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

    应用程序服务器为每个耳朵/战争创建自己的类加载器。您尝试将一个对象从 war1 传递给 war2,而 war2 尝试投射该对象,但不能。

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

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

    .) 后端.ear

    .) Schedular1.jar

    .) Schedular2.jar

    【讨论】:

    • 谢谢马丁。这应该对我有很大帮助。我可以看到我现在需要做什么了。
    猜你喜欢
    • 1970-01-01
    • 2020-03-22
    • 1970-01-01
    • 2013-12-19
    • 1970-01-01
    • 2014-06-11
    • 2018-07-26
    • 2016-12-04
    • 1970-01-01
    相关资源
    最近更新 更多