package org.sugarj.driver.caching; import java.io.Serializable; import java.util.HashMap; import java.util.Map; /** * @author Sebastian Erdweg <seba at informatik uni-marburg de> */ public class ModuleKeyCache<V extends Serializable> implements Serializable { private static final long serialVersionUID = 7946929629107155889L; private final Object lock; private final Map<ModuleKey, V> cache; public ModuleKeyCache(Object lock) { this.lock = lock; cache = new HashMap<ModuleKey, V>(); } public void put(ModuleKey k, V v) { synchronized (lock) { k.doPut(); cache.remove(k); cache.put(k, v); k.doGet(); } } public V putGet(ModuleKey k, V v) { synchronized (lock) { k.doPut(); V old = cache.get(k); cache.remove(k); cache.put(k, v); return old; } } public V get(ModuleKey k) { synchronized (lock) { k.doGet(); return cache.get(k); } } }