
org.dspace.services.caching.model.EhcacheCache Maven / Gradle / Ivy
/**
* The contents of this file are subject to the license and copyright
* detailed in the LICENSE and NOTICE files at the root of the source
* tree and available online at
*
* http://www.dspace.org/license/
*/
package org.dspace.services.caching.model;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
import net.sf.ehcache.Status;
import org.dspace.services.model.Cache;
import org.dspace.services.model.CacheConfig;
import org.dspace.services.model.CacheConfig.CacheScope;
/**
* The ehcache implementation of the Cache object.
*
* @author Aaron Zeckoski (azeckoski @ gmail.com)
*/
public final class EhcacheCache implements Cache {
protected Ehcache cache;
public Ehcache getCache() {
return cache;
}
protected CacheConfig cacheConfig;
public EhcacheCache(Ehcache cache, CacheConfig cacheConfig) {
// setup the cache
if (cache == null) {
throw new NullPointerException("Cache must be set and cannot be null");
} else {
if (cache.getStatus() != Status.STATUS_ALIVE) {
throw new IllegalArgumentException("Cache ("+cache.getName()+") must already be initialized and alive");
}
}
this.cache = cache;
if (cacheConfig != null) {
this.cacheConfig = cacheConfig;
} else {
this.cacheConfig = new CacheConfig(CacheScope.INSTANCE);
}
}
/* (non-Javadoc)
* @see org.dspace.services.model.Cache#getConfig()
*/
public CacheConfig getConfig() {
return cacheConfig;
}
/* (non-Javadoc)
* @see org.sakaiproject.caching.Cache#clear()
*/
public void clear() {
cache.removeAll();
cache.clearStatistics();
}
/* (non-Javadoc)
* @see org.sakaiproject.caching.Cache#exists(java.lang.String)
*/
public boolean exists(String key) {
if (key == null) {
throw new IllegalArgumentException("key cannot be null");
}
return cache.isKeyInCache(key);
}
/* (non-Javadoc)
* @see org.sakaiproject.caching.Cache#get(java.lang.String)
*/
public Object get(String key) {
if (key == null) {
throw new IllegalArgumentException("key cannot be null");
}
return (Serializable) getCachePayload(key, false);
}
/* (non-Javadoc)
* @see org.dspace.services.model.Cache#getKeys()
*/
public List getKeys() {
ArrayList keys = new ArrayList();
List> eKeys = cache.getKeys();
for (Object object : eKeys) {
if (object != null) {
keys.add(object.toString());
}
}
return keys;
}
/* (non-Javadoc)
* @see org.dspace.services.model.Cache#look(java.lang.String)
*/
public Object look(String key) {
if (key == null) {
throw new IllegalArgumentException("key cannot be null");
}
return (Serializable) getCachePayload(key, true);
}
/* (non-Javadoc)
* @see org.dspace.services.model.Cache#put(java.lang.String, java.io.Serializable)
*/
public void put(String key, Object value) {
if (key == null) {
throw new IllegalArgumentException("key cannot be null");
}
cache.put(new Element(key, value));
}
/* (non-Javadoc)
* @see org.dspace.services.model.Cache#getName()
*/
public String getName() {
if (cache != null) {
return cache.getName();
} else {
return "NULL cache";
}
}
/* (non-Javadoc)
* @see org.sakaiproject.caching.Cache#remove(java.lang.String)
*/
public boolean remove(String key) {
if (key == null) {
throw new IllegalArgumentException("key cannot be null");
}
return cache.remove(key);
}
/* (non-Javadoc)
* @see org.sakaiproject.caching.Cache#size()
*/
public int size() {
return cache.getSize();
}
/**
* Retrieve a payload from the cache for this key if one can be found.
* @param key the key for this cache element
* @return the payload or null if none found
*/
private Object getCachePayload(String key, boolean quiet) {
Object payload = null;
Element e;
if (quiet) {
e = cache.getQuiet(key);
} else {
e = cache.get(key);
}
if (e != null) {
// attempt to get the serialized value first
if (e.isSerializable()) {
payload = e.getValue();
} else {
// not serializable so get the object value
payload = e.getObjectValue();
}
}
return payload;
}
@Override
public boolean equals(Object obj) {
if (null == obj) {
return false;
}
if (!(obj instanceof EhcacheCache)) {
return false;
} else {
EhcacheCache castObj = (EhcacheCache) obj;
if (null == this.getName() || null == castObj.getName()) {
return false;
} else {
return (this.getName().equals(castObj.getName()));
}
}
}
@Override
public int hashCode() {
if (null == this.getName()) {
return super.hashCode();
}
String hashStr = this.getClass().getName() + ":" + this.getName().hashCode();
return hashStr.hashCode();
}
@Override
public String toString() {
return "EhCache:name="+getName()+":Scope="+cacheConfig.getCacheScope()+":size="+size();
}
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy