Reactivate launcher
authorMathieu Baudier <mbaudier@argeo.org>
Sat, 27 Oct 2012 14:11:11 +0000 (14:11 +0000)
committerMathieu Baudier <mbaudier@argeo.org>
Sat, 27 Oct 2012 14:11:11 +0000 (14:11 +0000)
git-svn-id: https://svn.argeo.org/slc/trunk@5672 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc

dep/org.argeo.slc.dep.minimal/pom.xml
runtime/org.argeo.slc.launcher/log4j.properties [new file with mode: 0644]
runtime/org.argeo.slc.launcher/pom.xml
runtime/org.argeo.slc.launcher/src/main/java/org/argeo/slc/cli/SlcMain.java
runtime/org.argeo.slc.specs/src/main/java/org/argeo/slc/execution/RealizedFlow.java
runtime/org.argeo.slc.support.osgi/pom.xml
runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java

index d80e061d93559b6e0c43aa07190cfb8c4837e72e..8b16b2060d8460f50e32566db1a81ba7b071ba94 100644 (file)
                </plugins>
        </build>
        <dependencies>
-               <!-- SLC Agent -->
                <dependency>
                        <groupId>org.argeo.slc</groupId>
-                       <artifactId>org.argeo.slc.core</artifactId>
-                       <version>1.1.4-SNAPSHOT</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.argeo.slc</groupId>
-                       <artifactId>org.argeo.slc.support.jcr</artifactId>
-                       <version>1.1.4-SNAPSHOT</version>
-               </dependency>
-               <dependency>
-                       <groupId>org.argeo.slc</groupId>
-                       <artifactId>org.argeo.slc.support.osgi</artifactId>
+                       <artifactId>org.argeo.slc.launcher</artifactId>
                        <version>1.1.4-SNAPSHOT</version>
                </dependency>
 
-               <!-- SLC Agent Modules -->
                <dependency>
                        <groupId>org.argeo.slc</groupId>
-                       <artifactId>org.argeo.slc.agent</artifactId>
+                       <artifactId>org.argeo.slc.support.jcr</artifactId>
                        <version>1.1.4-SNAPSHOT</version>
                </dependency>
                <dependency>
                        <version>${version.argeo-commons}</version>
                </dependency>
 
-               <!-- OSGi Boot (and Equinox) -->
-               <dependency>
-                       <groupId>org.argeo.commons.base</groupId>
-                       <artifactId>org.argeo.osgi.boot</artifactId>
-                       <version>${version.argeo-commons}</version>
-               </dependency>
-
-               <!-- Logging -->
-               <dependency>
-                       <groupId>org.argeo.commons.base</groupId>
-                       <artifactId>org.argeo.dep.log4j</artifactId>
-                       <version>${version.argeo-commons}</version>
-                       <type>pom</type>
-               </dependency>
-
                <!-- Argeo Security -->
                <dependency>
                        <groupId>org.argeo.commons.security</groupId>
                        <artifactId>org.argeo.security.core</artifactId>
                        <version>${version.argeo-commons}</version>
-                       <exclusions>
-                               <exclusion>
-                                       <groupId>org.argeo.tp</groupId>
-                                       <artifactId>bcprov</artifactId>
-                               </exclusion>
-                       </exclusions>
                </dependency>
 
                <!-- Xerces and Xalan -->
                        <artifactId>javax.annotation</artifactId>
                </dependency>
 
-               <!-- Spring OSGi -->
-               <dependency>
-                       <groupId>org.argeo.tp</groupId>
-                       <artifactId>org.springframework.osgi.extender</artifactId>
-               </dependency>
-
                <!-- Jackrabbit -->
                <dependency>
                        <groupId>org.argeo.commons.server</groupId>
                </dependency>
 
                <!-- DB drivers -->
-<!--           <dependency> -->
-<!--                   <groupId>org.argeo.tp</groupId> -->
-<!--                   <artifactId>org.h2</artifactId> -->
-<!--           </dependency> -->
+               <dependency>
+                       <groupId>org.argeo.tp</groupId>
+                       <artifactId>org.h2</artifactId>
+               </dependency>
        </dependencies>
        <profiles>
                <profile>
