import com.hazelcast.client.HazelcastClient; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.config.QueryCacheConfig; import com.hazelcast.core.Hazelcast; import com.hazelcast.core.HazelcastInstance; import com.hazelcast.core.IMap; import com.hazelcast.map.QueryCache; import com.hazelcast.query.Predicate; import java.util.Map; import static com.hazelcast.examples.helper.CommonUtils.sleepSeconds; /** * This example demonstrates the usage of a continuous-query-cache (CQC) from Hazelcast client. * Also in this example you can see how a CQC is configured from client side. */ public class ClientServer { public static void main(String[] args) { String mapName = "mapName"; String cacheName = "cqc"; HazelcastInstance hz = Hazelcast.newHazelcastInstance(); Hazelcast.newHazelcastInstance(); QueryCacheConfig queryCacheConfig = new QueryCacheConfig(cacheName); queryCacheConfig.getPredicateConfig().setImplementation(new OddKeysPredicate()); ClientConfig clientConfig = new ClientConfig(); clientConfig.addQueryCacheConfig(mapName, queryCacheConfig); HazelcastInstance client = HazelcastClient.newHazelcastClient(clientConfig); IMap<Integer, Integer> clientMap = client.getMap(mapName); QueryCache<Integer, Integer> cache = clientMap.getQueryCache(cacheName); IMap<Integer, Integer> serverMap = hz.getMap(mapName); for (int i = 0; i < 1002; i++) { serverMap.put(i, i); } while (true) { sleepSeconds(1); int size = cache.size(); System.out.println("Continuous query cache size = " + size); if (size == 501) { break; } } try { for (int i = 0; i < 1002; i += 2) { Integer cached = cache.get(i); if (cached != null && i != cached) { throw new AssertionError("Unexpected error, values should be equal expected = " + i + ", cached = " + cached); } } System.out.println("All expected values are in cache and they equal to the values in underlying map"); } finally { HazelcastClient.shutdownAll(); Hazelcast.shutdownAll(); } } private static class OddKeysPredicate implements Predicate<Integer, Integer> { @Override public boolean apply(Map.Entry<Integer, Integer> entry) { return entry.getKey() % 2 != 0; } } }