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 /> 要素」 を参照してください。