5.3. EXTENDED 永続コンテキスト
アプリケーションにより管理されたすべてのエンティティマネージャとそのように定義された、コンテナにより管理された永続コンテキストは
EXTENDED です。つまり、永続コンテキストタイプはトランザクションライフサイクルの範囲を超えます。トランザクションの範囲外で実行された操作に何が起こったのかを理解する必要があります。
EXTENDED 永続コンテキストにおいて、トランザクション外でエンティティマネージャのすべての読み取り専用操作を実行できます (find()、getReference()、refresh()、および読み取りクエリ)。一部の変更操作はトランザクション外で実行できますが、これらの操作は永続コンテキストがトランザクションに参加するまでキューに格納されます。これは、persist()、merge()、remove() の場合に該当します。一部の操作 (flush()、lock()、および更新/削除クエリ) はトランザクション外で呼び出すことができません。
5.3.1. コンテナにより管理されたエンティティマネージャ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
コンテナにより管理されたエンティティマネージャで EXTENDED 永続コンテキストを使用する場合は、永続コンテキストのライフサイクルがステートフルセッション Bean のライフサイクルにバインドされます。また、エンティティマネージャがトランザクション外で作成された場合は、変更操作 (persist、merge、remove) が永続コンテキストでキューに格納され、データベースに対して実行されません。
トランザクションに関連する、またはトランザクションを開始するステートフルセッション Bean のメソッドが後で呼び出されたとき、エンティティマネージャはトランザクションに参加します。永続コンテキストを同期するために、キューに格納されたすべての操作が実行されます。
これは、
entitymanager-per-conversation パターンを実装する場合に最適です。ステートフルセッション Bean は対話実装を表します。すべての中間対話はトランザクションに関係しないメソッドで処理されます。対話の終了は JTA トランザクション内部で処理されます。したがって、キューに格納されたすべての操作はデータベースに対して実行され、コミットされます。アプリケーション内部の対話の表記法に興味がある場合は、JBoss Seam を調べてください。Jboss Seam は対話とエンティティマネージャのコンセプトを強調し、JPA と JSF をともにバインドします。