From 1b805ee993ec9c531e0452f1003751f92e6bd824 Mon Sep 17 00:00:00 2001 From: Mathieu Baudier Date: Thu, 20 Nov 2008 09:49:18 +0000 Subject: [PATCH] Introduce SLC Detached app launcher git-svn-id: https://svn.argeo.org/slc/trunk@1835 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- org.argeo.slc.detached.launcher/pom.xml | 17 +++--- .../org/argeo/slc/detached/launcher/Main.java | 30 ++++++----- .../org/argeo/slc/detached/AppLauncher.java | 52 +++++++++++++++++++ .../argeo/slc/detached/DetachedException.java | 5 +- org.argeo.slc/pom.xml | 35 +++++-------- 5 files changed, 96 insertions(+), 43 deletions(-) create mode 100644 org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/AppLauncher.java diff --git a/org.argeo.slc.detached.launcher/pom.xml b/org.argeo.slc.detached.launcher/pom.xml index e9b7ddaac..9c3137055 100644 --- a/org.argeo.slc.detached.launcher/pom.xml +++ b/org.argeo.slc.detached.launcher/pom.xml @@ -136,12 +136,15 @@ org.apache.log4j com.springsource.org.apache.log4j - - org.apache.commons - - com.springsource.org.apache.commons.logging - - - + \ No newline at end of file diff --git a/org.argeo.slc.detached.launcher/src/main/java/org/argeo/slc/detached/launcher/Main.java b/org.argeo.slc.detached.launcher/src/main/java/org/argeo/slc/detached/launcher/Main.java index ffa079611..684b15493 100644 --- a/org.argeo.slc.detached.launcher/src/main/java/org/argeo/slc/detached/launcher/Main.java +++ b/org.argeo.slc.detached.launcher/src/main/java/org/argeo/slc/detached/launcher/Main.java @@ -31,7 +31,12 @@ public class Main { startApp(config); // Start OSGi framework - startEquinox(config); + try { + startEquinox(config); + } catch (Exception e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } info("Argeo SLC Detached launcher started."); } catch (Exception e) { e.printStackTrace(); @@ -75,7 +80,7 @@ public class Main { .getCanonicalFile(); String equinoxConfigurationPath = baseDir.getPath() + File.separator + "slc-detached" + File.separator + "equinoxConfiguration"; - String[] equinoxArgs = { "-console", "-noExit", "-clean", + String[] equinoxArgs = { "-console", "-noExit", "-clean", "-debug", "-configuration", equinoxConfigurationPath }; BundleContext context = EclipseStarter.startup(equinoxArgs, null); @@ -153,6 +158,7 @@ public class Main { private static void startBundle(BundleContext bundleContext, String symbolicName) throws BundleException { + info("Starting bundle " + symbolicName + "..."); Bundle bundle = findBundleBySymbolicName(bundleContext, symbolicName); if (bundle != null) bundle.start(); @@ -185,16 +191,16 @@ public class Main { String[] uiArgs = readArgumentsFromLine(config.getProperty( "slc.detached.appargs", "")); - if (className == null) - throw new Exception( - "A main class has to be defined with the system property slc.detached.appclass"); - - // Launch main method using reflection - Class clss = Class.forName(className); - Class[] mainArgsClasses = new Class[] { uiArgs.getClass() }; - Object[] mainArgs = { uiArgs }; - Method mainMethod = clss.getMethod("main", mainArgsClasses); - mainMethod.invoke(null, mainArgs); + if (className == null) { + info("No slc.detached.appclass property define: does not try to launch an app from the standard classpath."); + } else { + // Launch main method using reflection + Class clss = Class.forName(className); + Class[] mainArgsClasses = new Class[] { uiArgs.getClass() }; + Object[] mainArgs = { uiArgs }; + Method mainMethod = clss.getMethod("main", mainArgsClasses); + mainMethod.invoke(null, mainArgs); + } } /* UTILITIES */ diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/AppLauncher.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/AppLauncher.java new file mode 100644 index 000000000..7eb4f48e7 --- /dev/null +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/AppLauncher.java @@ -0,0 +1,52 @@ +package org.argeo.slc.detached; + +import java.lang.reflect.Method; +import java.util.List; +import java.util.Properties; +import java.util.Vector; + +public class AppLauncher { + private Properties systemProperties = new Properties(); + private String mainClass = null; + private List arguments = new Vector(); + + public void launch() { + try { + if (mainClass == null) + throw new DetachedException( + "A main class name muste be specified."); + + System.getProperties().putAll(systemProperties); + //Class clss = getClass().getClassLoader().loadClass(mainClass); + Class clss = Class.forName(mainClass); + + String[] args = new String[arguments.size()]; + for (int i = 0; i < arguments.size(); i++) { + args[i] = arguments.get(i).toString(); + } + + Class[] mainArgsClasses = new Class[] { args.getClass() }; + Object[] mainArgs = { args }; + Method mainMethod = clss.getMethod("main", mainArgsClasses); + mainMethod.invoke(null, mainArgs); + + } catch (Exception e) { + throw new DetachedException("Unexpected exception while launching " + + mainClass, e); + } + + } + + public void setSystemProperties(Properties systemProperties) { + this.systemProperties = systemProperties; + } + + public void setMainClass(String mainClass) { + this.mainClass = mainClass; + } + + public void setArguments(List arguments) { + this.arguments = arguments; + } + +} diff --git a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedException.java b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedException.java index 6755abd7e..dc39ec8ab 100644 --- a/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedException.java +++ b/org.argeo.slc.detached/src/main/java/org/argeo/slc/detached/DetachedException.java @@ -1,14 +1,13 @@ package org.argeo.slc.detached; public class DetachedException extends RuntimeException { - private Exception cause; + static final long serialVersionUID = 1l; public DetachedException(String message) { super(message); } public DetachedException(String message, Exception cause) { - super(message); - this.cause = cause; + super(message, cause); } } diff --git a/org.argeo.slc/pom.xml b/org.argeo.slc/pom.xml index 334483877..b194dc525 100644 --- a/org.argeo.slc/pom.xml +++ b/org.argeo.slc/pom.xml @@ -269,6 +269,11 @@ com.springsource.slf4j.org.apache.commons.logging 1.5.3 + + org.slf4j + com.springsource.slf4j.jcl + 1.5.3 + org.slf4j com.springsource.slf4j.org.apache.log4j @@ -491,28 +496,16 @@ - + 1.2.1 + org.apache.felix + org.apache.felix.framework + org.apache.felix + org.osgi.core 1.2.0 + provided + --> org.eclipse.osgi org.eclipse.osgi -- 2.39.2