既存の EJB キャッシング・オプションに加えて、読み取り専用エンティティー Bean を開発することができます。
このタスクについて
この機能は、通常以下のような場合に使用します。
- ご使用のアプリケーションが頻繁に変更されないデータを使用する場合。例として、
1 週間または 1 カ月に 1 度しか変更されない価格データを使用する小売りアプリケーションなどがあります。
- ご使用のアプリケーションが、不整合の可能性があるデータを容認できる場合。
EJB コンテナーが容認できる「不整合」の程度は、ユーザーが構成することができます。
- Bean がスレッド・セーフな方法でコード化されており、
1 度に複数のスレッドによって安全に呼び出すことが可能である場合。
この機能を使用するには、アプリケーション・アセンブリー・ツール (WebSphere Application Developer または Application Server Toolkit のいずれか) 内の選択リストを使用して、
現在 Bean キャッシング・オプションを選択しているのと同じ方法で、Bean タイプを 読み取り専用 として宣言します。
プロシージャー
- アセンブリー・ツールを開始します。
- 通常どおり、パラメーター選択リストを呼び出します。
- 「Activate At」パラメーターを「ONCE」に設定します。
これは、標準オプション A キャッシングの場合と同じです。
- 「Load At」パラメーターを「INTERVAL」、「DAILY」または「WEEKLY」に設定します。
- INTERVAL
- Bean が最後にロードされてから、一定の時間が経過した場合、Bean を再ロードします。
- DAILY
- ホスト・コンピューターの現地時間で指定した時間が経過後、最初に起こるビジネス・メソッド呼び出しで、Bean を再ロードします。
- WEEKLY
- 指定した時間で 1 週間に 1 度起こるという点を除き、DAILY と似ています。
- 「再ロード間隔」パラメーターを負でない整数値に設定します。
このパラメーターの意味は、「Load At」パラメーターが INTERVAL、DAILY、または WEEKLY のいずれであるかで変わってきます。
- INTERVAL
- 整数が、EJB コンテナーが永続ストレージから Bean の状態を再ロードする前の (Bean が最後にロードされてからの) 経過時間 (分) を表します。
値 0 は許容可能で、コンテナーに Bean の状態を再ロードさせません。
- DAILY
- 整数は、後に再ロードが実行される日それぞれの絶対時間を表します。いわゆる、24 時間クロックと呼ばれるもので表示されます。
つまり、数字は全部で 0000 から 2359 までで、0000 は深夜 12 時、1200 は正午、
2359 は深夜 12 時の 1 分前を表します。この数値の先行ゼロはオプションです。
誤った形式の値の場合は (例えば、1285)、
結果となる時間は常に、最下位 2 桁の分の値を、最下位 2 桁より左にある
時間の値に追加する方法で計算されます。
このため、値 1285 は 1325 となります (1200 の後に 85 分)。2359 を超える値はすべて、
負の値および非数値と同様、0000 と解釈されます。
- WEEKLY
- 整数は、長さが 5 桁でなければならず、最初の桁が曜日を表していることを除いて、
DAILY と同じ方法でエンコードされます。
日曜日は 1 としてエンコードされ、土曜日は 7 としてエンコードされます。値が 4 桁以下の場合は、
最初の桁を 1 であるとして、5 桁の長さがあるように処理します。
再ロードは、Bean でのビジネス・メソッド呼び出しにのみ応答して実行されます。
ビジネス・メソッドが呼び出されると、EJB コンテナーは、
再ロード間隔が期限切れでないか、またはその日の絶対
クロック時刻が過ぎていないかを確認します
(使用されているのが INTERVAL、DAILY、WEEKLY のいずれであるかによって変わります)。
その場合は、
コンテナーが Bean 状態を再ロードします。
読み取り専用エンティティー Bean がグローバル・トランザクション内で呼び出され、トランザクションがアクティブな間に再ロード間隔が期限切れになると、
トランザクション中の Bean でビジネス・メソッド呼び出しを行うと、トランザクション中は Bean が引き続き非再ロード状態になります。
つまり、Bean 状態のスナップショットは、トランザクション中にその Bean 上で最初のビジネス・メソッド呼び出しによって効果的に取得され、その状態は完了するまでそのトランザクションに継続して有効となります。
再ロード後、別のトランザクションでその Bean の新規呼び出しが行われると、再ロードされた状態になります。