annotate flys-artifacts/src/main/java/de/intevation/flys/artifacts/cache/CacheFactory.java @ 406:663aa18bee7f

Back jump correction should work now for both flow directions. flys-artifacts/trunk@1848 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author Sascha L. Teichmann <sascha.teichmann@intevation.de>
date Sat, 07 May 2011 21:34:02 +0000
parents e07d1c3f7667
children 0c8aca463bd4
rev   line source
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
1 package de.intevation.flys.artifacts.cache;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
2
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
3 import de.intevation.artifacts.common.utils.Config;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
4
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
5 import net.sf.ehcache.Cache;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
6 import net.sf.ehcache.CacheException;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
7 import net.sf.ehcache.CacheManager;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
8
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
9 import org.apache.log4j.Logger;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
11 public final class CacheFactory
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
12 {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
13 private static Logger log = Logger.getLogger(CacheFactory.class);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 public static final String XPATH_CACHE_CONFIG_FILE =
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16 "/artifact-database/cache/config-file/text()";
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 private CacheFactory() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
20
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 private static boolean initialized;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23 private static CacheManager cacheManager;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25 public static final Cache getCache() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 return getCache(Cache.DEFAULT_CACHE_NAME);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 public static final synchronized Cache getCache(String cacheName) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 if (!initialized) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31 initialized = true; // try only once
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 String configFile = Config.getStringXPath(XPATH_CACHE_CONFIG_FILE);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 if (configFile != null) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 configFile = Config.replaceConfigDir(configFile);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 try {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 cacheManager = CacheManager.create(configFile);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 //System.setProperty(
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 // "net.sf.ehcache.enableShutdownHook", "true");
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 Runtime.getRuntime().addShutdownHook(new Thread() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40 public void run() {
382
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
41 log.info("shutting down caches");
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
42 for (String name: cacheManager.getCacheNames()) {
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
43 log.info("\tflushing '" + name + "'");
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
44 cacheManager.getCache(name).flush();
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
45 }
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
46 cacheManager.shutdown();
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
47 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 });
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 catch (CacheException ce) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
51 log.error("cannot configure cache", ce);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 return cacheManager != null
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 ? cacheManager.getCache(cacheName)
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 : null;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org