Переопределение событий JCS

Я использую Apache JCS в нашем приложении для кэширования часто используемых данных при запуске приложения. Однако, если некоторые данные в кеше не используются до времени простоя, я хочу вручную перезагрузить это значение из базы данных.

Итак, в основном я хочу переопределить события JCS, чтобы моя java-программа знала о моментах, когда ключ удаляется из кеша, из-за того, что ключ достигает своего времени простоя.


person Suban    schedule 03.06.2009    source источник
comment
Переопределите метод handleEvent в IEventListener. См.: stackoverflow.com/questions/4473479/jcs- уведомление об истечении срока действия   -  person Keshi    schedule 30.05.2012


Ответы (1)


Создайте абстрактный класс, который регистрирует интересующие вас события. Это работает для меня, чтобы зафиксировать два события.

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);
person Keshi    schedule 11.12.2012