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.