X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.slc.detached%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fdetached%2FAppLauncher.java;h=d2e1ff51eb62169ac44f59d057105d3214028c0a;hb=ea2228c662a90cd28086f281a394fb3a3a0f860f;hp=7eb4f48e77cba045e6fc5dae2f55a797c8bfb8ec;hpb=1b805ee993ec9c531e0452f1003751f92e6bd824;p=gpl%2Fargeo-slc.git 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 index 7eb4f48e7..d2e1ff51e 100644 --- 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 @@ -1,24 +1,29 @@ package org.argeo.slc.detached; import java.lang.reflect.Method; +import java.util.ArrayList; 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(); + private List arguments = new ArrayList(); public void launch() { + + Properties base = System.getProperties(); + Properties fake = new Properties(base); + try { if (mainClass == null) throw new DetachedException( - "A main class name muste be specified."); + "A main class name has to be specified."); System.getProperties().putAll(systemProperties); - //Class clss = getClass().getClassLoader().loadClass(mainClass); - Class clss = Class.forName(mainClass); + + ClassLoader cl = Thread.currentThread().getContextClassLoader(); + Class clss = cl.loadClass(mainClass); String[] args = new String[arguments.size()]; for (int i = 0; i < arguments.size(); i++) { @@ -28,11 +33,16 @@ public class AppLauncher { Class[] mainArgsClasses = new Class[] { args.getClass() }; Object[] mainArgs = { args }; Method mainMethod = clss.getMethod("main", mainArgsClasses); + + System.setProperties(fake); + mainMethod.invoke(null, mainArgs); } catch (Exception e) { throw new DetachedException("Unexpected exception while launching " + mainClass, e); + } finally { + System.setProperties(base); } }