com.ewcms.common.query.cache.EhcacheResultCache.java Source code

Java tutorial

Introduction

Here is the source code for com.ewcms.common.query.cache.EhcacheResultCache.java

Source

/**
 * 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;
    }
}