2011-12-22 5 views
2

Entity Managerインスタンスjbossは、永続コンテキストにバインドされた実際の実装に対するプロキシです。jbossは管理されたEntity Managerの同時実行性の問題を処理しますか?

この実際の実装は、JTAトランザクション(トランザクションコンテキストごと)によって提供される分離を収集します。

私は、プロキシインスタンスを扱うときに並行性の問題について心配する必要はないと考えています。

コンテナインジェクションの代わりにJNDIルックアップから取得することにした場合、このプロキシインスタンスをキャッシュすることもできますか?

これは妥当ですか?

答えて

3

コンテナは、の@PersistenceContext注釈と注入のスキャンを担当します。 のインスタンスにEntityManagerのプロキシをプロキシできます。

コンテナが依存性注入を担当するEJBでは、スレッドセーフであることを確認できます。永続コンテキストは、同じトランザクション内の複数のコンポーネント間で共有されます。あなたは(同時実行が懸念される)サーブレット環境で@PersistenceContextを使用して、このEntityManagerを注入場合

しかし、あなたがしているないスレッドセーフ。代わりに@PersistenceUnitを使用してください。あなたはJBoss 7 JPA Reference Guideのこの部分を参照することができます。

( 複数のスレッドに表示されているサーブレットクラス変数に注入していないエンティティマネージャが 、スレッドセーフであることが予想されていないことに注意してください)

いくつかの時間前、私はコンテナによってJTAトランザクションとEntityManagersのプロキシの間で共有する永続コンテキストについて知っていることまとめとhereそれを公開しました。私はあなたがそれが有用であることを願っています。

関連する問題