package org.littlewings.hazelcast.replicatedmap;
import java.time.LocalDateTime;
import java.time.Duration;
import java.time.Instant;
import java.time.format.DateTimeFormatter;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;
import java.util.stream.IntStream;
import com.hazelcast.config.ClasspathXmlConfig;
import com.hazelcast.config.Config;
import com.hazelcast.core.EntryEvent;
import com.hazelcast.core.EntryListener;
import com.hazelcast.core.Hazelcast;
import com.hazelcast.core.HazelcastInstance;
import com.hazelcast.core.IMap;
import com.hazelcast.core.MapEvent;
import com.hazelcast.core.ReplicatedMap;
public class HazelcastReplicatedMapExample {
public static void main(String[] args) {
String mapName;
int entrySize;
if (args.length > 1) {
mapName = args[0];
entrySize = Integer.decode(args[1]);
} else {
mapName = "default";
entrySize = 20;
}
Instant start = Instant.now();
HazelcastInstance hazelcast =
Hazelcast.newHazelcastInstance(new ClasspathXmlConfig("hazelcast.xml"));
Map<String, String> map = hazelcast.getReplicatedMap(mapName);
// Map<String, String> map = hazelcast.getMap(mapName);
if (map instanceof ReplicatedMap) {
ReplicatedMap<String, String> rmap = (ReplicatedMap<String, String>)map;
rmap.addEntryListener(new MyEntryListener());
} else if (map instanceof IMap) {
IMap<String, String> rmap = (IMap<String, String>)map;
rmap.addEntryListener(new MyEntryListener(), true);
}
String lastKey = "key" + entrySize;
System.out.printf("last-key = [%s], value = [%s], exists = [%b]%n",
lastKey,
map.get("key" + entrySize),
map.containsKey("key" + entrySize));
Instant createdTime = Instant.now();
Duration timeElapsed = Duration.between(start, createdTime);
System.out.printf("Cluster Joined Time = [%d] millis%n", timeElapsed.toMillis());
IntStream
.rangeClosed(1, entrySize)
.forEach(i -> map.put("key" + i, "value" + i));
System.out.printf("[%s] Hazelcast Node, startup, putted [%d]entries.%n",
LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")), entrySize);
System.console().readLine("Enter, shutdown...");
IntStream
.rangeClosed(1, entrySize)
.forEach(i -> {
String key = "key" + i;
String value = map.get(key);
System.out.printf("Key = [%s], Value = [%s]%n", key, value);
});
hazelcast.getLifecycleService();
Hazelcast.shutdownAll();
}
public static class MyEntryListener implements EntryListener<String, String> {
@Override
public void entryAdded(EntryEvent<String, String> event) {
// System.out.println("Entry added: " + event);
}
@Override
public void entryUpdated(EntryEvent<String, String> event) {
// System.out.println("Entry updated: " + event);
}
@Override
public void entryRemoved(EntryEvent<String, String> event) {
// System.out.println("Entry removed: " + event);
}
@Override
public void entryEvicted(EntryEvent<String, String> event) {
// Currently not supported, will never fire
}
@Override
public void mapCleared(MapEvent event) {
}
@Override
public void mapEvicted(MapEvent event) {
}
}
}