2.7. キャッシュリスナの追加 - キャッシュイベントに対する登録
JBoss Cache はキャッシュイベントで通知を登録する便利なメカニズムを提供します。
Object myListener = new MyCacheListener(); cache.addCacheListener(myListener);
登録されたリスナを削除したりクエリする同様のメソッドも存在します。 詳細は
Cache
インターフェースに関する javadoc を参照してください。
基本的に、
@CacheListener
アノテーションが付けられていれば、 あらゆるパブリッククラスをリスナとして使用できます。 また、 クラスはメソッドレベルアノテーション (org.jboss.cache.notifications.annotation
パッケージ内) の 1 つが付けられたメソッドを 1 つ以上持たなければなりません。 このようにアノテーション付けされたメソッドはパブリックとなる必要があり、 無効の戻りタイプを持たなければなりません。 また、 タイプ org.jboss.cache.notifications.event.Event
の単一のパラメータかサブタイプ の 1 つを許可しなければなりません。
@CacheStarted
- このアノテーションが付けられたメソッドはキャッシュ起動時に通知を受け取ります。 メソッドはCacheStartedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@CacheStopped
- このアノテーションが付けられたメソッドはキャッシュ停止時に通知を受け取ります。 メソッドはCacheStoppedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeCreated
- このアノテーションが付けられたメソッドはノード作成時に通知を受け取ります。 メソッドはNodeCreatedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeRemoved
- このアノテーションが付けられたメソッドはノードの削除時に通知を受け取ります。 メソッドはNodeRemovedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeModified
- このアノテーションが付けられたメソッドはノードが変更された時に通知を受け取ります。 メソッドはNodeModifiedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeMoved
- このアノテーションが付けられたメソッドはノードが移動した時に通知を受け取ります。 メソッドはNodeMovedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeVisited
- このアノテーションが付けられたメソッドはノードの起動時に通知を受け取ります。 メソッドはNodeVisitedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeLoaded
- このアノテーションが付けられたメソッドは、CacheLoader
よりノードがロードされた時に通知を受け取ります。 メソッドはNodeLoadedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeEvicted
- このアノテーションが付けられたメソッドはノードがメモリからエビクトされた時に通知を受け取ります。 メソッドはNodeEvictedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeInvalidated
- このアノテーションが付けられたメソッドは、 リモートの無効化イベントによってノードがメモリからエビクトされた時に通知を受け取ります。 メソッドはNodeInvalidatedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodeActivated
- このアノテーションが付けられたメソッドはノードがアクティベートされた時に通知を受け取ります。 メソッドはNodeActivatedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@NodePassivated
- このアノテーションが付けられたメソッドはノードがパッシベートされた時に通知を受け取ります。 メソッドはNodePassivatedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@TransactionRegistered
- ノードが登録済みのトランザクションマネージャにjavax.transaction.Synchronization
を登録した時に、 このアノテーションが付けられたメソッドは通知を受け取ります。 メソッドはTransactionRegisteredEvent
より割り当て可能なパラメータタイプを許可する必要があります。@TransactionCompleted
- ノードが登録済みのトランザクションマネージャからコミットまたはロールバック呼び出しを受け取った時に、 このアノテーションが付けられたメソッドは通知を受け取ります。 メソッドはTransactionCompletedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@ViewChanged
- このアノテーションが付けられたメソッドはクラスタのグループ構造が変更した時に通知を受け取ります。 メソッドはViewChangedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@CacheBlocked
- ステート転送イベントに対してキャッシュ操作をブロックするようクラスタが要求した時に、 このアノテーションが付けられたメソッドは通知を受け取ります。 メソッドはCacheBlockedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@CacheUnblocked
- ステート転送イベント後にキャッシュ操作をブロックしないようクラスタが要求した時に、 このアノテーションが付けられたメソッドは通知を受け取ります。 メソッドはCacheUnblockedEvent
より割り当て可能なパラメータタイプを許可する必要があります。@BuddyGroupChanged
- バディグループのクラスタ脱退や、 新しいより密接なバディの参加などが原因でノードがバディグループを変更した時に、 このアノテーションが付けられたメソッドは通知を受け取ります。 メソッドはBuddyGroupChangedEvent
より割り当て可能なパラメータタイプを許可する必要があります。
メソッドへ渡される対象や渡されるタイミングについての詳細は、 アノテーションや
Event
サブタイプに関する javadoc を参照してください。
例:
@CacheListener public class MyListener { @CacheStarted @CacheStopped public void cacheStartStopEvent(Event e) { switch (e.getType()) { case CACHE_STARTED: System.out.println("Cache has started"); break; case CACHE_STOPPED: System.out.println("Cache has stopped"); break; } } @NodeCreated @NodeRemoved @NodeVisited @NodeModified @NodeMoved public void logNodeEvent(NodeEvent ne) { log("An event on node " + ne.getFqn() + " has occured"); } }
2.7.1. 同期および非同期通知
デフォルトでは通知はすべて同期で、 イベントを生成した呼出側のスレッド上で発生します。 そのため、 キャッシュリスナの実装が長期実行タスクでスレッドを遅延しないようにしてください。 また、
CacheListener.sync()
属性を false
に設定し、 呼出側のスレッドで通知されないようにすることもできます。 スレッドプールとブロッキングキューサイズの調整については 表12.13「<listeners />
要素」 を参照してください。