package com.hazelcast.examples.listener; import com.hazelcast.cache.ICache; import com.hazelcast.cache.impl.HazelcastServerCachingProvider; import com.hazelcast.cache.impl.event.CachePartitionLostEvent; import com.hazelcast.cache.impl.event.CachePartitionLostListener; import com.hazelcast.config.CacheConfig; import com.hazelcast.config.Config; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import javax.cache.Cache; import javax.cache.CacheManager; import java.util.concurrent.CountDownLatch; import static com.hazelcast.cache.impl.HazelcastServerCachingProvider.createCachingProvider; public class PartitionLostListenerUsage { public static void main(String[] args) throws Exception { final CountDownLatch latch = new CountDownLatch(1); String cacheName1 = "myCache1"; String cacheName2 = "myCache2"; HazelcastInstance serverInstance1 = Hazelcast.newHazelcastInstance(new Config()); HazelcastInstance serverInstance2 = Hazelcast.newHazelcastInstance(new Config()); HazelcastServerCachingProvider cachingProvider = createCachingProvider(serverInstance1); CacheManager cacheManager = cachingProvider.getCacheManager(); CacheConfig<Integer, String> config1 = new CacheConfig<Integer, String>(); // might lose data if any node crashes config1.setBackupCount(0); Cache<Integer, String> cache1 = cacheManager.createCache(cacheName1, config1); cache1.put(1, "Berlin"); ICache iCache1 = cache1.unwrap(ICache.class); iCache1.addPartitionLostListener(new CachePartitionLostListener() { @Override public void partitionLost(CachePartitionLostEvent cachePartitionLostEvent) { System.out.println(cachePartitionLostEvent); latch.countDown(); } }); CacheConfig<Integer, String> config2 = new CacheConfig<Integer, String>(); // keeps its data if a single node crashes config2.setBackupCount(1); Cache<Integer, String> cache2 = cacheManager.createCache(cacheName2, config2); cache1.put(1, "Berlin"); ICache iCache2 = cache2.unwrap(ICache.class); iCache2.addPartitionLostListener(new CachePartitionLostListener() { @Override public void partitionLost(CachePartitionLostEvent cachePartitionLostEvent) { System.err.println("This line should not be printed! " + cachePartitionLostEvent); } }); System.out.println("Terminating second Hazelcast instance..."); serverInstance2.getLifecycleService().terminate(); // wait for a least one CachePartitionLostEvent latch.await(); Hazelcast.shutdownAll(); } }