【问题标题】:Duplicate ClassLoaders generated per persistence-unit on WebsphereWebsphere 上每个持久性单元生成的重复类加载器
【发布时间】:2013-04-24 14:36:52
【问题描述】:

我们在 WAS 8.5 上运行 EAR,我们的每个 DAO 都重复了 31 次。注意到我们的 persistence.xml 有 30 个 JNDI 数据源,我测试了减少数量,实际上重复计数减少了。

但是我已经尝试连续删除所有多余的行,但我仍然得到重复项。不过,删除最后一行会给我一个 NestedJarException。

   <persistence-unit name="unitTest"
          transaction-type="JTA">    
          <jta-data-source>jdbc/Testing/Ds</jta-data-source>
          <mapping-file>META-INF/default-mappings.xml</mapping-file>
          <exclude-unlisted-classes>false</exclude-unlisted-classes>
   </persistence-unit>

有没有人知道任何其他可能导致我的 EJB 类为每个持久性单元重复的事情?

问候

【问题讨论】:

  • 你的意思是你有 30 个不同的数据源?你每一个都用吗?
  • 是的,每个客户都有自己的数据库。

标签: jakarta-ee jpa ejb websphere persistence.xml


【解决方案1】:

如果您检查JPA 2.0 specification 第 76 页第 3.2 项“实体实例的生命周期 " 如下所示:

3.2 实体实例的生命周期 本节介绍用于管理实体实例生命周期的 EntityManager 操作。

一个实体实例可以被描述为新的、托管的、 分离或移除。

• 新实体实例没有持久性 身份,并且尚未与持久性上下文相关联。

• 一个 托管实体实例是具有持久标识的实例 当前与持久化上下文相关联。

• 一个分离的 实体实例是具有持久身份的实例,该身份不是 (或不再)与持久化上下文相关联。

• 已删除 实体实例是具有持久标识的实例,关联 具有持久性上下文,将从数据库中删除 在事务提交时。

比我想象的你的情况意味着你有 30 个 jpa 持久对象,每个对象都映射为 1 个持久上下文(持久标识),指向每个数据库,并且你可能有 1 个没有持久标识的分离和/或新对象。

这是因为规范如何确定实体实例生命周期应该被实现。

问候

【讨论】:

  • 这与管理实体实例有关。不幸的是,在我的例子中,被复制的是 EJB。 EJB 不是持久性对象——当它们被使用时(例如查询数据库),这将导致 EntityManagerFactory 提供一个 EntityManager,它将根据需要使用,这就是与上述相关的时候。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多