例: 読み取り/読み取り整合性検査
読み取り/読み取り整合性検査は、データが他のトランザクションから読み取られる LifeTimeInCache Bean にのみ適用されます。
使用のシナリオ
反復可能読み取り (RR) のためのアクセス・インテントの場合、これは、そのデータがデータ・ストア内のデータと整合していることを製品がチェックし、またチェック後に誰もそのデータを更新していないことを製品が保証することを意味しています。 コミット済み読み取り (RC) のアクセス・インテントの場合、これは、そのデータが 検査の時点で整合していることを製品が確認することを意味しますが、検査後データに変更がないことは保証しません。 これによって、LifeTimeInCache Bean の振る舞いが非 LifeTimeInCache Bean と同じになります。
「アンの」銀行口座の利子の計算に関する以下のシナリオで示されるよう に、整合性検査の設定には 3 つのオプションがあります。 いずれの場合も、データ・ストアは、利子を計算するための Enterprise JavaBeans (EJB) コンテナー管理パーシスタンス (CMP) アプリケーションと、EJB Bean 管理パーシスタンス (BMP)、Java Database Connectivity (JDBC)、レガシー・アプリケーションなどの他のアプリケーションによって共有されています。 またいずれの場合も、EJB アカウントは、存続期間の長い Bean として構成されます。
NONE
- サーバーを開始します。
- トランザクション 1 内の ユーザー 1 が Account.findByPrimaryKey("10001") を呼び出し、アンのアカウント・ データが、残高が 100 ドルでデータベースから読み取られます。
- アンの記録は、サーバー上のパーシスタンス・マネージャー (PM) によってキャッシュされます。
- ユーザー 2 は JDBC 呼び出しを書き込み、残高を 120 ドルに変更します。
- トランザクション 2 内のユーザー 3 は、アカウント「10001」の Account.findByPrimaryKey() を呼び出し、アンのデータは、残高が 100 ドルで キャッシュから読み取られます。
- アンの利子を計算しますが、データ保全性問題のために、結果が正しくない可能性があります。
読み取り/読み取り検査 AT_TRAN_BEGIN
- サーバーを開始します。
- トランザクション 1 内の ユーザー 1 が Account.findByPrimaryKey("10001") を呼び出し、アンのアカウント・ データが、残高が 100 ドルでデータベースから読み取られます。
- アンの記録は、サーバー上のパーシスタンス・マネージャー (PM) によってキャッシュされます。
- ユーザー 2 は JDBC 呼び出しを書き込み、残高を 120 ドルに変更します。
- トランザクション 2 内のユーザー 3 は、アカウント「10001」の Account.findByPrimaryKey() を呼び出し、アンのデータは、残高が 100 ドルで キャッシュから読み取られます。
- PM は、アンのアカウント上で読み取り/読み取り検査を実行し、残高 の 100 ドルが変更されていることを検出します。 データベース照会が発行されて、残高の 120 ドルが検出され、キャッシュ内 のアンのデータが更新されます。
- アンの利子の計算は、トランザクションへ進みます。データ保全性が保護されているからです。
読み取り/読み取り検査 AT_TRAN_END
- サーバーを開始します。
- トランザクション 1 内の ユーザー 1 が Account.findByPrimaryKey("10001") を呼び出し、アンのアカウント・ データが、残高が 100 ドルでデータベースから読み取られます。
- アンの記録は、サーバー上のパーシスタンス・マネージャー (PM) によってキャッシュされます。
- ユーザー 2 は JDBC 呼び出しを書き込み、残高を 120 ドルに変更します。
- トランザクション 2 内のユーザー 3 は、アカウント「10001」の Account.findByPrimaryKey() を呼び出し、アンのデータは、残高が 100 ド ルでデータベースから読み取られます。
- アンの利子を計算します。
- トランザクション 2 の最後に、PM は、アンのアカウント上で読み取 り/読み取り検査を実行し、残高の 100 ドルが変更されていることを検出します。
- PM はトランザクションをロールバックし、キャッシュを無効にします。 トランザクションは失敗し、再度データ保全性は保護されます。