WAS 8.0.0.2:对persistence-context-ref的JNDI查找总是返回新的EntityManager实例

时间:2013-04-30 14:00:25

标签: jndi entitymanager websphere-8

嗨,WAS开发人员,

我有一个问题,即声明的persistence-context-ref上的JNDI查找总是返回一个新的EntityManager实例。我希望在一个JTA事务中,容器为我提供始终相同的EntityManager实例。但是,一个事务中的多个EntityManagers会导致锁定问题!此外,由于实体可能在一个事务中多次加载(对于每个EntityManager),因此未优化JPA用法。

我必须将persistence-context-ref与JNDI查找一起使用,因为我在EJB3.1模块中有一些EJB2.1。此外,我想让EntityManager容器管理。

重现只是在EJB2.1 SessionBean上声明一个persistence-context-ref:

<persistence-context-ref>
  <persistence-context-ref-name>persistence/MyPersistence</persistence-context-ref-name>
  <persistence-unit-name>MyPersistence</persistence-unit-name>
</persistence-context-ref>

现在在打开的JTA事务中连续两次进行JNDI查找:

context.lookup("java:comp/env/persistence/MyPersistence")

您将看到返回两个不同的EntityManager实例。

这是WAS的缺陷吗?

1 个答案:

答案 0 :(得分:1)

从persistence-context-ref查找返回的EntityManager实际上是每个事务EntityManager的代理(调试器或打印将看到它是JPATxEntityManager的实例),因此即使每个查找返回一个唯一对象,它们都将与相同的底层EntityManager进行交互。