//$Id: EhCache.java 10716 2006-11-03 19:05:11Z max.andersen@jboss.com $
package com.ketayao.fensy.cache;
import java.util.List;
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Element;
import com.ketayao.fensy.exception.CacheException;
/**
* EHCache
*/
public class EhCache implements Cache {
private net.sf.ehcache.Cache cache;
/**
* Creates a new Hibernate pluggable cache based on a cache name.
* <p/>
*
* @param cache The underlying EhCache instance to use.
*/
public EhCache(net.sf.ehcache.Cache cache) {
this.cache = cache;
}
@SuppressWarnings("rawtypes")
public List keys() throws CacheException {
return this.cache.getKeys();
}
/**
* Gets a value of an element which matches the given key.
*
* @param key the key of the element to return.
* @return The value placed into the cache with an earlier put, or null if not found or expired
* @throws CacheException
*/
public Object get(Object key) throws CacheException {
try {
if (key == null)
return null;
else {
Element element = cache.get(key);
if (element != null)
return element.getObjectValue();
}
return null;
} catch (net.sf.ehcache.CacheException e) {
throw new CacheException(e);
}
}
/**
* Puts an object into the cache.
*
* @param key a key
* @param value a value
* @throws CacheException if the {@link CacheManager}
* is shutdown or another {@link Exception} occurs.
*/
public void update(Object key, Object value) throws CacheException {
put(key, value);
}
/**
* Puts an object into the cache.
*
* @param key a key
* @param value a value
* @throws CacheException if the {@link CacheManager}
* is shutdown or another {@link Exception} occurs.
*/
public void put(Object key, Object value) throws CacheException {
try {
Element element = new Element(key, value);
cache.put(element);
} catch (IllegalArgumentException e) {
throw new CacheException(e);
} catch (IllegalStateException e) {
throw new CacheException(e);
} catch (net.sf.ehcache.CacheException e) {
throw new CacheException(e);
}
}
/**
* Removes the element which matches the key.
* <p/>
* If no element matches, nothing is removed and no Exception is thrown.
*
* @param key the key of the element to remove
* @throws CacheException
*/
public void remove(Object key) throws CacheException {
try {
cache.remove(key);
} catch (IllegalStateException e) {
throw new CacheException(e);
} catch (net.sf.ehcache.CacheException e) {
throw new CacheException(e);
}
}
/**
* Remove all elements in the cache, but leave the cache
* in a useable state.
*
* @throws CacheException
*/
public void clear() throws CacheException {
try {
cache.removeAll();
} catch (IllegalStateException e) {
throw new CacheException(e);
} catch (net.sf.ehcache.CacheException e) {
throw new CacheException(e);
}
}
/**
* Remove the cache and make it unuseable.
*
* @throws CacheException
*/
public void destroy() throws CacheException {
try {
cache.getCacheManager().removeCache(cache.getName());
} catch (IllegalStateException e) {
throw new CacheException(e);
} catch (net.sf.ehcache.CacheException e) {
throw new CacheException(e);
}
}
}