【发布时间】:2014-08-27 02:18:34
【问题描述】:
我正在尝试使用 Spring-data-gemfire 将我现有的应用程序代码移植到启动 Gemfire。所以我基本上是将我的区域配置从 cache.xml 移动到 spring 上下文中。
使用的版本: 宝石火 6.6.3.2 Spring-data-gemfire-1.3.4 JDK 7
在我需要配置缓存侦听器之前一切正常。一个区域上的简单缓存侦听器可以工作,但我无法让缓存侦听器在子区域上工作。
例如,我有以下区域。我希望在 /User/Details/Address 区域更新时通知 CacheUpdateListener(实现 CacheListener 接口)。我知道 Gemfire 支持它,因为我已经让它以 cache.xml 的方式工作。但是有谁知道我是否可以让它与 Spring-data-gemfire 一起使用。这是我尝试过但没有奏效的方法。
<gfe:replicated-region id="VCCache" name="User" scope="distributed-no-ack">
<gfe:replicated-region name="Details" scope="distributed-no-ack">
<gfe:replicated-region name="Address" scope="distributed-ack">
<gfe:cache-listener>
<bean class="com.vc.cache.CacheUpdateListener" />
</gfe:cache-listener>
</gfe:replicated-region>
</gfe:replicated-region>
</gfe:replicated-region>
** 编辑:添加了监听器代码 这里是听者。为了简洁起见,我没有将所有过度使用的函数放在这里。
public class CacheUpdateListener implements CacheListener<Object, Object>
{
private static final Logger LOGGER = LoggerFactory.getLogger(CacheUpdateListener.class);
private String name = "defaultName";
@Override
public void afterCreate(EntryEvent<Object, Object> event)
{
LOGGER.info("[afterCreate] region [{}] key [{}] created remote [{}] with value [{}]",
new Object[] { event.getRegion().getFullPath(), event.getKey(), event.isOriginRemote(), event.getNewValue() });
}
@Override
public void afterUpdate(EntryEvent<Object, Object> event)
{
LOGGER.info("[afterUpdate] region [{}] key [{}] updated remote [{}] with value [{}] old value [{}]",
new Object[] { event.getRegion().getFullPath(), event.getKey(), event.isOriginRemote(), event.getNewValue(), event.getOldValue() });
}
}
【问题讨论】:
标签: spring-data gemfire spring-data-gemfire