teichmann@5831: package org.dive4elements.river.artifacts.cache; sascha@373: teichmann@5831: import org.dive4elements.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@972: public static final String CACHE_CONFIG_FILE_PROPERTY = sascha@972: "flys.artifacts.cache.config.file"; sascha@972: 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@972: public static final String getConfigFile() { sascha@972: String configFile = System.getProperty(CACHE_CONFIG_FILE_PROPERTY); sascha@972: sascha@972: if (configFile != null) { sascha@972: return configFile; sascha@972: } sascha@972: sascha@972: configFile = Config.getStringXPath(XPATH_CACHE_CONFIG_FILE); sascha@972: sascha@972: if (configFile != null) { sascha@972: configFile = Config.replaceConfigDir(configFile); sascha@972: } sascha@972: sascha@972: return configFile; sascha@972: } sascha@972: sascha@373: public static final synchronized Cache getCache(String cacheName) { sascha@373: if (!initialized) { sascha@373: initialized = true; // try only once sascha@972: String configFile = getConfigFile(); sascha@373: if (configFile != null) { 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@382: log.info("shutting down caches"); sascha@382: for (String name: cacheManager.getCacheNames()) { sascha@382: log.info("\tflushing '" + name + "'"); sascha@382: cacheManager.getCache(name).flush(); sascha@382: } 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 :