2009-06-03 5 views
1

응용 프로그램 시작시 일반적으로 사용되는 데이터를 캐시하기 위해 응용 프로그램에서 Apache JCS를 사용하고 있습니다. 그러나 캐시의 일부 데이터가 유휴 시간까지 사용되지 않으면 데이터베이스에서 해당 값을 수동으로 다시로드하려고합니다.JCS 이벤트 덮어 ​​쓰기

기본적으로 Java 프로그램이 키가 유휴 시간에 도달했기 때문에 키가 캐시에서 제거 될 때 순간을 인식하도록 JCS 이벤트를 오버라이드하고 싶습니다.

+0

재정 IEventListener의 handleEvent 메소드를 다음과 같이

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 공장 정의에이 추상 이벤트 처리기를 추가합니다. 참조 : http://stackoverflow.com/questions/4473479/jcs-notify-on-expire-remove – Keshi

답변

0

캡처에 관심이있는 이벤트를 등록하는 추상 클래스를 만듭니다. 이것은 두 가지 사건을 포착하는 나를 위해 일합니다.

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