0

从JBoss Infinispan 讨论中发布的交叉

我正在尝试实现一些代码,只要在我的一个 Infinispan 缓存中创建条目时就会采取行动。我很快意识到传递给我的 @CacheEntryCreated 方法的 CacheEntryCreatedEvent 对象不包含新创建的条目,因此我开始寻找解决方案。

我发现了有关解决方案的各种讨论,即捕获在@CacheEntryCreated 事件之后传递的@CacheEntryModified 事件并在isPre()=false 时获取对象。但是,我认为我错过了一些东西,因为在所有讨论中都没有解决您有一个修改事件的情况,该修改事件代表对现有条目的合法修改而不是创建。

这是否意味着我的@Listener 对象必须在事件传递之间维护状态信息?我的@CacheEntryModified 必须整合事件对象,确定它是一个创建事件(即 getValue() == null && isPre() == true),然后在获取新创建的对象之前等待下一个@CacheEntryModified 事件?

这提出了一个明显的问题,即如果另一个@Listener 对象在第二个@CacheEntryModified(即isPre() == false)事件传递之前否决了修改,该怎么办?

其他人如何处理这种情况?

4

1 回答 1

0

我想现在最好的方法是ThreadLocal在你的听众中使用。

未来的 5.3.0 版本会对此改进很多,CacheEntryCreatedEvent会有getValue()方法CacheEntryModifiedEvent也有isCreated()方法:https ://github.com/infinispan/infinispan/commit/1aa2554e1c5ea46318402975de946f2e9ea44442#diff-22

于 2013-04-08T16:56:07.243 回答