From 02a204c22fad15207d6394a6121e8c644a66d1e4 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Sun, 3 Mar 2013 20:55:33 +0000 Subject: [PATCH] Introduce CLI module git-svn-id: https://svn.argeo.org/slc/trunk@6095 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- dep/org.argeo.slc.dep.minimal/pom.xml | 19 +++-- .../META-INF/spring/cli-osgi.xml | 24 ++++++ .../META-INF/spring/cli.xml | 23 ++++++ modules/org.argeo.slc.agent.cli/pom.xml | 26 +++++++ modules/pom.xml | 4 +- runtime/org.argeo.slc.launcher/jaas.config | 8 +- .../org.argeo.slc.launcher/log4j.properties | 17 +---- .../main/java/org/argeo/slc/cli/SlcMain.java | 75 +++++++++++++++---- 8 files changed, 160 insertions(+), 36 deletions(-) create mode 100644 modules/org.argeo.slc.agent.cli/META-INF/spring/cli-osgi.xml create mode 100644 modules/org.argeo.slc.agent.cli/META-INF/spring/cli.xml create mode 100644 modules/org.argeo.slc.agent.cli/pom.xml diff --git a/dep/org.argeo.slc.dep.minimal/pom.xml b/dep/org.argeo.slc.dep.minimal/pom.xml index 22f85a351..475f5c45c 100644 --- a/dep/org.argeo.slc.dep.minimal/pom.xml +++ b/dep/org.argeo.slc.dep.minimal/pom.xml @@ -73,27 +73,32 @@ pom - + org.argeo.slc - org.argeo.slc.support.jcr + org.argeo.slc.launcher 1.1.12-SNAPSHOT org.argeo.slc - org.argeo.slc.agent.jcr + org.argeo.slc.agent.cli 1.1.12-SNAPSHOT + + org.argeo.slc - org.argeo.slc.node.jackrabbit + org.argeo.slc.support.jcr 1.1.12-SNAPSHOT - - org.argeo.slc - org.argeo.slc.launcher + org.argeo.slc.agent.jcr + 1.1.12-SNAPSHOT + + + org.argeo.slc + org.argeo.slc.node.jackrabbit 1.1.12-SNAPSHOT diff --git a/modules/org.argeo.slc.agent.cli/META-INF/spring/cli-osgi.xml b/modules/org.argeo.slc.agent.cli/META-INF/spring/cli-osgi.xml new file mode 100644 index 000000000..0e80b8e3f --- /dev/null +++ b/modules/org.argeo.slc.agent.cli/META-INF/spring/cli-osgi.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/org.argeo.slc.agent.cli/META-INF/spring/cli.xml b/modules/org.argeo.slc.agent.cli/META-INF/spring/cli.xml new file mode 100644 index 000000000..5c5759285 --- /dev/null +++ b/modules/org.argeo.slc.agent.cli/META-INF/spring/cli.xml @@ -0,0 +1,23 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/modules/org.argeo.slc.agent.cli/pom.xml b/modules/org.argeo.slc.agent.cli/pom.xml new file mode 100644 index 000000000..6d2ae410b --- /dev/null +++ b/modules/org.argeo.slc.agent.cli/pom.xml @@ -0,0 +1,26 @@ + + 4.0.0 + + org.argeo.slc + modules + 1.1.12-SNAPSHOT + .. + + org.argeo.slc.agent.cli + SLC Agent CLI + + + + org.apache.felix + maven-bundle-plugin + + + + *, + + + + + + + \ No newline at end of file diff --git a/modules/pom.xml b/modules/pom.xml index d86bd6534..5c54f49f8 100644 --- a/modules/pom.xml +++ b/modules/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 org.argeo.slc @@ -13,6 +14,7 @@ org.argeo.slc.ext.castor org.argeo.slc.agent org.argeo.slc.agent.jcr + org.argeo.slc.agent.cli org.argeo.slc.node.jackrabbit org.argeo.slc.server.repo org.argeo.slc.server.repo.webapp diff --git a/runtime/org.argeo.slc.launcher/jaas.config b/runtime/org.argeo.slc.launcher/jaas.config index a63021f2b..2fc119839 100644 --- a/runtime/org.argeo.slc.launcher/jaas.config +++ b/runtime/org.argeo.slc.launcher/jaas.config @@ -1,3 +1,7 @@ NIX { - com.sun.security.auth.module.UnixLoginModule required debug=true; -}; \ No newline at end of file + com.sun.security.auth.module.UnixLoginModule required; +}; + +WINDOWS { + com.sun.security.auth.module.NTLoginModule required; +}; diff --git a/runtime/org.argeo.slc.launcher/log4j.properties b/runtime/org.argeo.slc.launcher/log4j.properties index 0b091606c..92553a61a 100644 --- a/runtime/org.argeo.slc.launcher/log4j.properties +++ b/runtime/org.argeo.slc.launcher/log4j.properties @@ -1,18 +1,9 @@ -#log4j.rootLogger=WARN, console -log4j.rootLogger=WARN, development +log4j.rootLogger=WARN, console +#log4j.rootLogger=DEBUG, development ## Levels -log4j.logger.org.argeo=DEBUG -log4j.logger.org.argeo.jackrabbit.remote.ExtendedDispatcherServlet=ERROR -log4j.logger.org.springframework.web.servlet.PageNotFound=ERROR -log4j.logger.org.argeo.server.webextender.TomcatDeployer=WARN +log4j.logger.org.argeo=INFO -#log4j.logger.org.apache=DEBUG -#log4j.logger.org.springframework.security=DEBUG - -log4j.logger.org.apache.coyote=INFO -log4j.logger.org.apache.catalina.core.ContainerBase=INFO -log4j.logger.org.apache.directory.server=ERROR log4j.logger.org.apache.jackrabbit.core.query.lucene=ERROR log4j.logger.org.apache.jackrabbit.core.config.ConfigurationErrorHandler=ERROR log4j.logger.org.apache.jackrabbit.core.util.db.DbUtility=FATAL @@ -21,7 +12,7 @@ log4j.logger.org.apache.jackrabbit.core.util.db.DbUtility=FATAL # default appender log4j.appender.console=org.apache.log4j.ConsoleAppender log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern=%d{yyyyMMdd HH:mm:ss} %-5p %m [%t] %c%n +log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %m%n # development appender log4j.appender.development=org.apache.log4j.ConsoleAppender diff --git a/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java b/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java index 90ca7411f..4c5c82dd1 100644 --- a/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java +++ b/runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java @@ -32,12 +32,30 @@ import javax.security.auth.login.LoginContext; import org.argeo.osgi.boot.OsgiBoot; import org.osgi.framework.BundleContext; +import org.osgi.framework.ServiceReference; import org.osgi.framework.launch.Framework; import org.osgi.framework.launch.FrameworkFactory; -import org.osgi.util.tracker.ServiceTracker; /** Configures an SLC runtime and runs a process. */ public class SlcMain implements Runnable { + public final static String NIX = "NIX"; + public final static String WINDOWS = "WINDOWS"; + public final static String SOLARIS = "SOLARIS"; + + public final static String os; + static { + String osName = System.getProperty("os.name"); + if (osName.startsWith("Win")) + os = WINDOWS; + else if (osName.startsWith("Solaris")) + os = SOLARIS; + else + os = NIX; + } + + // private final DateFormat dateFormat = new + // SimpleDateFormat("HH:mm:ss,SSS"); + private Long timeout = 30 * 1000l; private final String[] args; // private static String bundlesToInstall = "/usr/share/osgi;in=*.jar"; @@ -56,22 +74,31 @@ public class SlcMain implements Runnable { bundlesToStart.add("org.argeo.slc.node.jackrabbit"); bundlesToStart.add("org.argeo.slc.agent"); bundlesToStart.add("org.argeo.slc.agent.jcr"); + // bundlesToStart.add("org.argeo.slc.agent.cli"); } public void run() { + long begin = System.currentTimeMillis(); + // System.out.println(dateFormat.format(new Date())); + + Boolean isTransient = false; + File dataDir = null; final LoginContext lc; try { // Authenticate - lc = new LoginContext("NIX"); + lc = new LoginContext(os); lc.login(); // Prepare directories String executionDir = System.getProperty("user.dir"); - File slcDir = new File(executionDir, "target/.slc"); + File slcDir = new File(executionDir, ".slc"); File tempDir = new File(System.getProperty("java.io.tmpdir")); - File dataDir = new File(tempDir, "slc-data-" - + UUID.randomUUID().toString()); + if (isTransient) + dataDir = new File(tempDir, "slc-data-" + + UUID.randomUUID().toString()); + else + dataDir = new File(slcDir, "data"); if (!dataDir.exists()) dataDir.mkdirs(); @@ -80,8 +107,9 @@ public class SlcMain implements Runnable { confDir.mkdirs(); System.setProperty("log4j.configuration", "file:./log4j.properties"); - System.setProperty("argeo.node.repo.configuration", - "osgibundle:repository-memory.xml"); + if (isTransient) + System.setProperty("argeo.node.repo.configuration", + "osgibundle:repository-memory.xml"); // Start Equinox ServiceLoader ff = ServiceLoader @@ -91,7 +119,8 @@ public class SlcMain implements Runnable { configuration.put("osgi.configuration.area", confDir.getCanonicalPath()); configuration.put("osgi.instance.area", dataDir.getCanonicalPath()); - configuration.put("osgi.clean", "true"); + // configuration.put("osgi.clean", "true"); + // configuration.put("osgi.console", ""); // Spring configs currently require System properties System.getProperties().putAll(configuration); @@ -113,11 +142,26 @@ public class SlcMain implements Runnable { osgiBoot.startBundles(bundlesToStart); // Find SLC Agent - ServiceTracker agentTracker = new ServiceTracker(bundleContext, - "org.argeo.slc.execution.SlcAgentCli", null); - agentTracker.open(); - final Object agentCli = agentTracker.waitForService(30 * 1000); - + ServiceReference sr = null; + while (sr == null) { + sr = bundleContext + .getServiceReference("org.argeo.slc.execution.SlcAgentCli"); + if (System.currentTimeMillis() - begin > timeout) + throw new RuntimeException("Cannot find SLC agent CLI"); + Thread.sleep(100); + } + final Object agentCli = bundleContext.getService(sr); + + // ServiceTracker agentTracker = new ServiceTracker(bundleContext, + // "org.argeo.slc.execution.SlcAgentCli", null); + // agentTracker.open(); + // final Object agentCli = agentTracker.waitForService(30 * 1000); + // if (agentCli == null) + // throw new RuntimeException("Cannot find SLC agent CLI"); + + long duration = System.currentTimeMillis() - begin; + System.out.println("Initialized in " + (duration / 1000) + "s " + + (duration % 1000) + "ms"); // Run as a privileged action Subject.doAs(Subject.getSubject(AccessController.getContext()), new PrivilegedAction() { @@ -148,6 +192,11 @@ public class SlcMain implements Runnable { } catch (Exception e) { e.printStackTrace(); System.exit(1); + } finally { + if (isTransient && dataDir != null && dataDir.exists()) { + // TODO clean up transient data dir + } + } } -- 2.39.5