annotate artifacts/src/main/java/org/dive4elements/river/artifacts/cache/CacheFactory.java @ 9726:0a5239a1e46e 3.2.x

Upgrade to Log4j 2
author Tom Gottfried <tom@intevation.de>
date Wed, 02 Mar 2022 10:26:50 +0100
parents af13ceeba52a
children
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 *
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
4 * This file is Free Software under the GNU AGPL (>=v3)
5863
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
5994
af13ceeba52a Removed trailing whitespace.
Sascha L. Teichmann <teichmann@intevation.de>
parents: 5863
diff changeset
6 * documentation coming with Dive4Elements River for details.
5863
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
9726
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 5994
diff changeset
17 import org.apache.logging.log4j.Logger;
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 5994
diff changeset
18 import org.apache.logging.log4j.LogManager;
373
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 public final class CacheFactory
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
21 {
9726
0a5239a1e46e Upgrade to Log4j 2
Tom Gottfried <tom@intevation.de>
parents: 5994
diff changeset
22 private static Logger log = LogManager.getLogger(CacheFactory.class);
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
23
972
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
24 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
25 "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
26
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
27 public static final String XPATH_CACHE_CONFIG_FILE =
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
28 "/artifact-database/cache/config-file/text()";
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
29
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
30 private CacheFactory() {
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
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
33 private static boolean initialized;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
34
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
35 private static CacheManager cacheManager;
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
36
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
37 public static final Cache getCache() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
38 return getCache(Cache.DEFAULT_CACHE_NAME);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
39 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
40
972
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
41 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
42 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
43
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
44 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
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
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
48 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
49
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
50 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
51 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
52 }
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
53
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
54 return configFile;
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
55 }
0c8aca463bd4 Added caching support for the static part of the datacage.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 382
diff changeset
56
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
57 public static final synchronized Cache getCache(String cacheName) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
58 if (!initialized) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
59 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
60 String configFile = getConfigFile();
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
61 if (configFile != null) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
62 try {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
63 cacheManager = CacheManager.create(configFile);
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
64 //System.setProperty(
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
65 // "net.sf.ehcache.enableShutdownHook", "true");
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
66 Runtime.getRuntime().addShutdownHook(new Thread() {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
67 public void run() {
382
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
68 log.info("shutting down caches");
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
69 for (String name: cacheManager.getCacheNames()) {
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
70 log.info("\tflushing '" + name + "'");
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
71 cacheManager.getCache(name).flush();
e07d1c3f7667 Flush/persist cache at end of program.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents: 373
diff changeset
72 }
373
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
73 cacheManager.shutdown();
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 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
77 catch (CacheException ce) {
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
78 log.error("cannot configure cache", ce);
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
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
83 return cacheManager != null
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
84 ? cacheManager.getCache(cacheName)
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
85 : null;
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 }
7f7d6037d242 Added ehcache support.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff changeset
88 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8 :

http://dive4elements.wald.intevation.org