アセンブルされた EJB モジュール内のコンテナー管理パーシスタンスのシーケンスのグループ化
コンテナー管理パーシスタンス (CMP) Bean を含む Enterprise JavaBeans (EJB) モジュールをアセンブルすると、アプリケーションの実行時に特定のタイプのデータベース関連の例外の発生を防ぐことができます。シーケンスのグループ化 によって、エンティティー Bean がリレーショナル・データベース・テーブルを更新する順序を指定することができます。
注: エンティティー Bean は EJB 3.x モジュールではサポートされていません。
参照保全性 (RI) の違反による例外の除去
シーケンスのグループ化は、データベースの 参照保全性 (RI) の違反を防ぐのに特に役に立ちます。
データベース RI ポリシーは、データベース表へのデータの書き込みやデータベース表からのデータの削除の方法に関する規則を規定しており、リレーショナルの整合性を保守します。
ただし、Bean パーシスタンスを管理するためのランタイム要件によって、EJB アプリケーションは RI 規則に違反し、データベースの例外を起こすことがあります。
これらのランタイム要件は、以下のことを必ず指示します。
- エンティティー Bean は、メソッド呼び出しにより直ちにデータベースに関連するオペレーションを作成および除去します。
- エンティティー Bean の変更は、finder メソッドが呼び出されるか、またはトランザクションが終了するまで、EJB コンテナーによってキャッシュされます。
データベース RI を順守するパーシスタンス・シーケンスを保証する唯一の方法は、シーケンスを指定することです。これは、アセンブリー・ツールの EJB デプロイメント記述子エディターで行います。 シーケンスのグループ化フィーチャーで、Bean を CMP グループに割り当てます。各グループで、RI に違反せずに更新を行うために、パーシスタンス・マネージャーがデータベースに Bean データを挿入する順序を指定します。
シーケンス・グループを指定する方法の詳細については、トピックCMP シーケンス・グループのランタイムの設定を参照してください。 同期化する必要がある RI ポリシーについては、データベース管理者にお問い合わせください。
オプティミスティック並行性制御スキームの例外リスクの最小化
シーケンスのグループ化は、オプティミスティック並行性制御のために構成される
エンティティー Bean のトランザクション・ロールバック例外のリスクも削減することができます。これらの並行性制御スキームでは、最大のトランザクションが一貫してデータにアクセスできるように、最小の時間でデータベース・ロックが行われます。
以下の 2 つの共通した理由によって、比較的制限されていない状態のデータベースにより、トランザクション・ロールバック例外が起こることがあります。
- 並行トランザクションが同じテーブル行のロックを試行する場合、データベース・デッドロックが起こります。
- トランザクションは、アプリケーション・ロジックに違反する順序で起こることがあります。
シーケンスのグループ化フィーチャーを使用して、これらの シナリオが起こりにくいように Bean パーシスタンスを配列します。