view flys-artifacts/src/main/java/de/intevation/flys/artifacts/cache/CacheFactory.java @ 4655:cd44d28d0fbc

Move the access to artifact data to the Access object Use BedHeightAccess class to receive the data from the artifact. This abstracts the data access from the actual artifact.
author Björn Ricks <bjoern.ricks@intevation.de>
date Tue, 11 Dec 2012 09:44:04 +0100
parents 0c8aca463bd4
children
line wrap: on
line source
package de.intevation.flys.artifacts.cache;

import de.intevation.artifacts.common.utils.Config;

import net.sf.ehcache.Cache;
import net.sf.ehcache.CacheException;
import net.sf.ehcache.CacheManager;

import org.apache.log4j.Logger;

public final class CacheFactory
{
    private static Logger log = Logger.getLogger(CacheFactory.class);

    public static final String CACHE_CONFIG_FILE_PROPERTY =
        "flys.artifacts.cache.config.file";

    public static final String XPATH_CACHE_CONFIG_FILE =
        "/artifact-database/cache/config-file/text()";

    private CacheFactory() {
    }

    private static boolean      initialized;

    private static CacheManager cacheManager;

    public static final Cache getCache() {
        return getCache(Cache.DEFAULT_CACHE_NAME);
    }

    public static final String getConfigFile() {
        String configFile = System.getProperty(CACHE_CONFIG_FILE_PROPERTY);

        if (configFile != null) {
            return configFile;
        }

        configFile = Config.getStringXPath(XPATH_CACHE_CONFIG_FILE);

        if (configFile != null) {
            configFile = Config.replaceConfigDir(configFile);
        }

        return configFile;
    }

    public static final synchronized Cache getCache(String cacheName) {
        if (!initialized) {
            initialized = true; // try only once
            String configFile = getConfigFile();
            if (configFile != null) {
                try {
                    cacheManager = CacheManager.create(configFile);
                    //System.setProperty(
                    //  "net.sf.ehcache.enableShutdownHook", "true");
                    Runtime.getRuntime().addShutdownHook(new Thread() {
                        public void run() {
                            log.info("shutting down caches");
                            for (String name: cacheManager.getCacheNames()) {
                                log.info("\tflushing '" + name + "'");
                                cacheManager.getCache(name).flush();
                            }
                            cacheManager.shutdown();
                        }
                    });
                }
                catch (CacheException ce) {
                    log.error("cannot configure cache", ce);
                }
            }
        }

        return cacheManager != null
            ? cacheManager.getCache(cacheName)
            : null;
    }
}
// vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org