blob: c8971ea175403f592c7b04b4a48699ddb86c2f76 [file] [log] [blame]
package de.ids_mannheim.korap.config;
import java.io.InputStream;
import java.util.List;
import java.util.Map;
import de.ids_mannheim.korap.utils.ServiceInfo;
import de.ids_mannheim.korap.utils.StringUtils;
import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import net.sf.ehcache.config.CacheConfiguration;
import net.sf.ehcache.config.PersistenceConfiguration;
import net.sf.ehcache.store.MemoryStoreEvictionPolicy;
/**
* @author hanl
* @date 03/02/2016
*/
public abstract class KustvaktCacheable {
private static boolean loaded = false;
private String prefix;
private String name;
public KustvaktCacheable (String cache_name, String prefix) {
init();
if (!enabled())
createDefaultFileCache(cache_name);
this.prefix = prefix;
this.name = cache_name;
}
public KustvaktCacheable () {
// TODO Auto-generated constructor stub
}
private static Cache getCache (String name) {
return CacheManager.getInstance().getCache(name);
}
private void createDefaultFileCache (String name) {
Cache default_cache = new Cache(new CacheConfiguration(name, 20000)
.memoryStoreEvictionPolicy(MemoryStoreEvictionPolicy.LFU)
.eternal(false).timeToLiveSeconds(15000).timeToIdleSeconds(5000)
.diskExpiryThreadIntervalSeconds(0)
.persistence(new PersistenceConfiguration().strategy(
PersistenceConfiguration.Strategy.LOCALTEMPSWAP)));
if (!CacheManager.getInstance().cacheExists(name))
CacheManager.getInstance().addCache(default_cache);
}
public void init () {
if (!loaded) {
if (ServiceInfo.getInfo().getCacheable()) {
String file = "ehcache.xml";
InputStream in = ConfigLoader.loadConfigStream(file);
CacheManager.newInstance(in);
loaded = true;
}
else {
CacheManager.create();
}
}
}
public boolean hasCacheEntry (Object key) {
return getCache(this.name).isKeyInCache(createKey(key.toString()));
}
public boolean enabled () {
// check that caching is enabled
return ServiceInfo.getInfo().getCacheable();
}
public Object getCacheValue (Object key) {
Element e = getCache(this.name).get(createKey(key.toString()));
if (e != null)
return e.getObjectValue();
return null;
}
public long getCacheCreationTime (Object key) {
Element e = getCache(this.name).get(createKey(key.toString()));
if (e != null)
return e.getCreationTime();
return -1;
}
public void storeInCache (Object key, Object value) {
getCache(this.name).put(new Element(createKey(key.toString()), value));
}
public void removeCacheEntry (Object key) {
getCache(this.name).remove(createKey(key.toString()));
}
public void clearCache () {
Cache c = getCache(this.name);
if (enabled()) {
c.removeAll();
// c.clearStatistics();
}
}
private String createKey (String input) {
return StringUtils.toSHAHash(this.prefix + "@" + input);
}
public Map<Object, Element> getAllCacheElements () {
Cache cache = getCache(name);
return cache.getAll(cache.getKeysWithExpiryCheck());
}
public List getKeysWithExpiryCheck () {
Cache cache = getCache(name);
return cache.getKeysWithExpiryCheck();
}
}