1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.module.cache.setup;
35
36 import info.magnolia.jcr.util.NodeTypes;
37 import info.magnolia.jcr.util.NodeUtil;
38 import info.magnolia.module.InstallContext;
39 import info.magnolia.module.cache.CacheFactory;
40 import info.magnolia.module.delta.AbstractRepositoryTask;
41 import info.magnolia.module.delta.TaskExecutionException;
42
43 import javax.jcr.Node;
44 import javax.jcr.Property;
45 import javax.jcr.RepositoryException;
46
47
48
49
50 public class MigrateEhcache15ConfigurationTask extends AbstractRepositoryTask {
51
52 private static final String EHCACHE_FACTORY_NODE = "modules/cache/config/cacheFactory/delegateFactories/ehcache/";
53
54 public MigrateEhcache15ConfigurationTask() {
55 super("EhCache persistence settings", "");
56 }
57
58 @Override
59 protected void doExecute(InstallContext ctx) throws RepositoryException, TaskExecutionException {
60 final Node factory = ctx.getConfigJCRSession().getRootNode().getNode(EHCACHE_FACTORY_NODE);
61 final Node defaultCacheConfiguration = factory.getNode("defaultCacheConfiguration");
62 final Node caches = factory.addNode("caches", NodeTypes.ContentNode.NAME);
63 NodeUtil.renameNode(defaultCacheConfiguration, CacheFactory.DEFAULT_CACHE_NAME);
64 NodeUtil.moveNode(defaultCacheConfiguration, caches);
65
66 final Node persistence = defaultCacheConfiguration.addNode("persistence", NodeTypes.ContentNode.NAME);
67 persistence.setProperty("synchronousWrites", "false");
68 final boolean overflowToDisk = getBooleanAndRemove(defaultCacheConfiguration, "overflowToDisk", true);
69 final boolean diskPersistent = getBooleanAndRemove(defaultCacheConfiguration, "diskPersistent", true);
70 if (overflowToDisk && diskPersistent) {
71 persistence.setProperty("strategy", "localTempSwap");
72 ctx.warn("EhCache: needs ehcache enterprise edition / BigMemory for persistence. Disabling persistance for the time beeing.");
73 } else if (overflowToDisk) {
74 persistence.setProperty("strategy", "localTempSwap");
75 } else {
76 ctx.warn("EhCache: overflowToDisk or diskPersistent was set to false, so we'll set the persistent strategy to 'none'");
77 persistence.setProperty("strategy", "none");
78 }
79 }
80
81 private boolean getBooleanAndRemove(Node node, String propertyName, boolean defaultValue) throws RepositoryException {
82 if (node.hasProperty(propertyName)) {
83 final Property property = node.getProperty(propertyName);
84 final boolean val = property.getBoolean();
85 property.remove();
86 return val;
87 }
88 return defaultValue;
89 }
90 }