2009-06-03 17 views
1

Ich verwende Apache JCS in unserer Anwendung, um häufig verwendete Daten beim Start der Anwendung zwischenzuspeichern. Wenn jedoch einige der Daten im Cache bis zur Leerlaufzeit nicht verwendet werden, möchte ich diesen Wert manuell aus der Datenbank laden.Überschreiben von JCS-Ereignissen

Also, im Grunde möchte ich die JCS-Ereignisse so übersteuern, dass mein Java-Programm von Sprüngen weiß, wenn ein Schlüssel aus dem Cache entfernt wird, weil der Schlüssel seine Leerlaufzeit erreicht.

+0

Aufschalten der handle Methode in IEventListener folgt. Siehe: http://stackoverflow.com/questions/4473479/jcs-notify-on-expire-remove – Keshi

Antwort

0

Erstellen Sie eine abstrakte Klasse, die die Ereignisse erfasst, die Sie erfassen möchten. Das funktioniert für mich, um die beiden Ereignisse zu erfassen.

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

Diese abstrakten Event-Handler auf die Definition jcs Fabrik als

JCS jcs = JCSCacheFactory.getCacheInstance(regionName); 
IElementAttributes attributes = jcs.getDefaultElementAttributes(); 
attributes.addElementEventHandler(handler); 
jcs.setDefaultElementAttributes(attributes);