X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.osgi.boot%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fboot%2FOsgiBuilder.java;h=8c460e1161e6cdba0cfe86b59594003e382a64d4;hb=25a31ea46e5de6ce0de366fdb999588c6788c540;hp=c141dc156b97173731a5f2a035f13d7f96739de6;hpb=3388d1b32b96a5ec024cad179b9078dfbbfd9bb6;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/OsgiBuilder.java b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/OsgiBuilder.java index c141dc156..8c460e116 100644 --- a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/OsgiBuilder.java +++ b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/OsgiBuilder.java @@ -1,5 +1,7 @@ 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; @@ -61,12 +63,15 @@ public class OsgiBuilder { OsgiBootUtils.debug("OSGi starting - data: " + osgiData + " conf: " + osgiConf); OsgiBoot osgiBoot = new OsgiBoot(framework.getBundleContext()); - // install bundles - for (String distributionBundle : distributionBundles) { - List bundleUrls = osgiBoot.getDistributionUrls(distributionBundle, baseUrl); - osgiBoot.installUrls(bundleUrls); + if (distributionBundles.isEmpty()) { + osgiBoot.getProvisioningManager().install(null); + } else { + // install bundles + for (String distributionBundle : distributionBundles) { + List bundleUrls = osgiBoot.getDistributionUrls(distributionBundle, baseUrl); + osgiBoot.installUrls(bundleUrls); + } } - // start bundles osgiBoot.startBundles(startLevelsToProperties()); @@ -102,6 +107,11 @@ public class OsgiBuilder { return this; } + public OsgiBuilder waitForServlet(String base) { + service("(&(objectClass=javax.servlet.Servlet)(osgi.http.whiteboard.servlet.pattern=" + base + "))"); + return this; + } + public OsgiBuilder waitForBundle(String bundles) { List lst = new ArrayList<>(); Collections.addAll(lst, bundles.split(",")); @@ -129,6 +139,34 @@ public class OsgiBuilder { } + 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); }