cache-between-transactions の値
Database Trueのみ
Exclusive TrueまたはFalse
Read-Only TrueまたはFalse
Optimistic TrueまたはFalse
トランザクション間のキャッシング
表4-3 CMP 1.1 Bean に関して各同時方式で許可される cache-between-transactions の値
Exclusive 同時方式でのトランザクション間の キャッシング
Exclusive同時方式のエンティティ Bean で長期キャッシングを有効にする場
合、EJB コンテナは基盤データへの更新アクセスを排他的にする必要がありま す。これはつまり、その EJB コンテナ以外の別のアプリケーションがデータを 更新してはならないということです。あるクラスタ内に Exclusive 同時方式の EJB をデプロイする場合、長期キャッシングは自動的に無効になります。クラス タ内のどのノードからもデータを更新できるからです。これにより長期キャッシ ングは実行不能になります。
WebLogic Server の旧バージョンでは、この機能は weblogic-ejb-jar.xmlの
db-is-shared要素によって制御されていました。
注意: Exclusive 同時方式は単一サーバでの機能です。クラスタ化されたサーバ
では使用しないでください。
CMP 1.1 Bean が使用する同時方式 設定可能な
cache-between-transactionsの値
Database Trueのみ
Exclusive TrueまたはFalse
Read-Only TrueまたはFalse
Optimistic 該当なし。Optimistic同時方式は CMP
1.1 Bean では使用できない。
4 WebLogic Server EJB コンテナとサポートされるサービス
4-30 WebLogic エンタープライズ JavaBeans プログラマーズガイド
ReadOnly 同時方式でのトランザクション間の
キャッシング
ReadOnly 同時方式のエンティティ Bean で長期キャッシングを無効にした場合、
EJB コンテナでは読み込み専用データの長期キャッシングを常に実行するので、
cache-between-transactions の設定値は無視されます。
Optimistic 同時方式でのトランザクション間の キャッシング
Optimistic同時方式のエンティティ Bean で長期キャッシングを有効にした場
合、EJB コンテナは前回のトランザクションでキャッシュされた値を再利用しま す。コンテナは、トランザクションの最後にオプティミスティックに競合を チェックすることによって、更新におけるトランザクションの一貫性を保証しま す。 オプティミスティックなチェックを設定する手順については、4-19 ページの
「Optimistic 同時方式」を参照してください。
また、オプティミスティックな競合を回避できるように、オプティミスティック なデータ更新に関する通知が他のクラスタ メンバーにブロ―ドキャストされま す。
トランザクション間のキャッシングの有効化
トランザクション間のキャッシングを有効にするには、次の手順に従います。
1. 次のオプションの 1 つを選択し、weblogic-ejb-jar.xml ファイルの cache-between-transactions要素を設定します。
EJB コンテナによるデータの長期キャッシングの実行を有効にする場合、
Trueを指定する。
EJB コンテナによるデータの短期キャッシングの実行を有効にする場合、
Falseを指定します。これはデフォルト設定です。
2. デプロイメント記述子を指定する手順については、6-6 ページの「EJB デプ ロイメント記述子の指定と編集」を参照してください。
トランザクション間のキャッシング
トランザクション間のキャッシュを使用した ejbStore() の呼び出しの制限
デフォルトによって、WebLogic Server は各トランザクションの開始時に
ejbLoad()を呼び出します。この動作は、複数のソースがデータベースを更新
するような環境に適しています。 複数のクライアント (WebLogic Server を含む ) が EJB の基盤データを変更する可能性があるため、ejbLoad() の最初の呼び出 しは、キャッシュ済みデータを更新する必要があることを Bean に通知し、確実 に最新のデータが処理対象になるようにします。
クラスタではなく単一のサーバで Exclusive 同時方式を使用する場合のように、
単一の WebLogic Server トランザクションのみが特定の EJB に同時アクセスする ような特殊な環境では、ejbLoad()をデフォルトで呼び出す必要はありません。
EJB の基盤データを更新するクライアントまたはシステムは他に存在しないの で、WebLogic Server の EJB データのキャッシュは常に最新のものとなります。
こうしたケースでは、ejbLoad()を呼び出しても、Bean にアクセスする
WebLogic Server クライアントに対して余計なオーバーヘッドが発生するだけで
す。
単一の WebLogic Server トランザクションが特定の EJB にアクセスする場合、
ejbLoad()の不要な呼び出しを避けるために、WebLogic Server には
cache-between-transactionsデプロイメント パラメータが用意されていま す。 デフォルトでは、cache-between-transactions は各 EJB に対して Bean の weblogic-ejb-jar.xmlファイルで「false」に設定されています。このため、
ejbLoad()は各トランザクションの開始時に必ず呼び出されます。 単一の
WebLogic Server トランザクションだけが EJB の基盤データにアクセスするよう なケースでは、その Bean の weblogic-ejb-jar.xmlファイルの dを「true」に 設定できます。 cache-between-transactionsを「true」に設定して EJB をデプ ロイすると、WebLogic Server の単一のインスタンスが以下の場合に限り、その
Bean の ejbLoad()を呼び出します。
クライアントが最初に EJB を参照する場合
EJB のトランザクションがロールバックされた場合
4 WebLogic Server EJB コンテナとサポートされるサービス
4-32 WebLogic エンタープライズ JavaBeans プログラマーズガイド
cache-between-transactions に関する制限
cache-between-transactions には以下の制限があります。
単一サーバ デプロイメントでは、cache-between-transactions は、Exclusive、
Optimistic、および Read-Only 同時方式でのみ有効にできます。Database 同時方
式では cache-between-transactions を使用できません。
クラスタ デプロイメントでは、cache-between-transactionsは、Optimistic および Read-Only 同時方式でのみ有効にできます。Exclusive または Database 同 時方式では cache-between-transactions を使用できません。