/* * Copyright Terracotta, Inc. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.ehcache.clustered.client.docs; import org.ehcache.Cache; import org.ehcache.PersistentCacheManager; import org.ehcache.clustered.client.config.builders.ClusteredStoreConfigurationBuilder; import org.ehcache.clustered.client.internal.UnitTestConnectionService; import org.ehcache.clustered.client.config.builders.ClusteredResourcePoolBuilder; import org.ehcache.clustered.client.config.builders.ClusteringServiceConfigurationBuilder; import org.ehcache.clustered.common.Consistency; import org.ehcache.config.CacheConfiguration; import org.ehcache.config.builders.CacheConfigurationBuilder; import org.ehcache.config.builders.CacheManagerBuilder; import org.ehcache.config.builders.ResourcePoolsBuilder; import org.ehcache.config.units.MemoryUnit; import org.ehcache.xml.XmlConfiguration; import org.junit.After; import org.junit.Test; import java.net.URI; import org.junit.Before; /** * Samples demonstrating use of a clustered cache. */ public class GettingStarted { @Before public void resetPassthroughServer() throws Exception { UnitTestConnectionService.add("terracotta://localhost:9510/my-application", new UnitTestConnectionService.PassthroughServerBuilder() .resource("primary-server-resource", 128, MemoryUnit.MB) .resource("secondary-server-resource", 96, MemoryUnit.MB) .build()); } @After public void removePassthroughServer() throws Exception { UnitTestConnectionService.remove("terracotta://localhost:9510/my-application"); } @Test public void clusteredCacheManagerExample() throws Exception { // tag::clusteredCacheManagerExample[] CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder = CacheManagerBuilder.newCacheManagerBuilder() // <1> .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")) // <2> .autoCreate()); // <3> PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(true); // <4> cacheManager.close(); // <5> // end::clusteredCacheManagerExample[] } @Test public void clusteredCacheManagerWithServerSideConfigExample() throws Exception { // tag::clusteredCacheManagerWithServerSideConfigExample[] CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")).autoCreate() .defaultServerResource("primary-server-resource") // <1> .resourcePool("resource-pool-a", 28, MemoryUnit.MB, "secondary-server-resource") // <2> .resourcePool("resource-pool-b", 32, MemoryUnit.MB)) // <3> .withCache("clustered-cache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, // <4> ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredDedicated("primary-server-resource", 32, MemoryUnit.MB)))) // <5> .withCache("shared-cache-1", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredShared("resource-pool-a")))) // <6> .withCache("shared-cache-2", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredShared("resource-pool-a")))); // <7> PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(true); // <8> cacheManager.close(); // end::clusteredCacheManagerWithServerSideConfigExample[] } @Test public void clusteredCacheManagerWithDynamicallyAddedCacheExample() throws Exception { // tag::clusteredCacheManagerWithDynamicallyAddedCacheExample[] CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")) .autoCreate() .defaultServerResource("primary-server-resource") .resourcePool("resource-pool-a", 28, MemoryUnit.MB)); PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(false); cacheManager.init(); try { CacheConfiguration<Long, String> config = CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredDedicated("primary-server-resource", 2, MemoryUnit.MB))).build(); Cache<Long, String> cache = cacheManager.createCache("clustered-cache", config); } finally { cacheManager.close(); } // end::clusteredCacheManagerWithDynamicallyAddedCacheExample[] } @Test public void explicitConsistencyConfiguration() throws Exception { CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")) .autoCreate() .defaultServerResource("primary-server-resource") .resourcePool("resource-pool-a", 32, MemoryUnit.MB)); PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(false); cacheManager.init(); try { // tag::clusteredCacheConsistency[] CacheConfiguration<Long, String> config = CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredDedicated("primary-server-resource", 2, MemoryUnit.MB))) .add(ClusteredStoreConfigurationBuilder.withConsistency(Consistency.STRONG)) // <1> .build(); Cache<Long, String> cache = cacheManager.createCache("clustered-cache", config); cache.put(42L, "All you need to know!"); // <2> // end::clusteredCacheConsistency[] } finally { cacheManager.close(); } } @Test public void clusteredCacheTieredExample() throws Exception { CacheManagerBuilder<PersistentCacheManager> clusteredCacheManagerBuilder = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")) .autoCreate() .defaultServerResource("primary-server-resource") .resourcePool("resource-pool-a", 32, MemoryUnit.MB)); PersistentCacheManager cacheManager = clusteredCacheManagerBuilder.build(false); cacheManager.init(); try { // tag::clusteredCacheTieredExample[] CacheConfiguration<Long, String> config = CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(2, MemoryUnit.MB) // <1> .with(ClusteredResourcePoolBuilder.clusteredDedicated("primary-server-resource", 8, MemoryUnit.MB))) // <2> .add(ClusteredStoreConfigurationBuilder.withConsistency(Consistency.STRONG)) .build(); Cache<Long, String> cache = cacheManager.createCache("clustered-cache-tiered", config); cache.put(42L, "All you need to know!"); // end::clusteredCacheTieredExample[] } finally { cacheManager.close(); } } @Test public void clusteredCacheManagerLifecycleExamples() throws Exception { // tag::clusteredCacheManagerLifecycle[] CacheManagerBuilder<PersistentCacheManager> autoCreate = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")) .autoCreate() // <1> .resourcePool("resource-pool", 32, MemoryUnit.MB, "primary-server-resource")) .withCache("clustered-cache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredShared("resource-pool")))); CacheManagerBuilder<PersistentCacheManager> expecting = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")) .expecting() // <2> .resourcePool("resource-pool", 32, MemoryUnit.MB, "primary-server-resource")) .withCache("clustered-cache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredShared("resource-pool")))); CacheManagerBuilder<PersistentCacheManager> configless = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application"))) // <3> .withCache("clustered-cache", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredShared("resource-pool")))); // end::clusteredCacheManagerLifecycle[] autoCreate.build(true).close(); expecting.build(true).close(); configless.build(true).close(); } @Test public void loadDocsXml() throws Exception { new XmlConfiguration(getClass().getResource("/configs/docs/ehcache-clustered.xml")); } @Test public void unknownClusteredCacheExample() { // tag::unspecifiedClusteredCacheExample[] CacheManagerBuilder<PersistentCacheManager> cacheManagerBuilderAutoCreate = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")) .autoCreate() // <1> .resourcePool("resource-pool", 32, MemoryUnit.MB, "primary-server-resource")); PersistentCacheManager cacheManager1 = cacheManagerBuilderAutoCreate.build(false); cacheManager1.init(); CacheConfiguration<Long, String> cacheConfigDedicated = CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clusteredDedicated("primary-server-resource", 8, MemoryUnit.MB))) // <2> .add(ClusteredStoreConfigurationBuilder.withConsistency(Consistency.STRONG)) .build(); Cache<Long, String> cacheDedicated = cacheManager1.createCache("my-dedicated-cache", cacheConfigDedicated); // <3> CacheManagerBuilder<PersistentCacheManager> cacheManagerBuilderExpecting = CacheManagerBuilder.newCacheManagerBuilder() .with(ClusteringServiceConfigurationBuilder.cluster(URI.create("terracotta://localhost:9510/my-application")) .expecting() // <4> .resourcePool("resource-pool", 32, MemoryUnit.MB, "primary-server-resource")); PersistentCacheManager cacheManager2 = cacheManagerBuilderExpecting.build(false); cacheManager2.init(); CacheConfiguration<Long, String> cacheConfigUnspecified = CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .with(ClusteredResourcePoolBuilder.clustered())) // <5> .add(ClusteredStoreConfigurationBuilder.withConsistency(Consistency.STRONG)) .build(); Cache<Long, String> cacheUnspecified = cacheManager2.createCache("my-dedicated-cache", cacheConfigUnspecified); // <6> // end::unspecifiedClusteredCacheExample[] cacheManager1.close(); cacheManager2.close(); } }