X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.init%2Fsrc%2Forg%2Fargeo%2Fapi%2Finit%2FRuntimeManager.java;h=da15b1ebccab4dc6d7f30a69edbec23d0bfad837;hb=f92ba77466d18fcd0e7a9386ae0f16b530337f9f;hp=113aa46c45189f714f56438ba62038b50509fcbb;hpb=d297ee2399cf6e06b9dcfa0267521781f3559ec6;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.init/src/org/argeo/api/init/RuntimeManager.java b/org.argeo.init/src/org/argeo/api/init/RuntimeManager.java index 113aa46c4..da15b1ebc 100644 --- a/org.argeo.init/src/org/argeo/api/init/RuntimeManager.java +++ b/org.argeo.init/src/org/argeo/api/init/RuntimeManager.java @@ -1,11 +1,45 @@ package org.argeo.api.init; +import java.io.IOException; +import java.io.InputStream; +import java.io.UncheckedIOException; +import java.nio.file.Files; +import java.nio.file.Path; import java.util.Map; +import java.util.Properties; import java.util.function.Consumer; /** Dynamically manages multiple runtimes within a single JVM. */ public interface RuntimeManager { + String JVM_ARGS = "jvm.args"; + String STATE = "state"; + String DATA = "data"; + public void startRuntime(String relPath, Consumer> configCallback); public void closeRuntime(String relPath, boolean async); + + static void loadConfig(Path dir, Map config) { + try { + // System.out.println("Load from " + dir); + Path jvmArgsPath = dir.resolve(RuntimeManager.JVM_ARGS); + if (!Files.exists(jvmArgsPath)) { + // load from parent directory + loadConfig(dir.getParent(), config); + } + + if (Files.exists(dir)) + for (Path p : Files.newDirectoryStream(dir, "*.ini")) { + Properties props = new Properties(); + try (InputStream in = Files.newInputStream(p)) { + props.load(in); + } + for (Object key : props.keySet()) { + config.put(key.toString(), props.getProperty(key.toString())); + } + } + } catch (IOException e) { + throw new UncheckedIOException("Cannot load configuration from " + dir, e); + } + } }