annotate artifacts/src/main/java/org/dive4elements/river/artifacts/cache/CacheFactory.java @ 5863:4897a58c8746

River artifacts: Added new copyright headers.
author Sascha L. Teichmann <teichmann@intevation.de>
date Sun, 28 Apr 2013 14:40:59 +0200
parents 5aa05a7a34b7
children af13ceeba52a
rev   line source
5863
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
1 /* Copyright (C) 2011, 2012, 2013 by Bundesanstalt für Gewässerkunde
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
2 * Software engineering by Intevation GmbH
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
3 *
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
5 * and comes with ABSOLUTELY NO WARRANTY! Check out the
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
6 * documentation coming with Dive4Elements River for details.
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
7 */
4897a58c8746 River artifacts: Added new copyright headers.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5838
diff changeset
8
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 972
diff changeset
9 package org.dive4elements.river.artifacts.cache;
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
10
5831
bd047b71ab37 Repaired internal references
Sascha L. Teichmann <teichmann@intevation.de>
parents: 972
diff changeset
11 import org.dive4elements.artifacts.common.utils.Config;
373
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 import net.sf.ehcache.Cache;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
14 import net.sf.ehcache.CacheException;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
15 import net.sf.ehcache.CacheManager;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
16
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
17 import org.apache.log4j.Logger;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
18
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
19 public final class CacheFactory
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 Logger log = Logger.getLogger(CacheFactory.class);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
22
972
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
23 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
24 "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
25
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
26 public static final String XPATH_CACHE_CONFIG_FILE =
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 "/artifact-database/cache/config-file/text()";
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 private CacheFactory() {
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
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
32 private static boolean initialized;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34 private static CacheManager cacheManager;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36 public static final Cache getCache() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 return getCache(Cache.DEFAULT_CACHE_NAME);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39
972
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
40 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
41 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
42
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
43 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
44 return configFile;
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
45 }
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 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
48
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
49 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
50 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
51 }
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
52
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
53 return configFile;
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
54 }
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
55
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
56 public static final synchronized Cache getCache(String cacheName) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 if (!initialized) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 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
59 String configFile = getConfigFile();
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
60 if (configFile != null) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 try {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 cacheManager = CacheManager.create(configFile);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 //System.setProperty(
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 // "net.sf.ehcache.enableShutdownHook", "true");
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 Runtime.getRuntime().addShutdownHook(new Thread() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 public void run() {
382
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
67 log.info("shutting down caches");
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
68 for (String name: cacheManager.getCacheNames()) {
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
69 log.info("\tflushing '" + name + "'");
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
70 cacheManager.getCache(name).flush();
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
71 }
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
72 cacheManager.shutdown();
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 });
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
75 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
76 catch (CacheException ce) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 log.error("cannot configure cache", ce);
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 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
80 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
81
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
82 return cacheManager != null
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 ? cacheManager.getCache(cacheName)
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 : null;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
86 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
87 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org