diff --git a/runtime/org.argeo.slc.launcher/log4j.properties b/runtime/org.argeo.slc.launcher/log4j.properties
new file mode 100644 (file)
index 0000000..d034a2a
--- /dev/null
@@ -0,0 +1,26 @@
+#log4j.rootLogger=WARN, console
+log4j.rootLogger=WARN, 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.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
+
+## Appenders
+# 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
+
+# development appender (slow!)
+log4j.appender.development=org.apache.log4j.ConsoleAppender
+log4j.appender.development.layout=org.apache.log4j.PatternLayout
+log4j.appender.development.layout.ConversionPattern=%d{HH:mm:ss} [%16.16t] %5p %m (%F:%L) %c%n
index 28c346bd116e689577ae5a89a2cf313261859302..8945e8f3b3412cc0bc0722bec7375d863570e554 100644 (file)
@@ -1,4 +1,6 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
                <groupId>org.argeo.slc</groupId>
 
                                <configuration>
                                        <instructions>
-                                               <Export-Package>
-                                                       org.argeo.slc.*
-                                               </Export-Package>
-                                               <Import-Package>
-                                                       org.w3c.dom;version="0.0.0",
-                                                       javax.xml.*;version="0.0.0",
-                                                       org.argeo.slc.build,
-                                                       *
-                                                </Import-Package>
                                                <Main-Class>org.argeo.slc.cli.SlcMain</Main-Class>
                                        </instructions>
                                </configuration>
                </plugins>
        </build>
        <dependencies>
+               <!-- SLC Agent -->
                <dependency>
                        <groupId>org.argeo.slc</groupId>
                        <artifactId>org.argeo.slc.core</artifactId>
                        <version>1.1.4-SNAPSHOT</version>
                </dependency>
+               <dependency>
+                       <groupId>org.argeo.slc</groupId>
+                       <artifactId>org.argeo.slc.support.osgi</artifactId>
+                       <version>1.1.4-SNAPSHOT</version>
+               </dependency>
+
+               <!-- SLC Agent Modules -->
+               <dependency>
+                       <groupId>org.argeo.slc</groupId>
+                       <artifactId>org.argeo.slc.agent</artifactId>
+                       <version>1.1.4-SNAPSHOT</version>
+               </dependency>
+
+               <!-- OSGi Boot (and Equinox) -->
                <dependency>
                        <groupId>org.argeo.commons.base</groupId>
                        <artifactId>org.argeo.osgi.boot</artifactId>
                        <version>${version.argeo-commons}</version>
                </dependency>
 
+               <!-- Logging -->
                <dependency>
-                       <groupId>org.argeo.tp</groupId>
-                       <artifactId>org.apache.commons.cli</artifactId>
+                       <groupId>org.argeo.commons.base</groupId>
+                       <artifactId>org.argeo.dep.log4j</artifactId>
+                       <version>${version.argeo-commons}</version>
+                       <type>pom</type>
                </dependency>
 
+               <!-- Spring OSGi -->
                <dependency>
                        <groupId>org.argeo.tp</groupId>
-                       <artifactId>org.eclipse.osgi</artifactId>
+                       <artifactId>org.springframework.osgi.extender</artifactId>
                </dependency>
 
                <dependency>
                        <groupId>org.argeo.tp</groupId>
-                       <artifactId>org.springframework.oxm</artifactId>
-                       <optional>true</optional>
+                       <artifactId>org.apache.commons.cli</artifactId>
                </dependency>
-
        </dependencies>
 </project>
\ No newline at end of file
index 8c63c9bb80a2578a2fa290526cf4ed8213182ccd..7a995e434a7697be02584b304e97525adf3928e7 100644 (file)
@@ -24,71 +24,79 @@ import org.apache.commons.cli.CommandLine;
 import org.apache.commons.cli.CommandLineParser;
 import org.apache.commons.cli.GnuParser;
 import org.apache.commons.cli.HelpFormatter;
-import org.apache.commons.cli.Option;
-import org.apache.commons.cli.OptionBuilder;
 import org.apache.commons.cli.Options;
 import org.apache.commons.cli.ParseException;
 import org.apache.commons.io.IOUtils;
 import org.argeo.osgi.boot.OsgiBoot;
 import org.argeo.slc.SlcException;
