我有 2 个 EAR 1_EAR 和 2_EAR(它们有网络服务和其他代码)。现在我有 1 个项目 DB_prj 用于与数据库交互。现在所有项目 1_EAR、2_EAR、DB_prj 在它们各自的元中都有一个 persistence.xml -inf文件夹。现在只有1_EAR和2_EAR里面有web.xml。 2_EAR是我们团队开发的一个新项目。 1_EAr 工作正常。现在,当我尝试使用我放在 2_EAR 中的开发类删除任何记录时,我的代码挂起并超时。要删除记录,我从 DB_prj 调用 API,从 1_EAR 调用 API 时工作正常。在 web.xml 中1_EAR 和 2_EAR 我有以下共同点。 1_EAR 的 web.xml 有许多其他东西在 2_EAR 的 web.xml 中不存在。
<persistence-context-ref>
<persistence-context-ref-name>persistence/XYZPersist</persistence-context-ref-name>
<persistence-unit-name>XYZPersist</persistence-unit-name>
</persistence-context-ref>
任何人都可以帮助我解决这个问题吗?上面的代码是在有人回答我的帖子@ problem with JNDI 后放在 2_EAR 的 web.xml 中的。
最佳答案
我敢打赌,您的 EAR#2 会通过 JNDI 解析上下文,但上下文是由 EAR#1 和 EAR#1 类加载器绑定(bind)的;因此,在持久性 API 的深处,您可能会得到一个 ClassCastException,因为该类虽然具有相同的名称和包,但是由不同的类加载器加载的。
我的观点是,两个 EAR 的持久性单元应该有不同的 JNDI 名称。从您的帖子看来它们是相同的。
(实际上,提到插入/更新工作正常与我的假设相矛盾,但谁知道呢。)
关于java - 尝试在jpa中删除时的并发问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4633748/