X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=org.argeo.osgi.boot%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fboot%2Fa2%2FProvisioningManager.java;h=ef9c04fd9f533a08b942a996649eef3607732ea1;hb=c17e4d12382b233eef2c83baabdffb4a42725359;hp=e7a29707766df3d5ab1199e2d0bb0d48a6aa2175;hpb=1091271b89f2d12e9898e01f6639c48831b1bc4b;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/a2/ProvisioningManager.java b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/a2/ProvisioningManager.java index e7a297077..ef9c04fd9 100644 --- a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/a2/ProvisioningManager.java +++ b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/a2/ProvisioningManager.java @@ -1,6 +1,6 @@ package org.argeo.osgi.boot.a2; -import java.io.InputStream; +import java.io.File; import java.net.URI; import java.nio.file.Path; import java.nio.file.Paths; @@ -18,13 +18,12 @@ import org.argeo.osgi.boot.OsgiBootUtils; import org.eclipse.osgi.launch.EquinoxFactory; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; -import org.osgi.framework.BundleException; import org.osgi.framework.Constants; import org.osgi.framework.Version; import org.osgi.framework.launch.Framework; -import org.osgi.framework.launch.FrameworkFactory; import org.osgi.framework.wiring.FrameworkWiring; +/** Loads provisioning sources into an OSGi context. */ public class ProvisioningManager { BundleContext bc; OsgiContext osgiContext; @@ -59,7 +58,11 @@ public class ProvisioningManager { URI u = new URI(uri); if ("a2".equals(u.getScheme())) { if (u.getHost() == null || "".equals(u.getHost())) { - Path base = Paths.get(u.getPath()); + String baseStr = u.getPath(); + if (File.separatorChar == '\\') {// MS Windows + baseStr = baseStr.substring(1).replace('/', File.separatorChar); + } + Path base = Paths.get(baseStr); FsA2Source source = new FsA2Source(base); source.load(); addSource(source); @@ -78,7 +81,10 @@ public class ProvisioningManager { Path frameworkPath = Paths.get(frameworkLocationUri); if (frameworkPath.getParent().getFileName().toString().equals(A2Contribution.BOOT)) { Path base = frameworkPath.getParent().getParent(); - URI baseUri = new URI("a2", null, null, 0, base.toString(), null, null); + String baseStr = base.toString(); + if (File.separatorChar == '\\')// MS Windows + baseStr = '/' + baseStr.replace(File.separatorChar, '/'); + URI baseUri = new URI("a2", null, null, 0, baseStr, null, null); registerSource(baseUri.toString()); OsgiBootUtils.info("Registered " + baseUri + " as default source"); return true; @@ -105,8 +111,9 @@ public class ProvisioningManager { Version moduleVersion = module.getVersion(); A2Branch osgiBranch = osgiContext.findBranch(module.getBranch().getComponent().getId(), moduleVersion); if (osgiBranch == null) { - Bundle bundle = bc.installBundle(module.getBranch().getCoordinates(), - moduleSource.newInputStream(module.getLocator())); +// Bundle bundle = bc.installBundle(module.getBranch().getCoordinates(), +// moduleSource.newInputStream(module.getLocator())); + Bundle bundle = moduleSource.install(bc, module); if (OsgiBootUtils.isDebug()) OsgiBootUtils.debug("Installed bundle " + bundle.getLocation() + " with version " + moduleVersion); return bundle; @@ -115,13 +122,14 @@ public class ProvisioningManager { int compare = moduleVersion.compareTo(lastOsgiModule.getVersion()); if (compare > 0) {// update Bundle bundle = (Bundle) lastOsgiModule.getLocator(); - bundle.update(moduleSource.newInputStream(module.getLocator())); +// bundle.update(moduleSource.newInputStream(module.getLocator())); + moduleSource.update(bundle, module); OsgiBootUtils.info("Updated bundle " + bundle.getLocation() + " to version " + moduleVersion); return bundle; } } } catch (Exception e) { - OsgiBootUtils.error("Could not install module " + module, e); + OsgiBootUtils.error("Could not install module " + module + ": " + e.getMessage(), e); } return null; } @@ -140,8 +148,9 @@ public class ProvisioningManager { Version moduleVersion = module.getVersion(); int compare = moduleVersion.compareTo(version); if (compare > 0) {// update - try (InputStream in = source.newInputStream(module.getLocator())) { - bundle.update(in); + try { + source.update(bundle, module); +// bundle.update(in); String fragmentHost = bundle.getHeaders().get(Constants.FRAGMENT_HOST); if (fragmentHost != null) fragmentsUpdated = true; @@ -161,22 +170,10 @@ public class ProvisioningManager { return updatedBundles; } - private static Framework launch() { - // start OSGi - FrameworkFactory frameworkFactory = new EquinoxFactory(); + public static void main(String[] args) { Map configuration = new HashMap<>(); configuration.put("osgi.console", "2323"); - Framework framework = frameworkFactory.newFramework(configuration); - try { - framework.start(); - } catch (BundleException e) { - throw new OsgiBootException("Cannot start OSGi framework", e); - } - return framework; - } - - public static void main(String[] args) { - Framework framework = launch(); + Framework framework = OsgiBootUtils.launch(new EquinoxFactory(), configuration); try { ProvisioningManager pm = new ProvisioningManager(framework.getBundleContext()); FsA2Source context = new FsA2Source(Paths.get(