Coherence EntryProcessor查询

时间:2014-11-25 10:49:57

标签: java caching concurrency oracle-coherence

我正在尝试实现使用Coherence瞬态缓存的业务功能。

我计划依赖的一个功能是在将项目放入缓存时提供(可配置的)生存时间,自动驱逐缓存条目。 NamedCache接口提供了一个实现此目的的API(http://download.oracle.com/otn_hosted_doc/coherence/330/com/tangosol/net/NamedCache.html#put(java.lang.Object,java.lang.Object,long))。

但是,我还计划使用Entry-Processors来确保整个集群的有效并发性。我现在陷入困境,在处理器范围内,我应该使用InvocableMap.Entry来获取/设置缓存中的密钥值。不幸的是,没有setValue方法可以让我指定生存时间值。

我在这里假设直接与EntryProcessor的流程方法中的NamedCache引用接口并不是一个好主意,并且会损害EntryProcessor提供的并发保证。

请您分享一下您对在一定时间内(动态决定)获取条目的最佳方法的看法,同时确保节点集群中的最佳并发性?

我并没有完全停止使用自动驱逐功能。但是,如果我放弃它,我可能不得不依赖于基于计时器的程序删除条目,该条目在集群中可靠地工作。再一次,我对这一点缺乏想法。理想情况下,我希望Coherence能够解决这个问题。

非常感谢提前。

祝你好运, - Aditya

1 个答案:

答案 0 :(得分:2)

您可以尝试以下方法: 将EntryProcessor中的条目转换为BinaryEntry并设置到期时间。 例如:

public class MyEntryProcessor extends AbstractProcessor  implements PortableObject {

 @Override
 public Object process(Entry myEntry) {     

    ((BinaryEntry)myEntry).expire(100);
    return myEntry;
 }
}

http://docs.oracle.com/middleware/1212/coherence/COHJR/com/tangosol/util/BinaryEntry.html