X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=server%2Fruntime%2Forg.argeo.server.jackrabbit%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fjackrabbit%2FJackrabbitContainer.java;h=eb090514f425aa8f3ead1045ec072e78b38a7eda;hb=149023e5969377045847bbecf24b0898b18a67a9;hp=942313f8a5b68d3b0dba896629ddf3c248469dab;hpb=832bee8656e427eef8580b6d24bfdcf4526fce95;p=lgpl%2Fargeo-commons.git diff --git a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java index 942313f8a..eb090514f 100644 --- a/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java +++ b/server/runtime/org.argeo.server.jackrabbit/src/main/java/org/argeo/jackrabbit/JackrabbitContainer.java @@ -18,6 +18,7 @@ package org.argeo.jackrabbit; import java.io.ByteArrayInputStream; import java.io.File; +import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; @@ -55,6 +56,7 @@ import org.springframework.beans.factory.InitializingBean; import org.springframework.context.ResourceLoaderAware; import org.springframework.core.io.Resource; import org.springframework.core.io.ResourceLoader; +import org.springframework.util.SystemPropertyUtils; import org.xml.sax.InputSource; /** @@ -111,16 +113,9 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, } RepositoryConfig config; + Properties vars = getConfigurationProperties(); InputStream in = configuration.getInputStream(); - InputStream propsIn = null; try { - Properties vars = new Properties(); - if (variables != null) { - propsIn = variables.getInputStream(); - vars.load(propsIn); - } - // override with system properties - vars.putAll(System.getProperties()); vars.put(RepositoryConfigurationParser.REPOSITORY_HOME_VARIABLE, homeDirectory.getCanonicalPath()); config = RepositoryConfig.create(new InputSource(in), vars); @@ -128,7 +123,6 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, throw new RuntimeException("Cannot read configuration", e); } finally { IOUtils.closeQuietly(in); - IOUtils.closeQuietly(propsIn); } if (inMemory) @@ -143,6 +137,32 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, + homeDirectory + " with config " + configuration); } + protected Properties getConfigurationProperties() { + InputStream propsIn = null; + Properties vars; + try { + vars = new Properties(); + if (variables != null) { + propsIn = variables.getInputStream(); + vars.load(propsIn); + } + // resolve system properties + for (Object key : vars.keySet()) { + // TODO: implement a smarter mechanism to resolve nested ${} + String newValue = SystemPropertyUtils.resolvePlaceholders(vars + .getProperty(key.toString())); + vars.put(key, newValue); + } + // override with system properties + vars.putAll(System.getProperties()); + } catch (IOException e) { + throw new ArgeoException("Cannot read configuration properties", e); + } finally { + IOUtils.closeQuietly(propsIn); + } + return vars; + } + /** * Import declared node type definitions, trying to update them if they have * changed. In case of failures an error will be logged but no exception @@ -192,7 +212,7 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, else action.run(); } - + public void destroy() throws Exception { if (repository != null) { if (repository instanceof JackrabbitRepository)