Java tutorial
/** * Copyright (c)2010-2011 Enterprise Website Content Management System(EWCMS), All rights reserved. * EWCMS PROPRIETARY/CONFIDENTIAL. Use is subject to license terms. * http://www.ewcms.com */ package com.ewcms.common.query.cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Cache; import net.sf.ehcache.Element; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.util.Assert; public class EhcacheResultCache implements ResultCacheable { private static final Logger logger = LoggerFactory.getLogger(EhcacheResultCache.class); private static final String CACHE_NAME = "queryCache"; private static final int DEFAULT_MAX_RESULT = 10000; private static final int DEFAULT_NEWS_RESULT = 500; private CacheManager cacheManager; private String cacheName = CACHE_NAME; private GeneratorCacheKeyable generatorCacheKey = new DefaultGeneratorCacheKey(); private int maxResult = DEFAULT_MAX_RESULT; private int newsResult = DEFAULT_NEWS_RESULT; private Cache getCache() { Cache cache = cacheManager.getCache(cacheName); Assert.notNull(cache, "cache is null"); return cache; } @Override public int getMaxResult() { return maxResult; } @Override public int getNewsResult() { return newsResult; } @Override public CacheResultable putResultInCache(CacheResultable result) { Cache cache = getCache(); if (result.getCacheKey() == null || result.getCacheKey().isEmpty()) { String cacheKey = getCacheKey(); result = new CacheResult(cacheKey, (CacheResult) result); } if (result.isModified()) { Element element = new Element(result.getCacheKey(), result); cache.put(element); if (logger.isDebugEnabled()) { logger.debug("Ehcache memory store size is {}", cache.calculateInMemorySize()); } } return result; } private String getCacheKey() { Cache cache = getCache(); String cacheKey; do { cacheKey = generatorCacheKey.generatorKey(); } while (cache.isKeyInCache(cacheKey)); return cacheKey; } @Override public CacheResultable getResultFromCache(String key) { Cache cache = getCache(); Element element = cache.get(key); return element == null ? null : new CacheResult((CacheResult) element.getValue()); } @Override public void removeResultFromCache(String key) { Cache cache = getCache(); cache.remove(key); } public void setCacheManager(CacheManager cacheManager) { this.cacheManager = cacheManager; } public void setCacheName(String cacheName) { this.cacheName = cacheName; } public void setGeneratorCacheKey(GeneratorCacheKeyable generatorCacheKey) { this.generatorCacheKey = generatorCacheKey; } public void setMaxResult(int maxResult) { this.maxResult = maxResult; } public void setNewsResult(int newsResult) { this.newsResult = newsResult; } }