From d79f9ae2d1a5f459e7ba5c1dc0264e2957c70a93 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Tue, 12 Mar 2013 22:50:11 +0000 Subject: [PATCH] SLC CLI git-svn-id: https://svn.argeo.org/slc/trunk@6122 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- dep/org.argeo.slc.dep.backend/pom.xml | 11 +- dep/org.argeo.slc.dep.minimal/pom.xml | 10 +- dist/slc/pom.xml | 120 +++++++- dist/slc/src/assembly/devel.xml | 2 +- dist/slc/src/assembly/dist.xml | 61 ++-- .../slc}/src/main/base/bin/slc | 19 +- .../src/main/base/work/server/conf/config.ini | 7 - dist/slc/src/main/rpm/etc/slc-cl/config.ini | 6 - dist/slc/src/main/rpm/usr/bin/slc | 38 +-- .../META-INF/spring/helloworld.xml | 25 ++ .../main/java/org/argeo/slc/cli/SlcMain.java | 279 ++++++++++++------ .../argeo/slc/cli/bootstrapLog4j.properties | 13 - .../resources/org/argeo/slc/cli/jaas.config | 7 + .../org/argeo/slc/cli/log4j.properties | 20 ++ .../resources/org/argeo/slc/cli/spring.xml | 47 --- .../org/argeo/slc/server/client/spring.xml | 38 --- .../{manager.xml => commandProvider.xml} | 32 +- .../META-INF/spring/osgi.xml | 4 + .../slc/equinox/ExecutionCommandProvider.java | 83 ++---- runtime/org.argeo.slc.unit/pom.xml | 7 - 20 files changed, 472 insertions(+), 357 deletions(-) rename {runtime/org.argeo.slc.launcher => dist/slc}/src/main/base/bin/slc (56%) delete mode 100644 dist/slc/src/main/base/work/server/conf/config.ini create mode 100644 lib/org.argeo.slc.lib.repo/META-INF/spring/helloworld.xml delete mode 100644 runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/bootstrapLog4j.properties create mode 100644 runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/jaas.config create mode 100644 runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/log4j.properties delete mode 100644 runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/spring.xml delete mode 100644 runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/server/client/spring.xml rename runtime/org.argeo.slc.support.equinox/META-INF/spring/{manager.xml => commandProvider.xml} (57%) diff --git a/dep/org.argeo.slc.dep.backend/pom.xml b/dep/org.argeo.slc.dep.backend/pom.xml index 410031fa9..f2b4fc2dd 100644 --- a/dep/org.argeo.slc.dep.backend/pom.xml +++ b/dep/org.argeo.slc.dep.backend/pom.xml @@ -96,16 +96,7 @@ org.argeo.slc.server.repo.webapp 1.1.12-SNAPSHOT - - - - org.argeo.slc - org.argeo.slc.launcher - 1.1.12-SNAPSHOT - tar.gz - base - - + org.argeo.commons.security diff --git a/dep/org.argeo.slc.dep.minimal/pom.xml b/dep/org.argeo.slc.dep.minimal/pom.xml index 475f5c45c..37118dbd6 100644 --- a/dep/org.argeo.slc.dep.minimal/pom.xml +++ b/dep/org.argeo.slc.dep.minimal/pom.xml @@ -74,11 +74,11 @@ - - org.argeo.slc - org.argeo.slc.launcher - 1.1.12-SNAPSHOT - + + + + + org.argeo.slc org.argeo.slc.agent.cli diff --git a/dist/slc/pom.xml b/dist/slc/pom.xml index 426478352..aeed0b24c 100644 --- a/dist/slc/pom.xml +++ b/dist/slc/pom.xml @@ -1,4 +1,5 @@ - + 4.0.0 org.argeo.slc @@ -7,12 +8,112 @@ slc pom - SLC Node (RPM) + SLC Distribution + + dist + + + + + + + + + + + + + + + + + + + + + + org.apache.maven.plugins + maven-assembly-plugin + + argeo-slc-${project.version} + false + + src/assembly/dist.xml + + + + + assembly-base + package + + single + + + + + + + + + + org.argeo.slc + org.argeo.slc.dep.backend + 1.1.12-SNAPSHOT + pom + + + + + org.argeo.slc + org.argeo.slc.lib.jcr + 1.1.12-SNAPSHOT + + + org.argeo.slc + org.argeo.slc.lib.repo + 1.1.12-SNAPSHOT + + + + + org.argeo.slc + org.argeo.slc.launcher + 1.1.12-SNAPSHOT + + + + + rpmbuild + + org.apache.maven.plugins + maven-dependency-plugin + + + copy-dependencies-rpm + package + + copy + + + jar + true + ${project.build.directory}/boot + + + org.argeo.slc + org.argeo.slc.launcher + ${project.version} + + + + + + org.codehaus.mojo rpm-maven-plugin @@ -75,6 +176,21 @@ + + /usr/share/osgi/boot + root + root + 644 + false + + + ${project.build.directory}/boot + + org.argeo.slc.launcher.jar + + + + /var/lib/slc/.m2 diff --git a/dist/slc/src/assembly/devel.xml b/dist/slc/src/assembly/devel.xml index ffbc98fed..6164817cb 100644 --- a/dist/slc/src/assembly/devel.xml +++ b/dist/slc/src/assembly/devel.xml @@ -20,7 +20,7 @@ xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd"> devel - slc + argeo-slc-${project.version} zip diff --git a/dist/slc/src/assembly/dist.xml b/dist/slc/src/assembly/dist.xml index 4fdab1ad1..c101a9d6f 100644 --- a/dist/slc/src/assembly/dist.xml +++ b/dist/slc/src/assembly/dist.xml @@ -1,54 +1,59 @@ - + dist - slc + argeo-slc-${project.version} - zip + tar.gz - target/base - + src/main/base/bin + bin + 0755 - ** + slc false - ${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension} - - lib + ${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension} + modules *:jar + + org.argeo.tp:org.eclipse.osgi + org.argeo.commons.base:org.argeo.osgi.boot + org.argeo.slc:org.argeo.slc.launcher + - true + false + ${artifact.artifactId}-${artifact.baseVersion}.${artifact.extension} + boot - org.argeo.slc.runtime:org.argeo.slc.launcher:tar.gz:base - + org.argeo.tp:org.eclipse.osgi + org.argeo.commons.base:org.argeo.osgi.boot + org.argeo.slc:org.argeo.slc.launcher + + + + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.launcher/src/main/base/bin/slc b/dist/slc/src/main/base/bin/slc similarity index 56% rename from runtime/org.argeo.slc.launcher/src/main/base/bin/slc rename to dist/slc/src/main/base/bin/slc index ca8ef49d9..b85869d8a 100755 --- a/runtime/org.argeo.slc.launcher/src/main/base/bin/slc +++ b/dist/slc/src/main/base/bin/slc @@ -1,5 +1,13 @@ #!/bin/sh +JAVA_CMD=java +JAVA_OPTS="-client -Xmx128m" + +SLC_HOME_DIR=${HOME}/.slc/ +if [ -f $SLC_HOME_DIR/settings.sh ];then + . $SLC_HOME_DIR/settings.sh +fi + # Find home if [ -z "$ARGEO_SLC_HOME" -o ! -d "$ARGEO_SLC_HOME" ] ; then ## resolve links - $0 may be a link to home @@ -23,13 +31,14 @@ if [ -z "$ARGEO_SLC_HOME" -o ! -d "$ARGEO_SLC_HOME" ] ; then ARGEO_SLC_HOME=`cd "$ARGEO_SLC_HOME" && pwd` fi -echo ARGEO_SLC_HOME=$ARGEO_SLC_HOME - -for i in "${ARGEO_SLC_HOME}"/lib/*.jar +for i in "${ARGEO_SLC_HOME}"/boot/*.jar do CLASSPATH="$CLASSPATH:$i" done -#echo CLASSPATH=$CLASSPATH +ARGEO_OSGI_BUNDLES="$SLC_HOME_DIR/modules;in=**;ex=**/.git/**;ex=**/.svn/**,$ARGEO_SLC_HOME/modules;in=**;ex=**/.git/**;ex=**/.svn/**" -java -cp $CLASSPATH org.argeo.slc.cli.SlcMain "$@" +$JAVA_CMD $JAVA_OPTS \ + "-Dargeo.osgi.bundles=$ARGEO_OSGI_BUNDLES" \ + -cp "$CLASSPATH" \ + org.argeo.slc.cli.SlcMain "$@" \ No newline at end of file diff --git a/dist/slc/src/main/base/work/server/conf/config.ini b/dist/slc/src/main/base/work/server/conf/config.ini deleted file mode 100644 index 30d4ab286..000000000 --- a/dist/slc/src/main/base/work/server/conf/config.ini +++ /dev/null @@ -1,7 +0,0 @@ -osgi.bundles=org.argeo.osgi.boot-${version.argeo-commons}.jar@start -argeo.osgi.bundles=${osgi.install.area};in=*.jar -argeo.osgi.start=org.springframework.osgi.extender,\ - org.argeo.server.ads.server,\ - org.argeo.slc.server.hsqldb,\ - org.argeo.slc.server.main,\ - org.argeo.slc.ria diff --git a/dist/slc/src/main/rpm/etc/slc-cl/config.ini b/dist/slc/src/main/rpm/etc/slc-cl/config.ini index 37bd5af31..8da7f7d8d 100644 --- a/dist/slc/src/main/rpm/etc/slc-cl/config.ini +++ b/dist/slc/src/main/rpm/etc/slc-cl/config.ini @@ -7,13 +7,7 @@ org.argeo.slc.node.jackrabbit,\ org.argeo.slc.agent,\ org.argeo.slc.agent.jcr -argeo.node.repo.configuration=osgibundle:repository-memory.xml - -## LOGGING -log4j.configuration=file:/etc/slc-cl/log4j.properties - # DO NOT CHANGE BELOW UNLESS YOU KNOW WHAT YOU ARE DOING -osgi.bundles=org.argeo.osgi.boot.jar@start argeo.osgi.bundles=\ ${user.home}/.slc/modules;in=**;ex=**/.git/**;ex=**/.svn/**,\ diff --git a/dist/slc/src/main/rpm/usr/bin/slc b/dist/slc/src/main/rpm/usr/bin/slc index 6dd87d33b..9487c6377 100644 --- a/dist/slc/src/main/rpm/usr/bin/slc +++ b/dist/slc/src/main/rpm/usr/bin/slc @@ -1,30 +1,22 @@ #!/bin/sh -OSGI_INSTALL_AREA=/usr/share/osgi/boot -OSGI_FRAMEWORK=$OSGI_INSTALL_AREA/org.eclipse.osgi.jar - -CL_DIR=~/.slc/cl -DATA_DIR=$CL_DIR/data -CONF_DIR=$CL_DIR/conf - -MODULE=$1 -FLOW=$2 +JAVA_CMD=/usr/lib/jvm/java-1.6.0/bin/java +JAVA_OPTS="-client -Xmx256m" -if [ ! -f $CONF_DIR/config.ini ]; -then - mkdir -p $CONF_DIR - cp /etc/slc-cl/config.ini $CONF_DIR +SLC_HOME_DIR=${HOME}/.slc/ +if [ -f $SLC_HOME_DIR/settings.sh ];then + . $SLC_HOME_DIR/settings.sh fi -# WORKAROUND: Clean up workspace directories -rmdir $DATA_DIR/node/workspaces/* +OSGI_INSTALL_AREA=/usr/share/osgi/boot +OSGI_FRAMEWORK=$OSGI_INSTALL_AREA/org.eclipse.osgi.jar +OSGI_BOOT=$OSGI_INSTALL_AREA/org.argeo.osgi.boot.jar +SLC_LAUNCHER=$OSGI_INSTALL_AREA/org.argeo.slc.launcher.jar + +ARGEO_OSGI_BUNDLES="$SLC_HOME_DIR/modules;in=**;ex=**/.git/**;ex=**/.svn/**,/etc/slc-cl/modules;in=**;ex=**/.git/**;ex=**/.svn/**,/usr/share/osgi;in=*.jar" -java \ - -Dslc.launch.module="$MODULE" \ - -Dslc.launch.flow="$FLOW" \ - -jar $OSGI_FRAMEWORK \ - -configuration $CONF_DIR \ - -data $DATA_DIR \ - -console \ - -clean +$JAVA_CMD $JAVA_OPTS \ + "-Dargeo.osgi.bundle=$ARGEO_OSGI_BUNDLES" \ + -cp $OSGI_FRAMEWORK:$OSGI_BOOT \ + -jar $SLC_LAUNCHER "$@" \ No newline at end of file diff --git a/lib/org.argeo.slc.lib.repo/META-INF/spring/helloworld.xml b/lib/org.argeo.slc.lib.repo/META-INF/spring/helloworld.xml new file mode 100644 index 000000000..8e04d7ed0 --- /dev/null +++ b/lib/org.argeo.slc.lib.repo/META-INF/spring/helloworld.xml @@ -0,0 +1,25 @@ + + + + + + Print Hello World! + + + + + + Print Hello World! with variable + + + + + + + + + \ No newline at end of file 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 4c5c82dd1..606748279 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 @@ -16,11 +16,13 @@ package org.argeo.slc.cli; import java.io.File; +import java.io.FileOutputStream; +import java.io.InputStream; import java.lang.reflect.Method; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; -import java.util.Arrays; +import java.util.Date; import java.util.HashMap; import java.util.List; import java.util.Map; @@ -37,12 +39,13 @@ import org.osgi.framework.launch.Framework; import org.osgi.framework.launch.FrameworkFactory; /** Configures an SLC runtime and runs a process. */ -public class SlcMain implements Runnable { +public class SlcMain implements PrivilegedAction { public final static String NIX = "NIX"; public final static String WINDOWS = "WINDOWS"; public final static String SOLARIS = "SOLARIS"; public final static String os; + public final static String slcDirName = ".slc"; static { String osName = System.getProperty("os.name"); if (osName.startsWith("Win")) @@ -53,63 +56,36 @@ public class SlcMain implements Runnable { 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"; - private String bundlesToInstall = System.getProperty("user.home") - + "/dev/src/slc/dep/org.argeo.slc.dep.minimal/target/dependency;in=*.jar," - + System.getProperty("user.home") - + "/dev/src/slc/demo/modules;in=*;ex=pom.xml;ex=.svn"; + private final File confDir; + private final File dataDir; + private final File modulesDir; private final List bundlesToStart = new ArrayList(); - public SlcMain(String[] args) { + public SlcMain(String[] args, File confDir, File dataDir, File modulesDir) { this.args = args; + this.confDir = confDir; + this.dataDir = dataDir; + this.modulesDir = modulesDir; bundlesToStart.add("org.springframework.osgi.extender"); bundlesToStart.add("org.argeo.node.repo.jackrabbit"); bundlesToStart.add("org.argeo.security.dao.os"); bundlesToStart.add("org.argeo.slc.node.jackrabbit"); bundlesToStart.add("org.argeo.slc.agent"); bundlesToStart.add("org.argeo.slc.agent.jcr"); + if (args.length == 0) + bundlesToStart.add("org.argeo.slc.support.equinox"); // bundlesToStart.add("org.argeo.slc.agent.cli"); } - public void run() { + public String 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(os); - lc.login(); - - // Prepare directories - String executionDir = System.getProperty("user.dir"); - File slcDir = new File(executionDir, ".slc"); - File tempDir = new File(System.getProperty("java.io.tmpdir")); - - if (isTransient) - dataDir = new File(tempDir, "slc-data-" - + UUID.randomUUID().toString()); - else - dataDir = new File(slcDir, "data"); - if (!dataDir.exists()) - dataDir.mkdirs(); - - File confDir = new File(slcDir, "conf"); - if (!confDir.exists()) - confDir.mkdirs(); - - System.setProperty("log4j.configuration", "file:./log4j.properties"); - if (isTransient) - System.setProperty("argeo.node.repo.configuration", - "osgibundle:repository-memory.xml"); + info("## Date : " + new Date()); + info("## Data : " + dataDir.getCanonicalPath()); // Start Equinox ServiceLoader ff = ServiceLoader @@ -119,8 +95,10 @@ 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.console", ""); + if (args.length == 0) { + // configuration.put("osgi.clean", "true"); + configuration.put("osgi.console", ""); + } // Spring configs currently require System properties System.getProperties().putAll(configuration); @@ -128,15 +106,22 @@ public class SlcMain implements Runnable { Framework framework = frameworkFactory.newFramework(configuration); framework.start(); BundleContext bundleContext = framework.getBundleContext(); - // String[] osgiRuntimeArgs = { "-configuration", - // confDir.getCanonicalPath(), "-data", - // dataDir.getCanonicalPath(), "-clean" }; - // BundleContext bundleContext = EclipseStarter.startup( - // osgiRuntimeArgs, null); // OSGi bootstrap OsgiBoot osgiBoot = new OsgiBoot(bundleContext); - osgiBoot.installUrls(osgiBoot.getBundlesUrls(bundlesToInstall)); + + // working copy modules + if (modulesDir.exists()) + osgiBoot.installUrls(osgiBoot.getBundlesUrls(modulesDir + .getCanonicalPath() + ";in=*;ex=.gitignore")); + + // system modules + if (System.getProperty(OsgiBoot.PROP_ARGEO_OSGI_BUNDLES) != null) + osgiBoot.installUrls(osgiBoot.getBundlesUrls(System + .getProperty(OsgiBoot.PROP_ARGEO_OSGI_BUNDLES))); + else + osgiBoot.installUrls(osgiBoot.getBundlesUrls(System + .getProperty("user.home") + "/.slc/modules/**")); // Start runtime osgiBoot.startBundles(bundlesToStart); @@ -150,66 +135,186 @@ public class SlcMain implements Runnable { 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"); + Object agentCli = bundleContext.getService(sr); + // Initialization completed 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() { - - public String run() { - try { - Class[] parameterTypes = { String[].class }; - Method method = agentCli.getClass().getMethod( - "process", parameterTypes); - Object[] methodArgs = { args }; - Object ret = method - .invoke(agentCli, methodArgs); - return ret.toString(); - } catch (Exception e) { - throw new RuntimeException("Cannot run " - + Arrays.toString(args) + " on " - + agentCli, e); - } - } - - }); + info("[[ Initialized in " + (duration / 1000) + "s " + + (duration % 1000) + "ms ]]"); + + if (args.length == 0) + return null;// console mode + + // Subject.doAs(Subject.getSubject(AccessController.getContext()), + // new AgentCliCall(agentCli)); + Class[] parameterTypes = { String[].class }; + Method method = agentCli.getClass().getMethod("process", + parameterTypes); + Object[] methodArgs = { args }; + Object ret = method.invoke(agentCli, methodArgs); // Shutdown OSGi runtime framework.stop(); framework.waitForStop(60 * 1000); - System.exit(0); + return ret.toString(); + } catch (Exception e) { + throw new RuntimeException("Cannot run SLC command line", e); + } + } + + public static void main(String[] args) { + try { + // Prepare directories + File executionDir = new File(System.getProperty("user.dir")); + File slcDir; + Boolean isTransient = false; + if (isTransient) { + File tempDir = new File(System.getProperty("java.io.tmpdir") + + "/" + System.getProperty("user.name")); + slcDir = new File(tempDir, "slc-" + + UUID.randomUUID().toString()); + slcDir.mkdirs(); + System.setProperty("argeo.node.repo.configuration", + "osgibundle:repository-memory.xml"); + } else { + slcDir = findSlcDir(executionDir); + if (slcDir == null) { + slcDir = new File(executionDir, slcDirName); + slcDir.mkdirs(); + } + } + + File dataDir = new File(slcDir, "data"); + if (!dataDir.exists()) + dataDir.mkdirs(); + + File confDir = new File(slcDir, "conf"); + if (!confDir.exists()) + confDir.mkdirs(); + + File modulesDir = new File(slcDir, "modules"); + + // JAAS + File jaasFile = new File(confDir, "jaas.config"); + if (!jaasFile.exists()) + copyResource("/org/argeo/slc/cli/jaas.config", jaasFile); + System.setProperty("java.security.auth.login.config", + jaasFile.getCanonicalPath()); + + // log4j + File log4jFile = new File(confDir, "log4j.properties"); + if (!log4jFile.exists()) + copyResource("/org/argeo/slc/cli/log4j.properties", log4jFile); + System.setProperty("log4j.configuration", + "file://" + log4jFile.getCanonicalPath()); + // Run as a privileged action + LoginContext lc = new LoginContext(os); + lc.login(); + + Subject subject = Subject.getSubject(AccessController.getContext()); + Subject.doAs(subject, new SlcMain(args, confDir, dataDir, + modulesDir)); + + if (args.length != 0) + System.exit(0); } catch (Exception e) { e.printStackTrace(); System.exit(1); + } + } + + /** + * Recursively look in parent directories for a directory named + * {@link #slcDirName} + */ + protected static File findSlcDir(File currentDir) { + File slcDir = new File(currentDir, slcDirName); + if (slcDir.exists() && slcDir.isDirectory()) + return slcDir; + File parentDir = currentDir.getParentFile(); + if (parentDir == null) + return null; + return findSlcDir(parentDir); + } + + protected static void copyResource(String resource, File targetFile) { + InputStream input = null; + FileOutputStream output = null; + try { + input = SlcMain.class.getResourceAsStream(resource); + output = new FileOutputStream(targetFile); + byte[] buf = new byte[8192]; + while (true) { + int length = input.read(buf); + if (length < 0) + break; + output.write(buf, 0, length); + } + } catch (Exception e) { + throw new RuntimeException("Cannot write " + resource + " file to " + + targetFile, e); } finally { - if (isTransient && dataDir != null && dataDir.exists()) { - // TODO clean up transient data dir + try { + input.close(); + } catch (Exception ignore) { + } + try { + output.close(); + } catch (Exception ignore) { } - } - } - public static void main(String[] args) { - new SlcMain(args).run(); } protected static void info(Object msg) { System.out.println(msg); } + protected static void err(Object msg) { + System.err.println(msg); + } + protected static void debug(Object msg) { System.out.println(msg); } } + +// private String bundlesToInstall = System.getProperty("user.home") +// + +// "/dev/src/slc/dep/org.argeo.slc.dep.minimal/target/dependency;in=*.jar," +// + System.getProperty("user.home") +// + "/dev/src/slc/demo/modules;in=*;ex=pom.xml;ex=.svn"; + +// 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"); + +// protected class AgentCliCall implements PrivilegedAction { +// private final Object agentCli; +// +// public AgentCliCall(Object agentCli) { +// super(); +// this.agentCli = agentCli; +// } +// +// public String run() { +// try { +// Class[] parameterTypes = { String[].class }; +// Method method = agentCli.getClass().getMethod("process", +// parameterTypes); +// Object[] methodArgs = { args }; +// Object ret = method.invoke(agentCli, methodArgs); +// return ret.toString(); +// } catch (Exception e) { +// throw new RuntimeException("Cannot run " +// + Arrays.toString(args) + " on " + agentCli, e); +// } +// } +// +// } + diff --git a/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/bootstrapLog4j.properties b/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/bootstrapLog4j.properties deleted file mode 100644 index 7dcc3fd59..000000000 --- a/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/bootstrapLog4j.properties +++ /dev/null @@ -1,13 +0,0 @@ -log4j.rootLogger=WARN, console - -## Levels -log4j.logger.org.argeo=INFO - -## Appenders -# console is set to be a ConsoleAppender. -log4j.appender.console=org.apache.log4j.ConsoleAppender - -# console uses PatternLayout. -log4j.appender.console.layout=org.apache.log4j.PatternLayout -log4j.appender.console.layout.ConversionPattern= %-5p %d{ISO8601} %m - %c%n - diff --git a/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/jaas.config b/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/jaas.config new file mode 100644 index 000000000..2fc119839 --- /dev/null +++ b/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/jaas.config @@ -0,0 +1,7 @@ +NIX { + com.sun.security.auth.module.UnixLoginModule required; +}; + +WINDOWS { + com.sun.security.auth.module.NTLoginModule required; +}; diff --git a/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/log4j.properties b/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/log4j.properties new file mode 100644 index 000000000..6770d0ad6 --- /dev/null +++ b/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/log4j.properties @@ -0,0 +1,20 @@ +log4j.rootLogger=WARN, console +#log4j.rootLogger=DEBUG, development + +## Levels +log4j.logger.org.argeo=INFO + +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 + +## Appenders +# default appender +log4j.appender.console=org.apache.log4j.ConsoleAppender +log4j.appender.console.layout=org.apache.log4j.PatternLayout +log4j.appender.console.layout.ConversionPattern=%d{HH:mm:ss,SSS} %m%n + +# development appender +log4j.appender.development=org.apache.log4j.ConsoleAppender +log4j.appender.development.layout=org.apache.log4j.PatternLayout +log4j.appender.development.layout.ConversionPattern=%d{HH:mm:ss,SSS} %5p %m [%16.16t] %c%n diff --git a/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/spring.xml b/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/spring.xml deleted file mode 100644 index ad778222a..000000000 --- a/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/cli/spring.xml +++ /dev/null @@ -1,47 +0,0 @@ - - - - - - - - - - tcp://localhost:61616 - - - - - - - - - - - - - - \ No newline at end of file diff --git a/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/server/client/spring.xml b/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/server/client/spring.xml deleted file mode 100644 index f13d11864..000000000 --- a/runtime/org.argeo.slc.launcher/src/main/resources/org/argeo/slc/server/client/spring.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.equinox/META-INF/spring/manager.xml b/runtime/org.argeo.slc.support.equinox/META-INF/spring/commandProvider.xml similarity index 57% rename from runtime/org.argeo.slc.support.equinox/META-INF/spring/manager.xml rename to runtime/org.argeo.slc.support.equinox/META-INF/spring/commandProvider.xml index ecd64eb04..92b5e0ee0 100644 --- a/runtime/org.argeo.slc.support.equinox/META-INF/spring/manager.xml +++ b/runtime/org.argeo.slc.support.equinox/META-INF/spring/commandProvider.xml @@ -16,26 +16,26 @@ http://www.springframework.org/schema/lang http://www.springframework.org/schema/lang/spring-lang-2.5.xsd http://www.springframework.org/schema/aop http://www.springframework.org/schema/aop/spring-aop-2.5.xsd"> - - - - - osgibundle:equinox.properties - - + + + + + + + + - + - - - + + + - - - - + + + + \ No newline at end of file diff --git a/runtime/org.argeo.slc.support.equinox/META-INF/spring/osgi.xml b/runtime/org.argeo.slc.support.equinox/META-INF/spring/osgi.xml index 08d00045a..cb7f0ae4b 100644 --- a/runtime/org.argeo.slc.support.equinox/META-INF/spring/osgi.xml +++ b/runtime/org.argeo.slc.support.equinox/META-INF/spring/osgi.xml @@ -14,6 +14,10 @@ http://www.springframework.org/schema/osgi/spring-osgi-1.1.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.5.xsd"> + + + + diff --git a/runtime/org.argeo.slc.support.equinox/src/main/java/org/argeo/slc/equinox/ExecutionCommandProvider.java b/runtime/org.argeo.slc.support.equinox/src/main/java/org/argeo/slc/equinox/ExecutionCommandProvider.java index 25de1868d..94ccf2649 100644 --- a/runtime/org.argeo.slc.support.equinox/src/main/java/org/argeo/slc/equinox/ExecutionCommandProvider.java +++ b/runtime/org.argeo.slc.support.equinox/src/main/java/org/argeo/slc/equinox/ExecutionCommandProvider.java @@ -15,87 +15,46 @@ */ package org.argeo.slc.equinox; -import org.apache.commons.logging.Log; -import org.apache.commons.logging.LogFactory; +import java.util.ArrayList; +import java.util.List; + import org.argeo.slc.SlcException; -import org.argeo.slc.execution.RealizedFlow; -import org.argeo.slc.osgi.OsgiExecutionModulesManager; +import org.argeo.slc.execution.SlcAgentCli; import org.eclipse.osgi.framework.console.CommandInterpreter; import org.eclipse.osgi.framework.console.CommandProvider; public class ExecutionCommandProvider implements CommandProvider { - private final static Log log = LogFactory - .getLog(ExecutionCommandProvider.class); - - private final static String SLC_WITH_REFRESH = "slc"; - private final static String SLC_NO_REFRESH = "slcnr"; - - private OsgiExecutionModulesManager modulesManager; + private SlcAgentCli agentCli; - private RealizedFlow lastLaunch = null; + private String lastProcessUuid; public Object _slc(CommandInterpreter ci) { - return exec(SLC_WITH_REFRESH, ci); - } - - public Object _slcnr(CommandInterpreter ci) { - return exec(SLC_NO_REFRESH, ci); - } - - protected Object exec(String slcCommand, CommandInterpreter ci) { - // TODO: check version - String firstArg = ci.nextArgument(); - if (firstArg == null) { - if (lastLaunch != null) { - String cmd = slcCommand + " " + lastLaunch.getModuleName() - + " " + lastLaunch.getFlowDescriptor().getName(); - if (log.isDebugEnabled()) - log.debug("Execute again last command: " + cmd); - return ci.execute(cmd); - } else { - ci.execute("help"); - throw new SlcException("Command not properly formatted"); - } + List args = new ArrayList(); + String arg = null; + while ((arg = ci.nextArgument()) != null) + args.add(arg); + if (args.size() == 0) { + // TODO relaunch last process + ci.execute("help"); + throw new SlcException("Command not properly formatted"); } - String executionName = ci.nextArgument(); - - - launch(slcCommand, firstArg, executionName); - return "COMMAND COMPLETED"; - } - - protected void launch(String slcCommand, String firstArg, - String executionName) { - lastLaunch = modulesManager.findRealizedFlow(firstArg, executionName); - if (lastLaunch == null) - throw new SlcException("Cannot find launch for " + firstArg + " " - + executionName); - // Execute - if (SLC_WITH_REFRESH.equals(slcCommand)) { - modulesManager.upgrade(lastLaunch.getModuleNameVersion()); - modulesManager.execute(lastLaunch); - } else if (SLC_NO_REFRESH.equals(slcCommand)) - modulesManager.execute(lastLaunch); - else - throw new SlcException("Unrecognized SLC command " + slcCommand); + lastProcessUuid = agentCli + .process(args.toArray(new String[args.size()])); + return lastProcessUuid; } public String getHelp() { StringBuffer buf = new StringBuffer(); buf.append("---SLC Execution Commands---\n"); - buf - .append("\tslc (|) " - + " - refresh the bundle, execute an execution flow (without arg, execute last)\n"); - buf - .append("\tslcnr (|) " - + " - execute an execution flow (without arg, execute last)\n"); + buf.append("\tslc [[ --arg value | --booleanArg ]]" + + " - executes an execution flow\n"); return buf.toString(); } - public void setModulesManager(OsgiExecutionModulesManager osgiModulesManager) { - this.modulesManager = osgiModulesManager; + public void setAgentCli(SlcAgentCli agentCli) { + this.agentCli = agentCli; } } diff --git a/runtime/org.argeo.slc.unit/pom.xml b/runtime/org.argeo.slc.unit/pom.xml index 08710b804..5bc7c0ae4 100644 --- a/runtime/org.argeo.slc.unit/pom.xml +++ b/runtime/org.argeo.slc.unit/pom.xml @@ -83,13 +83,6 @@ org.springframework.osgi.core - - - org.argeo.slc - org.argeo.slc.launcher - 1.1.12-SNAPSHOT - - org.argeo.tp -- 2.39.2