Cache Wrapper
This recipe provides an example of a simple class to make accessing Ehcache easier for simple use cases.
Problem
Using the full Ehcache API can be more tedious than using just a simple, value-based cache (like a HashMap) because of the Element class that holds values.
Solution
Implement a simple cache wrapper to hide the use of the Element class.
Discussion
Here's a simple class you can use to simplify using Ehcache in certain simple use cases.
You can still get the Ehcache cache in case you want access to the full API.
public interface CacheWrapper<K, V>
{
void put(K key, V value);
V get(K key);
}
import net.sf.ehcache.CacheManager;
import net.sf.ehcache.Ehcache;
import net.sf.ehcache.Element;
public class EhcacheWrapper<K, V> implements CacheWrapper<K, V>
{
private final String cacheName;
private final CacheManager cacheManager;
public EhcacheWrapper(final String cacheName, final CacheManager cacheManager)
{
this.cacheName = cacheName;
this.cacheManager = cacheManager;
}
public void put(final K key, final V value)
{
getCache().put(new Element(key, value));
}
public V get(final K key)
{
Element element = getCache().get(key);
if (element != null) {
return (V) element.getValue();
}
return null;
}
public Ehcache getCache()
{
return cacheManager.getEhcache(cacheName);
}
}