第9章 キャッシュローダー
JBoss Cache は
CacheLoader を使用してインメモリキャッシュをバックエンドデータストアにバックアップすることができます。 JBoss Cache にキャッシュローダーが設定されている場合は、 以下の機能が提供されます。
- キャッシュ要素がアクセスされ、要素がキャッシュに存在しない場合 (エビクションやサーバー再起動が原因の場合など) は、キャッシュローダーが要素をキャッシュに透過的にロードします (要素がバックエンドストアにある場合)。
- 要素が変更、 追加、 削除されると、 その変更はキャッシュローダーを介してバックエンドストアに保持されます。 トランザクションを使用する場合、 トランザクション内で作成されたすべての変更は保持されます。 この場合、
CacheLoaderはトランザクションマネージャにより実行された 2 相コミットプロトコルで実行されますが、 明示的には実行されません。
9.1. CacheLoader インターフェースとライフサイクル リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
図9.1 CacheLoader インターフェース
JBoss Cache と
CacheLoader 実装の対話は次のように行われます。 CacheLoaderConfiguration (下記参照) は null 以外の値を持ちます。 設定された各 cacheloader のインスタンスは、 キャッシュの作成時に作成され、 キャッシュの起動時に起動します。
キャッシュの起動時に
CacheLoader.create() と CacheLoader.start() が呼び出されます。 また、 キャッシュの終了時には stop() と destroy() が呼び出されます。
次に、
setConfig() と setCache() が呼び出されます。 setCache() は、キャッシュへの参照を保存するため使用され、 setConfig() は CacheLoader のこのインスタンスを設定するために使用されます。 たとえば、 この例ではキャッシュローダーがデータベースへの接続を確立できます。
CacheLoader インターフェースには、 トランザクションが使用されない場合に呼び出される get()、 put()、 remove()、 removeData() メソッドがあります。 これらのメソッドは値を即座に取得 (get())、 設定(put())、 削除 (remove()、 removeData()) します。 これらのメソッドについては、 インターフェースの javadoc コメントで説明されています。
また、 トランザクションで使用されるメソッドには
prepare()、commit()、 rollback() の 3 つがあります。 prepare() メソッドは、 トランザクションがコミットされる時に呼び出され、 引数としてトランザクションオブジェクトと変更のリストを持ちます。 トランザクションオブジェクトは、 値が変更のリストであるトランザクションのハッシュマップへのキーとして使用できます。 各変更リストは、 あるトランザクションに対するキャッシュへの変更を表す複数の Modification 要素を持ちます。 prepare() が正常に値を返した場合、 キャッシュローダーはトランザクションを正常にコミット (またはロールバック) できるはずです。
JBoss Cache はキャッシュローダー上で prepare() や commit()、 rollback() を適時に呼び出します。
commit() メソッドはキャッシュローダーがトランザクションをコミットするよう指示し、rollback() メソッドはキャッシュローダーがそのトランザクションに関連する変更を破棄するよう指示します。
各メソッドや必要なコントラクト実装の詳細は、 このインターフェースに関する javadoc を参照してください。