-import org.argeo.slc.execution.ExecutionModulesManager;
 import org.eclipse.core.runtime.adaptor.EclipseStarter;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
-import org.osgi.framework.ServiceReference;
 
-@SuppressWarnings("static-access")
+@SuppressWarnings("restriction")
 public class SlcMain {
-       public enum Type {
-               standalone, agent, server
-       }
+       /** Unique launch module */
+       public static String UNIQUE_LAUNCH_MODULE_PROPERTY = "slc.launch.module";
+
+       /** Unique launch flow */
+       public static String UNIQUE_LAUNCH_FLOW_PROPERTY = "slc.launch.flow";
+
+       // public enum Type {
+       // standalone, agent, server
+       // }
 
-       private static Boolean debug = true;
+       // private static Boolean debug = true;
 
        // private final static String BOOTSTRAP_LOG4J_CONFIG =
        // "org/argeo/slc/cli/bootstrapLog4j.properties";
        // private final static String DEFAULT_AGENT_CONTEXT =
        // "classpath:org/argeo/slc/cli/spring-agent-default.xml";
 
-       private final static Option typeOpt = OptionBuilder.withLongOpt("mode")
-                       .withArgName("mode").hasArg()
-                       .withDescription("Execution type, one of: " + listTypeValues())
-                       .create('t');
-
-       private final static Option propertyOpt = OptionBuilder
-                       .withLongOpt("property").withArgName("prop1=val1,prop2=val2")
-                       .hasArgs().withValueSeparator(',')
-                       .withDescription("use value for given property").create('p');
-
-       private final static Option propertiesOpt = OptionBuilder
-                       .withLongOpt("properties").withArgName("properties file").hasArgs()
-                       .withValueSeparator(',')
-                       .withDescription("load properties from file (-p has priority)")
-                       .create('P');
-
-       private final static Option moduleOpt = OptionBuilder.withLongOpt("module")
-                       .withArgName("module").hasArg().withDescription("Execution module")
-                       .create('m');
-
-       private final static Option flowsOpt = OptionBuilder.withLongOpt("flows")
-                       .withArgName("flows").hasArg().withDescription("Flows to execute")
-                       .create('f');
-
-       private final static Option runtimeOpt = OptionBuilder
-                       .withLongOpt("runtime").withArgName("runtime").hasArg()
-                       .withDescription("Runtime URL").create('r');
+       // private final static Option typeOpt = OptionBuilder.withLongOpt("mode")
+       // .withArgName("mode").hasArg()
+       // .withDescription("Execution type, one of: " + listTypeValues())
+       // .create('t');
+       //
+       // private final static Option propertyOpt = OptionBuilder
+       // .withLongOpt("property").withArgName("prop1=val1,prop2=val2")
+       // .hasArgs().withValueSeparator(',')
+       // .withDescription("use value for given property").create('p');
+       //
+       // private final static Option propertiesOpt = OptionBuilder
+       // .withLongOpt("properties").withArgName("properties file").hasArgs()
+       // .withValueSeparator(',')
+       // .withDescription("load properties from file (-p has priority)")
+       // .create('P');
+       //
+       // private final static Option moduleOpt =
+       // OptionBuilder.withLongOpt("module")
+       // .withArgName("module").hasArg().withDescription("Execution module")
+       // .create('m');
+       //
+       // private final static Option flowsOpt = OptionBuilder.withLongOpt("flows")
+       // .withArgName("flows").hasArg().withDescription("Flows to execute")
+       // .create('f');
+       //
+       // private final static Option runtimeOpt = OptionBuilder
+       // .withLongOpt("runtime").withArgName("runtime").hasArg()
+       // .withDescription("Runtime URL").create('r');
 
        private final static Options options;
 
        private final static String commandName = "slc";
 
-       private static String bundlesToInstall = "/usr/share/osgi;in=*.jar";
+       // private static String bundlesToInstall = "/usr/share/osgi;in=*.jar";
+       private static String bundlesToInstall = System.getProperty("user.home")
+                       + "/dev/src/slc/runtime/org.argeo.slc.launcher/target/dependency;in=*.jar";
 
+       // private static String bundlesToStart =
+       // "org.springframework.osgi.extender,"
+       // + "org.argeo.node.repofactory.jackrabbit,"
+       // + "org.argeo.node.repo.jackrabbit," + "org.argeo.security.dao.os,"
+       // + "org.argeo.slc.node.jackrabbit," + "org.argeo.slc.agent,"
+       // + "org.argeo.slc.agent.jcr";
        private static String bundlesToStart = "org.springframework.osgi.extender,"
-                       + "org.argeo.node.repofactory.jackrabbit,"
-                       + "org.argeo.node.repo.jackrabbit," + "org.argeo.security.dao.os,"
-                       + "org.argeo.slc.node.jackrabbit," + "org.argeo.slc.agent,"
-                       + "org.argeo.slc.agent.jcr";
+                       + "org.argeo.slc.agent";
 
        static {
                options = new Options();
@@ -100,6 +108,7 @@ public class SlcMain {
                // options.addOption(runtimeOpt);
        }
 
+       @SuppressWarnings({ "unchecked" })
        public static void main(String[] args) {
                // Type type = null;
                // Properties properties = new Properties();
@@ -137,14 +146,8 @@ public class SlcMain {
                                }
                        }
 
-                       // System.setProperty(
-                       // ExecutionModulesManager.UNIQUE_LAUNCH_MODULE_PROPERTY,
-                       // module);
-                       // System.setProperty(
-                       // ExecutionModulesManager.UNIQUE_LAUNCH_FLOW_PROPERTY, flow);
-
                        String executionDir = System.getProperty("user.dir");
-                       File slcDir = new File(executionDir, ".slc");
+                       File slcDir = new File(executionDir, "target/.slc");
                        File dataDir = new File(slcDir, "data");
                        if (!dataDir.exists())
                                dataDir.mkdirs();
@@ -165,7 +168,6 @@ public class SlcMain {
                        // OSGi bootstrap
                        OsgiBoot osgiBoot = new OsgiBoot(bundleContext);
                        osgiBoot.installUrls(osgiBoot.getBundlesUrls(bundlesToInstall));
-                       osgiBoot.startBundles(bundlesToStart);
 
                        if (moduleUrl != null) {
                                Bundle bundle = osgiBoot.installUrl(moduleUrl);
@@ -173,15 +175,28 @@ public class SlcMain {
                                // TODO deal with version
                        }
 
-                       // retrieve modulesManager
-                       ServiceReference sr = bundleContext
-                                       .getServiceReference(ExecutionModulesManager.class
-                                                       .getName());
-                       ExecutionModulesManager modulesManager = (ExecutionModulesManager) bundleContext
-                                       .getService(sr);
-                       
-                       
-                       modulesManager.execute(null);
+                       System.setProperty(UNIQUE_LAUNCH_MODULE_PROPERTY, module);
+                       System.setProperty(UNIQUE_LAUNCH_FLOW_PROPERTY, flow);
+                       System.setProperty("log4j.configuration", "file:./log4j.properties");
+
+                       // start runtime
+                       osgiBoot.startBundles(bundlesToStart);
+
+                       // Bundle bundle = (Bundle) osgiBoot.getBundlesBySymbolicName().get(
+                       // "org.argeo.slc.specs");
+                       // bundle.loadClass(Execu)
+                       //
+                       // // retrieve modulesManager
+                       // BundlesManager bundlesManager = new
+                       // BundlesManager(bundleContext);
+                       // ExecutionModulesManager modulesManager = bundlesManager
+                       // .getSingleService(ExecutionModulesManager.class, null, true);
+                       //
+                       // RealizedFlow realizedFlow = RealizedFlow.create(module, null,
+                       // flow,
+                       // null);
+                       // modulesManager.start(new BasicNameVersion(module, "0.0.0"));
+                       // modulesManager.execute(realizedFlow);
 
                        // osgiBoot.bootstrap();
                        // osgiBoot.bootstrap();
@@ -266,15 +281,15 @@ public class SlcMain {
                new HelpFormatter().printHelp(commandName, options, true);
        }
 
-       private static String listTypeValues() {
-               StringBuffer buf = new StringBuffer("");
-               for (Type mode : Type.values()) {
-                       buf.append(mode).append(", ");
-               }
-               String str = buf.toString();
-               // unsafe, but there will be at least one value in the enum
-               return str.substring(0, str.length() - 2);
-       }
+       // private static String listTypeValues() {
+       // StringBuffer buf = new StringBuffer("");
+       // for (Type mode : Type.values()) {
+       // buf.append(mode).append(", ");
+       // }
+       // String str = buf.toString();
+       // // unsafe, but there will be at least one value in the enum
+       // return str.substring(0, str.length() - 2);
+       // }
 
        protected static void addProperty(Properties properties, String property) {
                int eqIndex = property.indexOf('=');
index a2e33fa882dfe29a6d8b50aaf77927e727a3c445..5928e1732e9682f1baac0834449ca329c0698b3f 100644 (file)
@@ -16,6 +16,8 @@
 package org.argeo.slc.execution;
 
 import java.io.Serializable;
+import java.util.HashMap;
+import java.util.Map;
 
 import org.argeo.slc.BasicNameVersion;
 import org.argeo.slc.NameVersion;
@@ -55,4 +57,30 @@ public class RealizedFlow implements Serializable {
        public void setFlowDescriptor(ExecutionFlowDescriptor flowDescriptor) {
                this.flowDescriptor = flowDescriptor;
        }
+
+       /** Create a simple realized flow */
+       public static RealizedFlow create(String module, String version,
+                       String flowName, Map<String, String> args) {
+               final RealizedFlow realizedFlow = new RealizedFlow();
+               realizedFlow.setModuleName(module);
+               // TODO deal with version
+               if (version == null)
+                       version = "0.0.0";
+               realizedFlow.setModuleVersion(version);
+               ExecutionFlowDescriptor efd = new ExecutionFlowDescriptor();
+               efd.setName(flowName);
+
+               // arguments
+               if (args != null && args.size() > 0) {
+                       Map<String, Object> values = new HashMap<String, Object>();
+                       for (String key : args.keySet()) {
+                               String value = args.get(key);
+                               values.put(key, value);
+                       }
+                       efd.setValues(values);
+               }
+
+               realizedFlow.setFlowDescriptor(efd);
+               return realizedFlow;
+       }
 }
index abdf10772fe483e41610c6b158d678c6a8ffb8c1..c0c40e1dcfe7db5e52fdfaefe8d5dbbe6468e77d 100644 (file)
                        <artifactId>org.springframework.osgi.extender</artifactId>
                </dependency>
 
-               <dependency>
-                       <groupId>org.argeo.tp</groupId>
-                       <artifactId>org.springframework.osgi.web</artifactId>
-               </dependency>
-
                <dependency>
                        <groupId>org.argeo.tp</groupId>
                        <artifactId>net.sf.cglib</artifactId>
 
                <!-- Xalan and Xerces are implicitly required since the JDK provided implementations 
                        are overridden in the execution modules manager -->
-               <dependency>
-                       <groupId>org.argeo.tp</groupId>
-                       <artifactId>org.apache.xalan</artifactId>
-               </dependency>
+<!--           <dependency> -->
+<!--                   <groupId>org.argeo.tp</groupId> -->
+<!--                   <artifactId>org.apache.xalan</artifactId> -->
+<!--           </dependency> -->
 
        </dependencies>
 </project>
\ No newline at end of file
index 6be2294a453605d3f8e06861e164c001458c5307..0ddfe71a5a643c1c473942d7b50f325c0a29c455 100644 (file)
@@ -55,6 +55,13 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
        private final Object refreshedPackageSem = new Object();
        private Boolean packagesRefreshed = false;
 
+       public BundlesManager() {
+       }
+
+       public BundlesManager(BundleContext bundleContext) {
+               this.bundleContext = bundleContext;
+       }
+
        /**
         * Stop the module, update it, refresh it and restart it. All synchronously.
         */
@@ -282,7 +289,8 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
        @SuppressWarnings(value = { "unchecked" })
        public <T> T getSingleService(Class<T> clss, String filter,
                        Boolean synchronous) {
-               Assert.isTrue(OsgiFilterUtils.isValidFilter(filter), "valid filter");
+               if (filter != null)
+                       Assert.isTrue(OsgiFilterUtils.isValidFilter(filter), "valid filter");
                ServiceReference[] sfs;
                try {
                        if (synchronous)