AbstractCache.java 1.43 KB
Newer Older
Kim Gyeongeun committed
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76
package jp.agentec.sinaburocast.cache;

import jp.agentec.sinaburocast.common.util.CacheUtil;
import net.sf.ehcache.Cache;
import net.sf.ehcache.Element;

import org.apache.commons.lang.StringUtils;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;

/**
 * Abstractキャッシュ用クラス
 *
 *
 * @author tsukada
 *
 */
public abstract class AbstractCache<T> {
	private final Log logger= LogFactory.getLog(getClass());

	private Cache cache;
	
	protected void setCache(String cacheName) {
		cache = CacheUtil.getCache(cacheName);
	}

	/**
	 * キャッシュを探す
	 * 
	 * @param keys
	 * @return
	 */
	@SuppressWarnings("unchecked")
	public T find(Object... keys) {
		String key = StringUtils.join(keys, "_");
		Element element = cache.get(key);
		if (element != null) {
			if (logger.isDebugEnabled()) {
				logger.debug("find in cache " + element);
			}
			return (T)element.getObjectValue();
		}
		else {
			T obj = findRawValue(keys);
			cache.put(new Element(key, obj));
			return obj;
		}
	}

	/**
	 * 元データを探す
	 * 
	 * @param key
	 * @return
	 */
	protected abstract T findRawValue(Object... key);

	/**
	 * すべてクリアする
	 * 
	 */
	public void removeAll() {
		cache.removeAll();
	}

	/**
	 * 引数に該当するキャッシュを削除する
	 * 
	 * @return
	 */
	public boolean remove(Object... keys) {
		String key = StringUtils.join(keys, "_");
		return cache.remove(key);
	}

}