MultiMap<String, Integer> multiMap = hazelcastInstance.getMultiMap("mymap");
multiMap.addLocalEntryListener(new EntryListener<String, Integer>() {
@Override
public void entryAdded(EntryEvent<String, Integer> event) {
System.out.println("******" + event);
}
@Override
public void entryRemoved(EntryEvent<String, Integer> event) {
System.out.println("******" + event);
}
...
});
multiMap.put("1", 1);
multiMap.remove("1", 1);
******EntryEvent{entryEventType=ADDED, member=Member [172.24.22.28]:5702 - 5fb398ff-c034-478e-9a89-ebd3603fd2fd this, name='mymap', key=1, oldValue=null, value=null, mergingValue=null}
******EntryEvent{entryEventType=REMOVED, member=Member [172.24.22.28]:5702 - 5fb398ff-c034-478e-9a89-ebd3603fd2fd this, name='mymap', key=1, oldValue=null, value=null, mergingValue=null}
Hazelcast MultiMap LocalEntryListener provides incorrect null values. I cannot get the origin value through Listener. How can I resolve this problem.
Currently MultiMap
does not support adding local listener with includeValue
option, though there is no reason that it should not, see the github issue.
As a workaround, you can cast multimap to AbstractDistributedObject
and add the listener directly to the MultiMapService
.
EntryListener<String, Integer> listener = new EntryListener<String, Integer>() {
@Override
public void entryAdded(EntryEvent<String, Integer> event) {
System.out.println("******" + event);
}
@Override
public void entryRemoved(EntryEvent<String, Integer> event) {
System.out.println("******" + event);
}
...
};
AbstractDistributedObject<MultiMapService> multiMapProxy = (AbstractDistributedObject) multiMap;
multiMapProxy.getService().addLocalListener("mymap", listener, null, true);