/** * Created on Nov 10, 2005 * * $Id: CacheableSessionHolderProviderManager.java,v 1.3 2006/03/07 13:41:07 costin Exp $ * $Revision: 1.3 $ */ package org.springmodules.jcr.support; import java.util.Map; import javax.jcr.Repository; import org.springframework.util.CachingMapDecorator; import org.springmodules.jcr.SessionHolderProvider; /** * Manager which caches providers in order to avoid lookups. * * @author Costin Leau * */ public abstract class CacheableSessionHolderProviderManager extends AbstractSessionHolderProviderManager { /** * Caching class based on CachingMapDecorator from main Spring distribution. * * @author Costin Leau * */ protected class ProvidersCache extends CachingMapDecorator { private ProvidersCache() { super(true); } /** * @see org.springframework.util.CachingMapDecorator#create(java.lang.Object) */ protected Object create(Object key) { return parentLookup((Repository) key); } } /** * Providers cache. */ private final Map providersCache = new ProvidersCache(); /** * Method for retrieving the parent functionality. * * @param sf * @return */ private SessionHolderProvider parentLookup(Repository repository) { return super.getSessionProvider(repository); } /** * Overwrite the method to provide caching. * * @see org.springmodules.jcr.support.AbstractSessionHolderProviderManager#getSessionProvider(Repository) */ public SessionHolderProvider getSessionProvider(Repository repository) { return (SessionHolderProvider) providersCache.get(repository); } }