1

WAS 開発者の皆様、こんにちは。

宣言された persistence-context-ref での JNDI ルックアップが常に新しい EntityManager インスタンスを返すという問題があります。1 つの JTA トランザクション内で、コンテナーが常に同じ EntityManager インスタンスを提供することを期待しています。しかし、1 つのトランザクション内に複数の EntityManager があると、ロックの問題が発生します。さらに、1 つのトランザクション内で (EntityManager ごとに) エンティティが複数回読み込まれる可能性があるため、JPA の使用は最適化されません。

EJB3.1 モジュール内にいくつかの EJB2.1 があるため、JNDI ルックアップと一緒に persistence-context-ref を使用する必要があります。さらに、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 ルックアップを連続して 2 回行います。

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

2 つの異なる EntityManager インスタンスが返されることがわかります。

これは WAS の欠陥ですか?

4

1 に答える 1