JCS уведомляет об истечении срока действия / удалении - PullRequest
1 голос
/ 17 декабря 2010

мы используем JCS очень просто.Не распространяется или что-то, просто:

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

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

Я уже некоторое время копался в javadoc JCS и пытался: - добавить Реализацию IElementEventHandler в стандартные атрибуты ElementAttributes кеша ... он никогда не вызывается.- использование различных реализаций ICacheObserver для регистрации ICacheListener, но это также никогда не вызывается.Я не обязательно уверен, что этот пункт является правильным способом сделать это, поскольку я думаю, что это предназначено для более продвинутого использования JCS ...

Кто-нибудь знает, как (или если это возможно) зарегистрировать какой-тослушателя / наблюдателя / чего бы это ни достигло?Моя конечная цель - получить уведомление о том, что что-то из кеша удаляется в основном ... Меня не особо волнует, если это не огромный клочок: P

Ответы [ 2 ]

0 голосов
/ 30 мая 2012

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

  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);
0 голосов
/ 18 декабря 2010

Из того, что я могу сказать после краткого обзора источника JCS, похоже, что эти интерфейсы связаны только с удаленным кешем - который я никогда не использовал.Кроме того, я рассмотрел LRUMemoryCache и несколько других, и похоже, что вызовы remove не связаны ни с какими обработчиками событий.Короче говоря, я не смог найти в JCS ничего, что могло бы сделать то, что вы просите.

Я не скажу, что это невозможно, но я бы сказал, что это выглядит маловероятным.

Вы можете проверить источник здесь и посмотреть дальше.

Удачи.

...