7.3. ノード上におけるメソッド呼び出し
キャッシュは基本的にノードの集合であるため、 キャッシュ全体または個別ノード上で操作が呼び出された時にこれらのノードへクラスタリングや永続性、 エビクションなどのアスペクトを適用する必要があります。 これをモジュラーで拡張可能に実行するには、 インターセプタチェーンを使用します。 チェーンは複数のインターセプタで構成され、 各インターセプタがアスペクトや特定機能を追加します。 キャッシュの作成時に使用する設定に応じてチェーンが構築されます。
NodeSPI は、 インターセプタスタックを通過せずに直接ノード上で操作するメソッド (xxxDirect() メソッドなど) の一部を提供します。 このようなメソッドを使用すると、 ロッキングやレプリケーションなど適用する必要があるキャッシュのアスペクトに影響することをプラグインの作成者は念頭に置いて作業する必要があります。 完全に理解していない場合は、 このようなメソッドは使用しない方がよいでしょう。
7.3.1. インターセプタ リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
JBoss Cache は
DataContainer 実装のコアデータ構造で、 データ構造前のインターセプタを使用して機能が実装されます。 CommandInterceptor は抽象クラスで、 インターセプタ実装が拡張します。
CommandInterceptor が Visitor インターフェースを実装します。 そのため、 強い型付けにてコマンドを変更することが可能です。 次項でビジターやコマンドの詳細を説明します。
インターセプタのチェーン全体でコマンドを送る
InterceptorChain クラスでインターセプタ実装はチェーンされます。 特別なインターセプタ CallInterceptor は常にこのチェーンの最後に位置し、 コマンドの process() メソッドを呼び出してチェーンへ渡されたコマンドを呼び出します。
JBoss Cache には、 異なる動作の側面を表す複数のインターセプタが同梱されています。 その一部は次の通りです。
キャッシュインスタンスに対して設定されたインターセプタチェーンを取得し検査するには、
TxInterceptor- 進行中のトランザクションを検索し、 トランザクションマネージャへ登録して同期イベントへ参加します。ReplicationInterceptor- RpcManager クラスを使用してクラスタ全体でステートをレプリケートします。CacheLoaderInterceptor- 要求されたデータがメモリにない場合に永続ストアよりデータをロードします。
CacheSPI.getInterceptorChain() を呼び出します。 CacheSPI.getInterceptorChain() は、 コマンドが対応する順で順序付けされるインターセプタの List を返します。
7.3.1.1. カスタムインターセプタの作成 リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
特定のアスペクトや機能を追加するカスタムインターセプタを作成するには、 阻止したいコマンドに応じて
CommandInterceptor を拡張し、 関係する visitXXX() メソッドをオーバーライドします。 PrePostProcessingCommandInterceptor や SkipCheckChainedInterceptor など、 代わりに拡張できる他の抽象インターセプタもあります。 提供される追加機能についての詳細は関連する javadoc を参照してください。
Cache.addInterceptor() メソッドを使用してインターセプタチェーンにカスタムインターセプタを追加する必要があります。 メソッドの詳細は javadoc を参照してください。
XML によるカスタムインターセプタの追加もサポートされています。 詳細は 12章設定に関する参考資料 を参照してください。