3

を使用する場合EntityManager、 で 1 つのインスタンスを取得PersistenceContextしてプログラムに渡す方が良いですか、それとも依存性注入を複数回使用する必要がありますか?

私のアプリケーションでは、各クライアントはステートフル セッション Bean と通信し、各 Bean はEntityManagerある時点で使用する必要があります。Bean メソッドは同時に呼び出されると思います (しかし、よくわかりません)。EntityManagerスレッドセーフな方法で使用することを保証するにはどうすればよいですか? 取引で?各 Bean に個別のインスタンスがありますか?

これが混乱している場合は申し訳ありません。私は EJB/JPA を初めて使用するので、質問に対処する資料が見つかりませんでした。

4

2 に答える 2

3

DAO クラス@PersistenceContextに挿入するために使用します。EntityManagerこれらは、データベース操作を処理するクラスです。次に、他のすべての (サービス) クラスに DAO クラスを挿入します。DAO はステートレス Bean である必要があります (リモート インターフェイスは必要なく、ローカルのみ)

于 2009-12-27T21:16:40.470 に答える
3

はい、EntityManagerインスタンス (スレッド/クライアント要求ごとに異なります) をステートフル セッション Bean (少なくとも異なるクライアントからは同時に呼び出されない) に注入する必要があります。

ただし、DAO クラスを作成しても意味がありません。JPA はすでに、RDBMS の独立性と異なる JPA 実装間の移植性を提供する高レベルの持続性 API です。したがって、DAO はコードベースを混乱させるだけです。

トランザクションの場合、実際には何もする必要はありません。セッション Bean のビジネス メソッドには、デフォルトで "Required" トランザクション属性があるため、常にクライアント固有のトランザクション内で実行されます。

于 2009-12-28T12:09:01.323 に答える