/** * Copyright (C) 2013-2016 The Rythm Engine project * for LICENSE and other details see: * https://github.com/rythmengine/rythmengine */ package org.rythmengine.cache; import net.sf.ehcache.CacheManager; import net.sf.ehcache.Element; import org.rythmengine.extension.ICacheService; import java.io.Serializable; /** * implement cache service based on <a href="http://ehcache.org/">EHCACHE</a> */ public enum EhCacheService implements ICacheService { INSTANCE; CacheManager cacheManager; net.sf.ehcache.Cache cache; private static final String cacheName = "rythm"; private int defaultTTL = 60; private EhCacheService() { } @Override public void put(String key, Serializable value, int ttl) { Element element = new Element(key, value); if (0 >= ttl) ttl = defaultTTL; element.setTimeToLive(ttl); cache.put(element); } @Override public void put(String key, Serializable value) { put(key, value, defaultTTL); } @Override public Serializable remove(String key) { Serializable o = get(key); if (null == o) { return null; } cache.remove(key); return o; } @Override public void evict(String key) { cache.remove(key); } @Override public Serializable get(String key) { Element e = cache.get(key); return null == e ? null : e.getValue(); } @Override public boolean contains(String key) { Element e = cache.get(key); return null != e; } @Override public void clear() { cache.removeAll(); } @Override public void setDefaultTTL(int ttl) { if (ttl == 0) throw new IllegalArgumentException("time to live value couldn't be zero"); defaultTTL = ttl; } @Override public void shutdown() { clear(); cacheManager.shutdown(); } @Override public void startup() { this.cacheManager = CacheManager.create(); this.cacheManager.addCache(cacheName); this.cache = cacheManager.getCache(cacheName); } }