我们使用JCS非常简单。不是分布式或任何东西,简单地说:
JCS jcs = JCS.getInstance("region-name");我正在尝试注册某种侦听器,当一个元素从缓存中删除或过期时,它可以用来接收通知/事件……
我研究JCS javadoc已经有一段时间了,我已经尝试过了:-在缓存的默认ElementAttributes中添加一个IElementEventHandler实现……它永远不会被调用。-使用ICacheObserver的各种实现来注册ICacheListener,但它也从未调用过。我不确定这一点是不是正确的方法,因为我认为这是为了JCS更高级的用途而设计的。
有没有人知道如何(或者是否可能)注册某种监听器/痴迷者/任何可以实现这一点的东西?我的最终目标是基本上能够在从缓存中删除某些内容时得到通知……我并不特别关心如何提供它不是一个巨大的杂物:
发布于 2010-12-18 05:11:03
从我对JCS源代码的简短回顾中可以看出,这些接口似乎只与远程缓存相关--我从未使用过这些东西。此外,我检查了LRUMemoryCache和其他几个,看起来要删除的调用没有链接到任何事件处理程序。长话短说,我在JCS中找不到任何可以满足您要求的东西。
我不会说这是不可能的,但我会说这看起来不太可能。
您可以查看源代码here并进一步查看。
祝好运。
发布于 2012-05-30 10:49:39
创建一个抽象类,用于注册您有兴趣捕获的事件。这对我来说可以用来捕捉这两个事件。
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);https://stackoverflow.com/questions/4473479
复制相似问题