import org.jgroups.blocks.ReplicatedHashtable import org.jgroups.* def channel = new JChannel() channel.connect("GridHashtableChannel") def notifier = [ entrySet: { key, value -> println "entry set: $key $value" }, entryRemoved: { key -> println "entry removed: $key $value" }, viewChange: { Vector prevMembers, Vector newMembers -> println "view change" }, contentsSet: { Map map -> println "content set" }, contentsCleared: { -> println "clear" } ] as ReplicatedHashtable.Notification def table = new ReplicatedHashtable(channel, 1000) table.addNotifier(notifier) for (i in 0..100) { table[i]=i sleep 1000 } channel.disconnect() channel.close() It's nice to see how to use a Map coerced to an interface to avoid using anonymous inner classes.