2009-06-03 7 views
1

J'utilise Apache JCS dans notre application pour mettre en mémoire cache les données couramment utilisées au démarrage de l'application. Cependant, si certaines données du cache ne sont pas utilisées avant leur temps d'inactivité, je souhaite recharger manuellement cette valeur à partir de la base de données. Donc, fondamentalement je veux renverser les événements JCS de telle sorte que mon programme java est conscient des instants lorsqu'une clé est retirée du cache, à cause de la clé qui atteint son temps d'inactivité.Substituer les événements JCS

+0

Remplacer la méthode handleEvent dans IEventListener. Reportez-vous à: http://stackoverflow.com/questions/4473479/jcs-notify-on-expire-remove – Keshi

Répondre

0

Créez une classe abstraite qui enregistre les événements que vous souhaitez capturer. Cela fonctionne pour moi de capturer les deux événements.

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

Ajouter ce gestionnaire d'événement abstrait à la définition de l'usine de JCS comme suit

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