package nearcache; import com.hazelcast.cache.ICache; import com.hazelcast.client.HazelcastClient; import com.hazelcast.client.cache.impl.HazelcastClientCacheManager; import com.hazelcast.client.cache.impl.HazelcastClientCachingProvider; import com.hazelcast.client.config.ClientConfig; import com.hazelcast.client.impl.HazelcastClientProxy; import com.hazelcast.config.CacheConfig; import com.hazelcast.config.Config; import com.hazelcast.config.EvictionConfig; import com.hazelcast.config.EvictionConfig.MaxSizePolicy; import com.hazelcast.config.InMemoryFormat; import com.hazelcast.config.NativeMemoryConfig; import com.hazelcast.config.NearCacheConfig; import com.hazelcast.examples.nearcache.ClientNearCacheUsageSupport; import com.hazelcast.memory.HazelcastMemoryManager; import com.hazelcast.memory.MemorySize; import com.hazelcast.memory.MemoryUnit; import com.hazelcast.nio.serialization.EnterpriseSerializationService; import javax.cache.spi.CachingProvider; import static com.hazelcast.examples.helper.LicenseUtils.ENTERPRISE_LICENSE_KEY; @SuppressWarnings("unused") abstract class ClientHiDensityNearCacheUsageSupport extends ClientNearCacheUsageSupport { private static final MemorySize SERVER_NATIVE_MEMORY_SIZE = new MemorySize(256, MemoryUnit.MEGABYTES); private static final MemorySize CLIENT_NATIVE_MEMORY_SIZE = new MemorySize(128, MemoryUnit.MEGABYTES); ClientHiDensityNearCacheUsageSupport() { super(InMemoryFormat.NATIVE); } @Override protected Config createConfig() { NativeMemoryConfig nativeMemoryConfig = new NativeMemoryConfig() .setSize(SERVER_NATIVE_MEMORY_SIZE) .setEnabled(true); return super.createConfig() .setLicenseKey(ENTERPRISE_LICENSE_KEY) .setNativeMemoryConfig(nativeMemoryConfig); } @Override protected ClientConfig createClientConfig() { NativeMemoryConfig nativeMemoryConfig = new NativeMemoryConfig() .setSize(CLIENT_NATIVE_MEMORY_SIZE) .setEnabled(true); return super.createClientConfig() .setLicenseKey(ENTERPRISE_LICENSE_KEY) .setNativeMemoryConfig(nativeMemoryConfig); } @Override protected <K, V> CacheConfig<K, V> createCacheConfig(String cacheName, InMemoryFormat inMemoryFormat) { EvictionConfig evictionConfig = new EvictionConfig() .setMaximumSizePolicy(MaxSizePolicy.USED_NATIVE_MEMORY_PERCENTAGE) .setSize(99); CacheConfig<K, V> cacheConfig = super.createCacheConfig(cacheName, inMemoryFormat); cacheConfig.setEvictionConfig(evictionConfig); return cacheConfig; } @Override protected NearCacheConfig createNearCacheConfig(String cacheName, InMemoryFormat inMemoryFormat) { NearCacheConfig nearCacheConfig = super.createNearCacheConfig(cacheName, inMemoryFormat); if (inMemoryFormat == InMemoryFormat.NATIVE) { EvictionConfig evictionConfig = new EvictionConfig() .setMaximumSizePolicy(MaxSizePolicy.USED_NATIVE_MEMORY_PERCENTAGE) .setSize(99); nearCacheConfig.setEvictionConfig(evictionConfig); } return nearCacheConfig; } <K, V> HiDensityNearCacheSupportContext<K, V> createHiDensityCacheWithHiDensityNearCache() { return createHiDensityCacheWithHiDensityNearCache(DEFAULT_CACHE_NAME, createNearCacheConfig()); } <K, V> HiDensityNearCacheSupportContext<K, V> createHiDensityCacheWithHiDensityNearCache(String cacheName) { return createHiDensityCacheWithHiDensityNearCache(cacheName, createNearCacheConfig(cacheName)); } <K, V> HiDensityNearCacheSupportContext<K, V> createHiDensityCacheWithHiDensityNearCache(InMemoryFormat inMemoryFormat) { return createHiDensityCacheWithHiDensityNearCache(DEFAULT_CACHE_NAME, createNearCacheConfig(inMemoryFormat)); } <K, V> HiDensityNearCacheSupportContext<K, V> createHiDensityCacheWithHiDensityNearCache(NearCacheConfig nearCacheConfig) { return createHiDensityCacheWithHiDensityNearCache(DEFAULT_CACHE_NAME, nearCacheConfig); } <K, V> HiDensityNearCacheSupportContext<K, V> createHiDensityCacheWithHiDensityNearCache(String cacheName, NearCacheConfig nearCacheConfig) { ClientConfig clientConfig = createClientConfig() .addNearCacheConfig(nearCacheConfig); HazelcastClientProxy client = (HazelcastClientProxy) HazelcastClient.newHazelcastClient(clientConfig); CachingProvider provider = HazelcastClientCachingProvider.createCachingProvider(client); HazelcastClientCacheManager cacheManager = (HazelcastClientCacheManager) provider.getCacheManager(); CacheConfig<K, V> cacheConfig = createCacheConfig(nearCacheConfig.getInMemoryFormat()); ICache<K, V> cache = cacheManager.createCache(cacheName, cacheConfig); clients.add(client); EnterpriseSerializationService enterpriseSerializationService = (EnterpriseSerializationService) client.getSerializationService(); return new HiDensityNearCacheSupportContext<K, V>(cache, enterpriseSerializationService.getMemoryManager()); } class HiDensityNearCacheSupportContext<K, V> { final ICache<K, V> cache; final HazelcastMemoryManager memoryManager; HiDensityNearCacheSupportContext(ICache<K, V> cache, HazelcastMemoryManager memoryManager) { this.cache = cache; this.memoryManager = memoryManager; } } }