2010-12-17 21 views
1

非常に簡単にJCSを使用します。分散型か何かではない、単に:JCSが期限切れ/通知時に通知する

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

私は

...要素がキャッシュから削除または有効期限が切れているときに通知/イベントを受信するために使用することができ、リスナーのいくつかの種類を登録しようとしています

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

何人かのリスナーを登録する方法を知っていますか/ obsverver /これを達成するものは何ですか?私の最終的な目標は、キャッシュから何かが取り除かれた時に通知されることです...私はそれが大規模なkludgeではないことを特に気にしません:P

答えて

0

JCSのソースを少し見直してみると、それらのインターフェースはリモートキャッシュのものと結びついているように思えます。さらに、私はLRUMemoryCacheと他のいくつかを調べました。削除する呼び出しがイベントハンドラにリンクしていないようです。長い話を簡単に言えば、私はあなたが求めていることをJCSで見つけることができませんでした。

私はそれが不可能だとは言わないが、そうは思わないだろう。

ソースhereを確認してください。

幸運。

+0

を次のように私は私の掘削にに来た同じ結論...確認してくれてありがとう:(だことJCS工場の定義にこの抽象イベントハンドラを追加します。 – arw

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 = JCSCacheFactory.getCacheInstance(regionName); 
    IElementAttributes attributes = jcs.getDefaultElementAttributes(); 
    attributes.addElementEventHandler(handler); 
    jcs.setDefaultElementAttributes(attributes); 
関連する問題