--- /dev/null
+package org.argeo.osgi.boot;
+
+import java.lang.management.ManagementFactory;
+
+public class Main {
+
+ public static void main(String[] args) {
+ String mainClass = System.getProperty(OsgiBoot.PROP_ARGEO_OSGI_BOOT_APPCLASS);
+ if (mainClass == null) {
+ throw new IllegalArgumentException(
+ "System property " + OsgiBoot.PROP_ARGEO_OSGI_BOOT_APPCLASS + " must be specified");
+ }
+
+ OsgiBuilder osgi = new OsgiBuilder();
+ String distributionUrl = System.getProperty(OsgiBoot.PROP_ARGEO_OSGI_DISTRIBUTION_URL);
+ if (distributionUrl != null)
+ osgi.install(distributionUrl);
+ // osgi.conf("argeo.node.useradmin.uris", "os:///");
+ // osgi.conf("osgi.clean", "true");
+ // osgi.conf("osgi.console", "true");
+ osgi.launch();
+ osgi.main(mainClass, args);
+
+ long jvmUptime = ManagementFactory.getRuntimeMXBean().getUptime();
+ String jvmUptimeStr = (jvmUptime / 1000) + "." + (jvmUptime % 1000) + "s";
+ System.out.println("Command " + mainClass + " executed in " + jvmUptimeStr);
+
+ osgi.shutdown();
+
+ }
+
+}
package org.argeo.osgi.boot;
+import java.lang.reflect.Method;
+import java.net.URI;
import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
}
+ public OsgiBuilder main(String clssUri, String[] args) {
+
+ // waitForBundle(bundleSymbolicName);
+ try {
+ URI uri = new URI(clssUri);
+ if (!"bundleclass".equals(uri.getScheme()))
+ throw new IllegalArgumentException("Unsupported scheme for " + clssUri);
+ String bundleSymbolicName = uri.getHost();
+ String clss = uri.getPath().substring(1);
+ Bundle bundle = null;
+ for (Bundle b : getBc().getBundles()) {
+ if (bundleSymbolicName.equals(b.getSymbolicName())) {
+ bundle = b;
+ break;
+ }
+ }
+ if (bundle == null)
+ throw new OsgiBootException("Bundle " + bundleSymbolicName + " not found");
+ Class<?> c = bundle.loadClass(clss);
+ Object[] mainArgs = { args };
+ Method mainMethod = c.getMethod("main", String[].class);
+ mainMethod.invoke(null, mainArgs);
+ } catch (Throwable e) {
+ throw new OsgiBootException("Cannot execute " + clssUri, e);
+ }
+ return this;
+ }
+
public Object service(String service) {
return service(service, 0);
}