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=51063ace7640b2323e3cf23e1cf676de2a01ae20;hpb=ee0981fe4c265fd9cd01e1cc47599fd018bf363a;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 51063ace7..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; /** @@ -98,7 +100,7 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, throw new ArgeoException("Remote Davex repository " + uri + " not found"); log.info("Initialized Jackrabbit repository " + repository - + " from uri " + uri); + + " from URI " + uri); // do not perform further initialization since we assume that the // remote repository has been properly configured return; @@ -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 @@ -165,6 +185,7 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, Session session = null; try { session = repository.login(credentialsToUse); + processNewSession(session); // Load cnds as resources for (String resUrl : cndFiles) { Resource res = resourceLoader.getResource(resUrl); @@ -274,6 +295,7 @@ public class JackrabbitContainer implements InitializingBean, DisposableBean, try { NamespaceHelper namespaceHelper = new NamespaceHelper(session); namespaceHelper.registerNamespaces(namespaces); + } catch (Exception e) { throw new ArgeoException("Cannot process new session", e); }