1

JCS は非常に単純に使用します。配布されていないか、単に:

JCS jcs = JCS.getInstance("region-name");

要素がキャッシュから削除または期限切れになったときに通知/イベントを受け取るために使用できるある種のリスナーを登録しようとしています...

私はしばらくの間 JCS javadoc を掘り下げてきましたが、試してみました: -IElementEventHandlerキャッシュのデフォルトの ElementAttributes に実装を追加します ... 呼び出されません。- のさまざまな実装を使用しICacheObserverて登録しますICacheListenerが、それも呼び出されません。これはJCSのより高度な使用を意図していると思うので、この点が正しい方法であるとは限りません...

ある種のリスナー/オブザーバー/これを達成するものを登録する方法(または可能であれば)を知っている人はいますか? 私の最終的な目標は、基本的に何かがキャッシュから削除されたときに通知できるようにすることです...大規模なクラッジでなければ、特に気にしません:P

4

2 に答える 2

0

キャプチャしたいイベントを登録する抽象クラスを作成します。これは、2 つのイベントをキャプチャするのに役立ちます。

  private static final Set<Integer> EVENTS = new HashSet<Integer>();
  {
    EVENTS.add(IElementEventHandler.ELEMENT_EVENT_EXCEEDED_IDLETIME_BACKGROUND);
    EVENTS.add(IElementEventHandler.ELEMENT_EVENT_EXCEEDED_MAXLIFE_BACKGROUND);
  }

  @Override
  public synchronized void handleElementEvent(IElementEvent event) {
   // Check for element expiration based on EVENTS.
   LOG.debug("Handling event of type : " + event.getElementEvent() + ".");
   if (EVENTS.contains(event.getElementEvent())) {
     ElementEvent elementEvent = (ElementEvent)event;
     CacheElement element = (CacheElement)elementEvent.getSource();
     handleEvent(element);
   }

  }
  // Abstract method to handle events
  protected abstract void handleEvent(CacheElement element);
  }

次のように、この抽象イベント ハンドラを jcs ファクトリ定義に追加します。

     JCS jcs = JCSCacheFactory.getCacheInstance(regionName);
     IElementAttributes attributes = jcs.getDefaultElementAttributes();
     attributes.addElementEventHandler(handler);
     jcs.setDefaultElementAttributes(attributes);
于 2012-05-30T02:49:38.830 に答える
0

JCS ソースを簡単に確認した後でわかることから、これらのインターフェースは、私が使用したことのないリモート キャッシュにのみ関連付けられているようです。さらに、LRUMemoryCache と他のいくつかを調べたところ、remove の呼び出しがどのイベント ハンドラーにもリンクしていないようです。要するに、私はあなたが求めていることをするものをJCSで見つけることができませんでした。

不可能とは言いませんが、可能性は低いと思います。

ここでソースを確認して、さらに詳しく調べることができます。

幸運を。

于 2010-12-17T21:11:02.630 に答える