2009-06-03 157 views
1

我在我們的應用程序中使用Apache JCS在應用程序啓動時緩存常用數據。但是,如果緩存中的某些數據在空閒時間之前未使用,我想手動從數據庫重新加載該值。覆蓋JCS事件

所以,基本上我想重載JCS事件,這樣我的java程序就知道了當密鑰從緩存中刪除時由於密鑰達到其空閒時間而被刪除的時間點 。

+0

覆蓋handleEvent方法中IEventListener。參考:http://stackoverflow.com/questions/4473479/jcs-notify-on-expire-remove – Keshi 2012-05-30 19:06:33

回答

0

創建一個抽象類,用於註冊您有興趣捕獲的事件。這對我來說能夠捕捉到這兩個事件。

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);