/* vim: set ts=2 et sw=2 cindent fo=qroca: */
package com.globant.katari.ehcache;
import java.util.List;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.config.CacheConfiguration;
import net.sf.ehcache.config.Configuration;
import net.sf.ehcache.config.DiskStoreConfiguration;
/** Factory utility for the EhCache Cache Manager.
*
* @author waabox (emiliano[dot]arango[at]globant[dot]com)
*/
public final class CacheManagerFactory {
/** The cache manager name.*/
private static final String CACHE_MANAGER_NAME = "_KATARI_CACHE_MANAGER_";
/** Default private constructor, for this utility class.*/
private CacheManagerFactory() {
}
/** The class logger. */
private static Logger log = LoggerFactory.getLogger(
CacheManagerFactory.class);
/** Creates a new instance of the Cache Manager.
*
* @param defaultConfiguration the default configuration for caches created
* on-demand. It cannot be null.
*
* @param cacheConfigurations the configurations for pre-configured caches.
* It cannot be null.
*
* @param diskStorePath the file system path to store objects that overflow
* the memory cache. It cannot be null.
*
* @param recordStatistics true if the cache will record hit, miss and evict
* statistics.
*
* @return the cache manager instance, never returns null.
*/
public static CacheManager create(
final CacheConfiguration defaultConfiguration,
final List<CacheConfiguration> cacheConfigurations,
final String diskStorePath,
final boolean recordStatistics) {
log.trace("Entering create");
Configuration configuration = new Configuration();
configuration.setName(CACHE_MANAGER_NAME);
defaultConfiguration.setStatistics(recordStatistics);
configuration.setDefaultCacheConfiguration(defaultConfiguration);
for (CacheConfiguration cacheConfig : cacheConfigurations) {
log.debug("adding the cache: " + cacheConfig.getName());
cacheConfig.setStatistics(recordStatistics);
configuration.addCache(cacheConfig);
}
DiskStoreConfiguration diskStoreConfiguration;
diskStoreConfiguration = new DiskStoreConfiguration();
diskStoreConfiguration.setPath(diskStorePath);
configuration.addDiskStore(diskStoreConfiguration);
CacheManager manager = CacheManager.create(configuration);
log.trace("Leaving create");
return manager;
}
}