X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;ds=sidebyside;f=org.argeo.osgi.boot%2Fsrc%2Forg%2Fargeo%2Fosgi%2Fboot%2FOsgiBoot.java;h=f8bee95deea112bce179c26fecfb71a07196e389;hb=5f0980eb97f8517b283696ea3895bf3c0bff199f;hp=f44642d526fd8c8a2e429ffa1144aac042c52a1f;hpb=86e5f79860a8b3013b40a36c1f06c828d52f5249;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/OsgiBoot.java b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/OsgiBoot.java index f44642d52..f8bee95de 100644 --- a/org.argeo.osgi.boot/src/org/argeo/osgi/boot/OsgiBoot.java +++ b/org.argeo.osgi.boot/src/org/argeo/osgi/boot/OsgiBoot.java @@ -82,7 +82,8 @@ public class OsgiBoot implements OsgiBootConstants { // .booleanValue(); /** Default is 10s */ - // private long defaultTimeout = 10000l; + @Deprecated + private long defaultTimeout = 10000l; private final BundleContext bundleContext; private final String localCache; @@ -181,11 +182,16 @@ public class OsgiBoot implements OsgiBootConstants { else if (OsgiBootUtils.debug) OsgiBootUtils.debug( "Installed " + bundle.getSymbolicName() + "-" + bundle.getVersion() + " from " + url); + assert bundle.getSymbolicName() != null; // uninstall previous versions bundles: for (Bundle b : bundleContext.getBundles()) { + if (b.getSymbolicName() == null) + continue bundles; if (bundle.getSymbolicName().equals(b.getSymbolicName())) { Version bundleV = bundle.getVersion(); Version bV = b.getVersion(); + if (bV == null) + continue bundles; if (bundleV.getMajor() == bV.getMajor() && bundleV.getMinor() == bV.getMinor()) { if (bundleV.getMicro() > bV.getMicro()) { // uninstall older bundles @@ -324,111 +330,102 @@ public class OsgiBoot implements OsgiBootConstants { * @return whether all bundles are now in active state * @deprecated */ - // @Deprecated - // public boolean startBundles(List bundlesToStart) { - // if (bundlesToStart.size() == 0) - // return true; - // - // // used to monitor ACTIVE states - // List startedBundles = new ArrayList(); - // // used to log the bundles not found - // List notFoundBundles = new ArrayList(bundlesToStart); - // - // Bundle[] bundles = bundleContext.getBundles(); - // long startBegin = System.currentTimeMillis(); - // for (int i = 0; i < bundles.length; i++) { - // Bundle bundle = bundles[i]; - // String symbolicName = bundle.getSymbolicName(); - // if (bundlesToStart.contains(symbolicName)) - // try { - // try { - // bundle.start(); - // if (OsgiBootUtils.debug) - // debug("Bundle " + symbolicName + " started"); - // } catch (Exception e) { - // OsgiBootUtils.warn("Start of bundle " + symbolicName + " failed because - // of " + e - // + ", maybe bundle is not yet resolved," + " waiting and trying again."); - // waitForBundleResolvedOrActive(startBegin, bundle); - // bundle.start(); - // startedBundles.add(bundle); - // } - // notFoundBundles.remove(symbolicName); - // } catch (Exception e) { - // OsgiBootUtils.warn("Bundle " + symbolicName + " cannot be started: " + - // e.getMessage()); - // if (OsgiBootUtils.debug) - // e.printStackTrace(); - // // was found even if start failed - // notFoundBundles.remove(symbolicName); - // } - // } - // - // for (int i = 0; i < notFoundBundles.size(); i++) - // OsgiBootUtils.warn("Bundle '" + notFoundBundles.get(i) + "' not started - // because it was not found."); - // - // // monitors that all bundles are started - // long beginMonitor = System.currentTimeMillis(); - // boolean allStarted = !(startedBundles.size() > 0); - // List notStarted = new ArrayList(); - // while (!allStarted && (System.currentTimeMillis() - beginMonitor) < - // defaultTimeout) { - // notStarted = new ArrayList(); - // allStarted = true; - // for (int i = 0; i < startedBundles.size(); i++) { - // Bundle bundle = (Bundle) startedBundles.get(i); - // // TODO check behaviour of lazs bundles - // if (bundle.getState() != Bundle.ACTIVE) { - // allStarted = false; - // notStarted.add(bundle.getSymbolicName()); - // } - // } - // try { - // Thread.sleep(100); - // } catch (InterruptedException e) { - // // silent - // } - // } - // long duration = System.currentTimeMillis() - beginMonitor; - // - // if (!allStarted) - // for (int i = 0; i < notStarted.size(); i++) - // OsgiBootUtils.warn("Bundle '" + notStarted.get(i) + "' not ACTIVE after " - // + (duration / 1000) + "s"); - // - // return allStarted; - // } + @Deprecated + public boolean startBundles(List bundlesToStart) { + if (bundlesToStart.size() == 0) + return true; + + // used to monitor ACTIVE states + List startedBundles = new ArrayList(); + // used to log the bundles not found + List notFoundBundles = new ArrayList(bundlesToStart); + + Bundle[] bundles = bundleContext.getBundles(); + long startBegin = System.currentTimeMillis(); + for (int i = 0; i < bundles.length; i++) { + Bundle bundle = bundles[i]; + String symbolicName = bundle.getSymbolicName(); + if (bundlesToStart.contains(symbolicName)) + try { + try { + bundle.start(); + if (OsgiBootUtils.debug) + debug("Bundle " + symbolicName + " started"); + } catch (Exception e) { + OsgiBootUtils.warn("Start of bundle " + symbolicName + " failed because of " + e + + ", maybe bundle is not yet resolved," + " waiting and trying again."); + waitForBundleResolvedOrActive(startBegin, bundle); + bundle.start(); + startedBundles.add(bundle); + } + notFoundBundles.remove(symbolicName); + } catch (Exception e) { + OsgiBootUtils.warn("Bundle " + symbolicName + " cannot be started: " + e.getMessage()); + if (OsgiBootUtils.debug) + e.printStackTrace(); + // was found even if start failed + notFoundBundles.remove(symbolicName); + } + } + + for (int i = 0; i < notFoundBundles.size(); i++) + OsgiBootUtils.warn("Bundle '" + notFoundBundles.get(i) + "' not started because it was not found."); + + // monitors that all bundles are started + long beginMonitor = System.currentTimeMillis(); + boolean allStarted = !(startedBundles.size() > 0); + List notStarted = new ArrayList(); + while (!allStarted && (System.currentTimeMillis() - beginMonitor) < defaultTimeout) { + notStarted = new ArrayList(); + allStarted = true; + for (int i = 0; i < startedBundles.size(); i++) { + Bundle bundle = (Bundle) startedBundles.get(i); + // TODO check behaviour of lazs bundles + if (bundle.getState() != Bundle.ACTIVE) { + allStarted = false; + notStarted.add(bundle.getSymbolicName()); + } + } + try { + Thread.sleep(100); + } catch (InterruptedException e) { + // silent + } + } + long duration = System.currentTimeMillis() - beginMonitor; + + if (!allStarted) + for (int i = 0; i < notStarted.size(); i++) + OsgiBootUtils.warn("Bundle '" + notStarted.get(i) + "' not ACTIVE after " + (duration / 1000) + "s"); + + return allStarted; + } /** Waits for a bundle to become active or resolved */ - // private void waitForBundleResolvedOrActive(long startBegin, Bundle - // bundle) throws Exception { - // int originalState = bundle.getState(); - // if ((originalState == Bundle.RESOLVED) || (originalState == - // Bundle.ACTIVE)) - // return; - // - // String originalStateStr = OsgiBootUtils.stateAsString(originalState); - // - // int currentState = bundle.getState(); - // while (!(currentState == Bundle.RESOLVED || currentState == - // Bundle.ACTIVE)) { - // long now = System.currentTimeMillis(); - // if ((now - startBegin) > defaultTimeout * 10) - // throw new Exception("Bundle " + bundle.getSymbolicName() + " was not - // RESOLVED or ACTIVE after " - // + (now - startBegin) + "ms (originalState=" + originalStateStr + ", - // currentState=" - // + OsgiBootUtils.stateAsString(currentState) + ")"); - // - // try { - // Thread.sleep(100l); - // } catch (InterruptedException e) { - // // silent - // } - // currentState = bundle.getState(); - // } - // } + @Deprecated + private void waitForBundleResolvedOrActive(long startBegin, Bundle bundle) throws Exception { + int originalState = bundle.getState(); + if ((originalState == Bundle.RESOLVED) || (originalState == Bundle.ACTIVE)) + return; + + String originalStateStr = OsgiBootUtils.stateAsString(originalState); + + int currentState = bundle.getState(); + while (!(currentState == Bundle.RESOLVED || currentState == Bundle.ACTIVE)) { + long now = System.currentTimeMillis(); + if ((now - startBegin) > defaultTimeout * 10) + throw new Exception("Bundle " + bundle.getSymbolicName() + " was not RESOLVED or ACTIVE after " + + (now - startBegin) + "ms (originalState=" + originalStateStr + ", currentState=" + + OsgiBootUtils.stateAsString(currentState) + ")"); + + try { + Thread.sleep(100l); + } catch (InterruptedException e) { + // silent + } + currentState = bundle.getState(); + } + } /* * BUNDLE PATTERNS INSTALLATION