/* * 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.docs; import org.ehcache.Cache; import org.ehcache.CacheManager; import org.ehcache.config.builders.CacheConfigurationBuilder; import org.ehcache.config.builders.CacheEventListenerConfigurationBuilder; import org.ehcache.config.builders.CacheManagerBuilder; import org.ehcache.config.builders.ResourcePoolsBuilder; import org.ehcache.config.builders.WriteBehindConfigurationBuilder; import org.ehcache.config.units.EntryUnit; import org.ehcache.config.units.MemoryUnit; import org.ehcache.docs.plugs.ListenerObject; import org.ehcache.docs.plugs.SampleLoaderWriter; import org.ehcache.event.EventType; import org.ehcache.impl.config.persistence.CacheManagerPersistenceConfiguration; import org.ehcache.config.builders.PooledExecutionServiceConfigurationBuilder; import org.junit.Test; import java.io.File; import java.net.URISyntaxException; import java.util.concurrent.TimeUnit; import static java.util.Collections.singletonMap; /** * Thread pools configuration samples */ @SuppressWarnings("unused") public class ThreadPools { @Test public void diskStore() throws Exception { // tag::diskStore[] CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() .using(PooledExecutionServiceConfigurationBuilder.newPooledExecutionServiceConfigurationBuilder() // <1> .defaultPool("dflt", 0, 10) .pool("defaultDiskPool", 1, 3) .pool("cache2Pool", 2, 2) .build()) .with(new CacheManagerPersistenceConfiguration(new File(getStoragePath(), "myData"))) .withDefaultDiskStoreThreadPool("defaultDiskPool") // <2> .withCache("cache1", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(10, EntryUnit.ENTRIES) .disk(10L, MemoryUnit.MB))) .withCache("cache2", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder() .heap(10, EntryUnit.ENTRIES) .disk(10L, MemoryUnit.MB)) .withDiskStoreThreadPool("cache2Pool", 2)) // <3> .build(true); Cache<Long, String> cache1 = cacheManager.getCache("cache1", Long.class, String.class); Cache<Long, String> cache2 = cacheManager.getCache("cache2", Long.class, String.class); cacheManager.close(); // end::diskStore[] } @Test public void writeBehind() throws Exception { // tag::writeBehind[] CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() .using(PooledExecutionServiceConfigurationBuilder.newPooledExecutionServiceConfigurationBuilder() // <1> .defaultPool("dflt", 0, 10) .pool("defaultWriteBehindPool", 1, 3) .pool("cache2Pool", 2, 2) .build()) .withDefaultWriteBehindThreadPool("defaultWriteBehindPool") // <2> .withCache("cache1", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder().heap(10, EntryUnit.ENTRIES)) .withLoaderWriter(new SampleLoaderWriter<Long, String>(singletonMap(41L, "zero"))) .add(WriteBehindConfigurationBuilder .newBatchedWriteBehindConfiguration(1, TimeUnit.SECONDS, 3) .queueSize(3) .concurrencyLevel(1))) .withCache("cache2", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder().heap(10, EntryUnit.ENTRIES)) .withLoaderWriter(new SampleLoaderWriter<Long, String>(singletonMap(41L, "zero"))) .add(WriteBehindConfigurationBuilder .newBatchedWriteBehindConfiguration(1, TimeUnit.SECONDS, 3) .useThreadPool("cache2Pool") // <3> .queueSize(3) .concurrencyLevel(2))) .build(true); Cache<Long, String> cache1 = cacheManager.getCache("cache1", Long.class, String.class); Cache<Long, String> cache2 = cacheManager.getCache("cache2", Long.class, String.class); cacheManager.close(); // end::writeBehind[] } @Test public void events() throws Exception { // tag::events[] CacheManager cacheManager = CacheManagerBuilder.newCacheManagerBuilder() .using(PooledExecutionServiceConfigurationBuilder.newPooledExecutionServiceConfigurationBuilder() // <1> .pool("defaultEventPool", 1, 3) .pool("cache2Pool", 2, 2) .build()) .withDefaultEventListenersThreadPool("defaultEventPool") // <2> .withCache("cache1", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder().heap(10, EntryUnit.ENTRIES)) .add(CacheEventListenerConfigurationBuilder .newEventListenerConfiguration(new ListenerObject(), EventType.CREATED, EventType.UPDATED))) .withCache("cache2", CacheConfigurationBuilder.newCacheConfigurationBuilder(Long.class, String.class, ResourcePoolsBuilder.newResourcePoolsBuilder().heap(10, EntryUnit.ENTRIES)) .add(CacheEventListenerConfigurationBuilder .newEventListenerConfiguration(new ListenerObject(), EventType.CREATED, EventType.UPDATED)) .withEventListenersThreadPool("cache2Pool")) // <3> .build(true); Cache<Long, String> cache1 = cacheManager.getCache("cache1", Long.class, String.class); Cache<Long, String> cache2 = cacheManager.getCache("cache2", Long.class, String.class); cacheManager.close(); // end::events[] } private String getStoragePath() throws URISyntaxException { return getClass().getClassLoader().getResource(".").toURI().getPath(); } }