sascha@541: package de.intevation.gnv.geobackend.base.query; sascha@541: sascha@886: import de.intevation.gnv.geobackend.base.Result; sascha@886: sascha@541: import java.util.Collection; sascha@541: sascha@541: import net.sf.ehcache.Cache; sascha@886: import net.sf.ehcache.CacheManager; sascha@541: import net.sf.ehcache.Element; sascha@541: sascha@542: import org.apache.log4j.Logger; sascha@541: sascha@541: /** sascha@541: * @author Sascha L. Teichmann sascha@541: */ sascha@541: public class CachingQueryExecutorFactory sascha@541: extends QueryExecutorFactory sascha@541: { sascha@541: public static final String QUERY_EXECUTOR_FACTORY = "caching.query.executor.config"; sascha@541: public static final String CACHE_NAME = "sql.cache"; sascha@541: sascha@542: private static Logger log = Logger.getLogger(CachingQueryExecutorFactory.class); sascha@542: sascha@541: protected CacheManager manager; sascha@541: sascha@541: public CachingQueryExecutorFactory() { sascha@542: log.info("using SQL cache"); sascha@541: String configFile = System.getProperty(QUERY_EXECUTOR_FACTORY); sascha@541: manager = configFile != null sascha@541: ? new CacheManager(configFile) sascha@541: : new CacheManager(); sascha@541: manager.addCache(CACHE_NAME); sascha@541: } sascha@541: sascha@541: public QueryExecutor getQueryExecutor() { sascha@541: return new DefaultQueryExceutor() { sascha@541: sascha@541: public Collection cachedResults(String query) { sascha@541: Cache cache = manager.getCache(CACHE_NAME); sascha@541: Element element = cache.get(query); sascha@542: if (log.isDebugEnabled()) { sascha@542: log.debug("found results in SQL cache: " + (element != null)); sascha@542: } sascha@541: return element != null sascha@541: ? (Collection)element.getObjectValue() sascha@541: : null; sascha@541: } sascha@541: sascha@542: public void cacheResults(String query, Collection results) { sascha@542: log.debug("store results in SQL cache"); sascha@541: Cache cache = manager.getCache(CACHE_NAME); sascha@541: cache.put(new Element(query, results)); sascha@541: } sascha@541: }; sascha@541: } sascha@542: sascha@542: public void shutdown() { sascha@542: log.info("shutting down SQL cache"); sascha@542: manager.getCache(CACHE_NAME).flush(); sascha@542: manager.shutdown(); sascha@542: } sascha@541: } sascha@541: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: