Spring-data-gemfire を使用して、既存のアプリケーション コードを起動する Gemfire に移植しようとしています。したがって、基本的には、領域構成を cache.xml から spring コンテキストに移動しています。
使用したバージョン: Gemfire 6.6.3.2 Spring-data-gemfire-1.3.4 Jdk 7
キャッシュ リスナーを構成する必要があるところまでは、すべて問題なく動作します。リージョンの単純なキャッシュ リスナーは機能しますが、キャッシュ リスナーをサブリージョンで機能させることができません。
例として、以下のリージョンがあります。/User/Details/Address 領域が更新されたときに、CacheUpdateListener (CacheListener インターフェースを実装する) に通知してほしい。私はすでにcache.xmlの方法で動作しているので、Gemfireがそれをサポートしていることを知っています。しかし、これを 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() });
}
}