Mercurial > dive4elements > gnv-client
annotate geo-backend/src/main/java/de/intevation/gnv/geobackend/base/query/CachingQueryExecutorFactory.java @ 1145:dfe1ac687c7f tip
added tags
author | Thomas Arendsen Hein <thomas@intevation.de> |
---|---|
date | Fri, 28 Sep 2012 12:16:15 +0200 |
parents | 81f0a5e66d71 |
children |
rev | line source |
---|---|
1127
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1124
diff
changeset
|
1 /* |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1124
diff
changeset
|
2 * Copyright (c) 2010 by Intevation GmbH |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1124
diff
changeset
|
3 * |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1124
diff
changeset
|
4 * This program is free software under the LGPL (>=v2.1) |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1124
diff
changeset
|
5 * Read the file LGPL.txt coming with the software for details |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1124
diff
changeset
|
6 * or visit http://www.gnu.org/licenses/ if it does not exist. |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1124
diff
changeset
|
7 */ |
ebeb56428409
Added license headers and license file.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1124
diff
changeset
|
8 |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
9 package de.intevation.gnv.geobackend.base.query; |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
10 |
1124
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
11 import de.intevation.gnv.geobackend.base.Result; |
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
12 |
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
13 import de.intevation.gnv.geobackend.base.query.cache.CacheCleaner; |
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
14 |
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
15 import de.intevation.gnv.geobackend.config.Configuration; |
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
16 |
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
17 import java.lang.management.ManagementFactory; |
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
18 |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
19 import java.util.Collection; |
895
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
20 import java.util.Iterator; |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
21 |
1124
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
22 import javax.management.MBeanServer; |
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
23 |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
24 import net.sf.ehcache.Cache; |
886
8b442223741c
Ordered imports. Removed empty headers.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
542
diff
changeset
|
25 import net.sf.ehcache.CacheManager; |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
26 import net.sf.ehcache.Element; |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
27 |
1124
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
28 import net.sf.ehcache.management.ManagementService; |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
29 |
1124
f3fdbeef1c68
Made sql-cache statistics available as MBean in JConsole.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
1122
diff
changeset
|
30 import org.apache.log4j.Logger; |
895
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
31 |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
32 /** |
887
b757def3ff55
Bring @author javadoc tags in form '@author <a href="john.doe@example.com">John Doe</a>'
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
886
diff
changeset
|
33 * @author <a href="mailto:sascha.teichmann@intevation.de">Sascha L. Teichmann</a> |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
34 */ |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
35 public class CachingQueryExecutorFactory |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
36 extends QueryExecutorFactory |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
37 { |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
38 public static final String CACHE_NAME = "sql.cache"; |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
39 |
542
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
40 private static Logger log = Logger.getLogger(CachingQueryExecutorFactory.class); |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
41 |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
42 protected CacheManager manager; |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
43 |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
44 public CachingQueryExecutorFactory() { |
542
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
45 log.info("using SQL cache"); |
1122
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
46 init(); |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
47 } |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
48 |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
49 private void init() { |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
50 Configuration config = Configuration.getInstance(); |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
51 |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
52 if (config == null) { |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
53 log.error("No geobackend configuration found. " + |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
54 "Wasn't able to initialize cache."); |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
55 return; |
1985d5db0feb
Implemented a global configuration that should be used to initialize the geobackend.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
897
diff
changeset
|
56 } |
1128
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
57 String configFile = config.getCacheConfiguration(); |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
58 manager = configFile != null |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
59 ? new CacheManager(configFile) |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
60 : new CacheManager(); |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
61 manager.addCache(CACHE_NAME); |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
62 MBeanServer mBeanServer = |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
63 ManagementFactory.getPlatformMBeanServer(); |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
64 ManagementService.registerMBeans( |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
65 manager, mBeanServer, false, false, false, true); |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
66 CacheCleaner cc = new CacheCleaner(); |
81f0a5e66d71
Add module for FLYS artifacts
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
1127
diff
changeset
|
67 cc.start(); |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
68 } |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
69 |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
70 public QueryExecutor getQueryExecutor() { |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
71 return new DefaultQueryExceutor() { |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
72 |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
73 public Collection<Result> cachedResults(String query) { |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
74 Cache cache = manager.getCache(CACHE_NAME); |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
75 Element element = cache.get(query); |
542
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
76 if (log.isDebugEnabled()) { |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
77 log.debug("found results in SQL cache: " + (element != null)); |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
78 } |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
79 return element != null |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
80 ? (Collection<Result>)element.getObjectValue() |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
81 : null; |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
82 } |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
83 |
542
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
84 public void cacheResults(String query, Collection<Result> results) { |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
85 log.debug("store results in SQL cache"); |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
86 Cache cache = manager.getCache(CACHE_NAME); |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
87 cache.put(new Element(query, results)); |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
88 } |
897
02cd2935b5fa
Removed trailing whitespace.
Ingo Weinzierl <ingo.weinzierl@intevation.de>
parents:
895
diff
changeset
|
89 |
895
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
90 public void clearCache(String[] tableNames) { |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
91 Cache cache = manager.getCache(CACHE_NAME); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
92 Iterator keys = cache.getKeys().iterator(); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
93 while (keys.hasNext()){ |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
94 String origKey = (String)keys.next(); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
95 String key = origKey.toUpperCase(); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
96 log.debug(key); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
97 for (int i = 0; i < tableNames.length; i++){ |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
98 if (key.contains(tableNames[i])){ |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
99 log.debug(tableNames[i]+ " is contained in "+key); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
100 log.debug("Cacheentry will be removed"); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
101 boolean success = cache.remove(origKey); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
102 if (!success){ |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
103 log.warn("Object could not be reoved from Cache."); |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
104 } |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
105 break; |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
106 } |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
107 } |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
108 } |
eb777022b628
Integrated a CacheCleaner that will cleanup the SQL-Cache if necessary
Tim Englich <tim.englich@intevation.de>
parents:
887
diff
changeset
|
109 } |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
110 }; |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
111 } |
542
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
112 |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
113 public void shutdown() { |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
114 log.info("shutting down SQL cache"); |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
115 manager.getCache(CACHE_NAME).flush(); |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
116 manager.shutdown(); |
f0b6d0e2a0f6
Small fixes for Ehcache based SQL results caching.
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
541
diff
changeset
|
117 } |
541
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
118 } |
3cbf11c67fdc
Experimental caching of SQL results via Ehache
Sascha L. Teichmann <sascha.teichmann@intevation.de>
parents:
diff
changeset
|
119 // vim:set ts=4 sw=4 si et sta sts=4 fenc=utf8: |