Java Hazelcast映射侦听器在映射存储中更新后未获取更新的对象
我正在为Hazelcast中的地图使用地图存储。我正在修改地图存储中的一个对象。我的地图存储还实现了后处理地图存储接口Java Hazelcast映射侦听器在映射存储中更新后未获取更新的对象,java,caching,hazelcast,Java,Caching,Hazelcast,我正在为Hazelcast中的地图使用地图存储。我正在修改地图存储中的一个对象。我的地图存储还实现了后处理地图存储接口 我创建了一个客户端,该客户端对缓存执行Map.put。此put触发MapStore上的存储。我在客户端也有一个映射侦听器。当我尝试执行Map.get时,我会将修改过的对象取回(因为后处理MapStore),但是侦听器中添加的条目方法显示了未修改的对象。我是否缺少一些配置?我认为这是一种预期行为。将元素放入映射时,将触发侦听器的entryAdded方法。后处理MapStore的更
我创建了一个客户端,该客户端对缓存执行Map.put。此put触发MapStore上的存储。我在客户端也有一个映射侦听器。当我尝试执行Map.get时,我会将修改过的对象取回(因为后处理MapStore),但是侦听器中添加的条目方法显示了未修改的对象。我是否缺少一些配置?我认为这是一种预期行为。将元素放入映射时,将触发侦听器的entryAdded方法。后处理MapStore的更新不会影响或触发它,因为put操作已经调用了它 我试图创建你的场景。代码如下:
public class Main {
public static void main(String[] args){
Config config = new Config();
MapConfig mapConfig = config.getMapConfig("map");
MapStoreConfig mapStoreConfig = new MapStoreConfig();
mapStoreConfig.setEnabled(true).setClassName(IncrementerPostProcessingMapStore.class.getName());
mapConfig.setMapStoreConfig(mapStoreConfig);
HazelcastInstance instance = Hazelcast.newHazelcastInstance(config);
HazelcastInstance client = HazelcastClient.newHazelcastClient();
IMap<Integer, SampleObject> map = client.getMap("map");
map.addEntryListener(new EntryAdapter<Object, SampleObject>() {
@Override
public void entryAdded(EntryEvent<Object, SampleObject> event) {
System.out.println("entry added:" + event.getValue().version);
}
}, true);
map.put(1, new SampleObject(1));
System.out.println("last:" + map.get(1).version);
}
public static class IncrementerPostProcessingMapStore implements MapStore<Integer, SampleObject>, PostProcessingMapStore {
Map<Integer, SampleObject> map = new ConcurrentHashMap<Integer, SampleObject>();
@Override
public void store(Integer key, SampleObject value) {
value.version++;
map.put(key, value);
}
...
}
public static class SampleObject implements Serializable {
public int version;
public SampleObject(int version) {
this.version = version;
}
}
}
我认为在map store完成其工作后会调用entry added方法。与map.get调用类似,这应该有更新的值。在上面的示例中,我希望entry added为2…是否有其他方法可以在listener方法中获得此更新的值?这是一个错误。通过侦听器发送未修改的值是没有意义的。发送侦听器值应在映射存储处理完该项后完成。
entry added: 1
last: 2