2010-12-17 5 views
1

우리는 매우 간단하게 JCS를 사용합니다. 아니 배포하거나 아무것도 :JCS가 만료시 통지/

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

내가 요소를 제거하거나 캐시에서 만료 될 때 알림/이벤트를 수신하는 데 사용할 수있는 리스너의 어떤 종류를 등록하려고 해요 ...

나는 JCS javadoc을 잠시 파고 있었고 다음과 같이 시도했다. - IElementEventHandler의 구현을 캐시의 기본 ElementAttributes에 추가했다. 결코 호출되지 않는다. - ICacheObserver의 다양한 구현을 사용하여 ICacheListener을 등록하지만 결코 호출되지 않습니다. 나는이 점이 JCS의 고급 사용을위한 것이라고 생각할 때이 시점이 올바른 방법임을 확신하지는 않는다 ...

어떤 종류의 청취자를 등록하는 방법을 아는 사람 (또는 가능한 경우)/obsverver/뭐든 이걸 이루겠습니까? 최종 목표는 캐시에서 무엇인가가 제거되었을 때 기본적으로 알려주는 것입니다 ... 큰 괴물이 아닌 방법을 제공하는 방법에 대해서는 특별히 신경 쓰지 않습니다 : P

답변

0

JCS 소스에 대해 간략하게 살펴보면 인터페이스는 원격 캐시에 묶여있는 것처럼 보입니다. 또한, LRUMemoryCache 및 기타 몇 가지 검사 한 및 제거하려면 호출을 모든 이벤트 처리기에 연결하지 않는 것 같습니다. 짧은 이야기 만해도 JCS에서 당신이 묻는 것을 찾을 수 없습니다.

나는 그것이 불가능하다고 말하지 않을 것이지만, 나는 그것이있을 법하지 않다고 말할 것이다.

소스 here을 확인하고 추가로 살펴볼 수 있습니다.

행운을 빈다.

+0

을 다음과 같이

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 공장 정의에이 추상 이벤트 핸들러를 추가 ... :(감사를 확인하기위한. – arw

0

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

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