2013-04-24 58 views
1

我们正在WAS 8.5上运行EAR,并且我们的每个DAO都重复了31次。注意到我们的persistence.xml有30个JNDI数据源,我测试了减少数量,实际上减少了重复计数。Websphere上每个持久性单元生成的重复ClassLoaders

但我已经尝试删除连续的每一个多余的线,我仍然得到重复。尽管删除最后一行给了我一个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类为每个持久性单元重复的东西?

问候

+0

你是说你有30个不同的数据源?你使用它们中的每一个? – 2013-04-24 15:13:10

+0

是的,每个客户都有自己的数据库。 – djb 2013-04-25 08:40:59

回答

1

如果你检查JPA 2.0 specification页76项目3.2“的实体实例的生命周期 ”你看下面:

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

实体实例可以被定义为新的,被管理的,被分离或被删除。

•新实体实例没有持久性 标识,但尚未与持久性上下文相关联。

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

•分离的 实体实例是持久性标识与非持久性上下文相关联(不再与 关联)的实例。

•已删除的 实体实例与持久标识,与persis-唐塞上下文关联 ,将从数据库 交易时被删除提交一个实例。

比我想象你的情况意味着你有30个JPA持久对象每一个映射为1个持久上下文(持久化标识)指向数据库中的每一个,你可能有1分离和/或新的无持久的身份。

发生这种情况是因为规范如何确定应该实施实体实例生命周期。

Regards

+0

这涉及管理实体实例。不幸的是,就我而言,它是被重复的EJB。 EJB不是持久化对象 - 当它们被使用(例如查询数据库)时,这会导致EntityManagerFactory提供一个EntityManager,将根据需要使用这个EntityManager,这就是上述内容的相关性。 – djb 2013-04-29 09:53:37