annotate 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
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
972
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
15 public static final String CACHE_CONFIG_FILE_PROPERTY =
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
16 "flys.artifacts.cache.config.file";
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
17
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18 public static final String XPATH_CACHE_CONFIG_FILE =
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 "/artifact-database/cache/config-file/text()";
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 CacheFactory() {
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
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
24 private static boolean initialized;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
25
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 private static CacheManager cacheManager;
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 public static final Cache getCache() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29 return getCache(Cache.DEFAULT_CACHE_NAME);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
31
972
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
32 public static final String getConfigFile() {
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
33 String configFile = System.getProperty(CACHE_CONFIG_FILE_PROPERTY);
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
34
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
35 if (configFile != null) {
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
36 return configFile;
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
37 }
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
38
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
39 configFile = Config.getStringXPath(XPATH_CACHE_CONFIG_FILE);
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
40
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
41 if (configFile != null) {
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
42 configFile = Config.replaceConfigDir(configFile);
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
43 }
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
44
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
45 return configFile;
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
46 }
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
47
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
48 public static final synchronized Cache getCache(String cacheName) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
49 if (!initialized) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
50 initialized = true; // try only once
972
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
51 String configFile = getConfigFile();
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
52 if (configFile != null) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
53 try {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
54 cacheManager = CacheManager.create(configFile);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
55 //System.setProperty(
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 // "net.sf.ehcache.enableShutdownHook", "true");
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 Runtime.getRuntime().addShutdownHook(new Thread() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 public void run() {
382
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
59 log.info("shutting down caches");
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
60 for (String name: cacheManager.getCacheNames()) {
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
61 log.info("\tflushing '" + name + "'");
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
62 cacheManager.getCache(name).flush();
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
63 }
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 cacheManager.shutdown();
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 });
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
68 catch (CacheException ce) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
69 log.error("cannot configure cache", ce);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
70 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
71 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
74 return cacheManager != null
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 ? cacheManager.getCache(cacheName)
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 : null;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
79 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org