sascha@373: package de.intevation.flys.artifacts.cache; sascha@373: sascha@373: import de.intevation.artifacts.common.utils.Config; sascha@373: sascha@373: import net.sf.ehcache.Cache; sascha@373: import net.sf.ehcache.CacheException; sascha@373: import net.sf.ehcache.CacheManager; sascha@373: sascha@373: import org.apache.log4j.Logger; sascha@373: sascha@373: public final class CacheFactory sascha@373: { sascha@373: private static Logger log = Logger.getLogger(CacheFactory.class); sascha@373: sascha@373: public static final String XPATH_CACHE_CONFIG_FILE = sascha@373: "/artifact-database/cache/config-file/text()"; sascha@373: sascha@373: private CacheFactory() { sascha@373: } sascha@373: sascha@373: private static boolean initialized; sascha@373: sascha@373: private static CacheManager cacheManager; sascha@373: sascha@373: public static final Cache getCache() { sascha@373: return getCache(Cache.DEFAULT_CACHE_NAME); sascha@373: } sascha@373: sascha@373: public static final synchronized Cache getCache(String cacheName) { sascha@373: if (!initialized) { sascha@373: initialized = true; // try only once sascha@373: String configFile = Config.getStringXPath(XPATH_CACHE_CONFIG_FILE); sascha@373: if (configFile != null) { sascha@373: configFile = Config.replaceConfigDir(configFile); sascha@373: try { sascha@373: cacheManager = CacheManager.create(configFile); sascha@373: //System.setProperty( sascha@373: // "net.sf.ehcache.enableShutdownHook", "true"); sascha@373: Runtime.getRuntime().addShutdownHook(new Thread() { sascha@373: public void run() { sascha@373: cacheManager.shutdown(); sascha@373: } sascha@373: }); sascha@373: } sascha@373: catch (CacheException ce) { sascha@373: log.error("cannot configure cache", ce); sascha@373: } sascha@373: } sascha@373: } sascha@373: sascha@373: return cacheManager != null sascha@373: ? cacheManager.getCache(cacheName) sascha@373: : null; sascha@373: } sascha@373: } sascha@373: // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :