X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.init%2Fsrc%2Forg%2Fargeo%2Finit%2Fosgi%2FOsgiBoot.java;h=9f3bd25f783df4908aaa4c6bd8bfffa8c200597e;hb=c66685995c1bf2c59bdf6d68753470c85828310a;hp=d9f3b3c7bf76bc5e9cdf919fd68535dc4d8d0655;hpb=b6ee9c8baa2650ebbca59c9f24eac3599408bf7f;p=lgpl%2Fargeo-commons.git diff --git a/org.argeo.init/src/org/argeo/init/osgi/OsgiBoot.java b/org.argeo.init/src/org/argeo/init/osgi/OsgiBoot.java index d9f3b3c7b..9f3bd25f7 100644 --- a/org.argeo.init/src/org/argeo/init/osgi/OsgiBoot.java +++ b/org.argeo.init/src/org/argeo/init/osgi/OsgiBoot.java @@ -37,9 +37,9 @@ import org.osgi.framework.wiring.FrameworkWiring; * methods, configured via properties. */ public class OsgiBoot implements OsgiBootConstants { - final static String PROP_ARGEO_OSGI_START = "argeo.osgi.start"; - final static String PROP_ARGEO_OSGI_MAX_START_LEVEL = "argeo.osgi.maxStartLevel"; - final static String PROP_ARGEO_OSGI_SOURCES = "argeo.osgi.sources"; + public final static String PROP_ARGEO_OSGI_START = "argeo.osgi.start"; + public final static String PROP_ARGEO_OSGI_MAX_START_LEVEL = "argeo.osgi.maxStartLevel"; + public final static String PROP_ARGEO_OSGI_SOURCES = "argeo.osgi.sources"; @Deprecated final static String PROP_ARGEO_OSGI_BUNDLES = "argeo.osgi.bundles"; @@ -55,7 +55,8 @@ public class OsgiBoot implements OsgiBootConstants { final static String PROP_ARGEO_OSGI_BOOT_APPCLASS = "argeo.osgi.boot.appclass"; final static String PROP_ARGEO_OSGI_BOOT_APPARGS = "argeo.osgi.boot.appargs"; - final static String DEFAULT_BASE_URL = "reference:file:"; + @Deprecated + public final static String DEFAULT_BASE_URL = "reference:file:"; final static String DEFAULT_MAX_START_LEVEL = "32"; // OSGi standard properties @@ -103,6 +104,13 @@ public class OsgiBoot implements OsgiBootConstants { A2Source.SCHEME_A2 + "://" + homePath.toString() + "/.local/share/a2" + queryPart); provisioningManager.registerSource(A2Source.SCHEME_A2 + ":///usr/local/share/a2" + queryPart); provisioningManager.registerSource(A2Source.SCHEME_A2 + ":///usr/share/a2" + queryPart); + } else if (source.trim().equals(A2Source.DEFAULT_A2_REFERENCE_URI)) { + if (Files.exists(homePath)) + provisioningManager.registerSource(A2Source.SCHEME_A2_REFERENCE + "://" + homePath.toString() + + "/.local/share/a2" + queryPart); + provisioningManager + .registerSource(A2Source.SCHEME_A2_REFERENCE + ":///usr/local/share/a2" + queryPart); + provisioningManager.registerSource(A2Source.SCHEME_A2_REFERENCE + ":///usr/share/a2" + queryPart); } else { provisioningManager.registerSource(source + queryPart); } @@ -125,36 +133,6 @@ public class OsgiBoot implements OsgiBootConstants { public void bootstrap(Map properties) { try { long begin = System.currentTimeMillis(); - // check properties -// if (properties != null) { -// for (String property : properties.keySet()) { -// String value = properties.get(property); -// String bcValue = bundleContext.getProperty(property); -// if (PROP_OSGI_CONFIGURATION_AREA.equals(property) || PROP_OSGI_INSTANCE_AREA.equals(property)) { -// try { -// if (value.startsWith("/")) -// value = "file://" + value; -// URL uri = new URL(value); -// URL bcUri = new URL(bcValue); -// if (!uri.equals(bcUri)) -// throw new IllegalArgumentException("Property " + property + "=" + uri -// + " is inconsistent with bundle context : " + bcUri); -// } catch (MalformedURLException e) { -// throw new IllegalArgumentException("Malformed property " + property, e); -// } -// -// } else { -// if (!value.equals(bcValue)) -// throw new IllegalArgumentException("Property " + property + "=" + value -// + " is inconsistent with bundle context : " + bcValue); -// } -// } -// } else { -// String useSystemProperties = bundleContext.getProperty(PROP_OSGI_USE_SYSTEM_PROPERTIES); -// if (useSystemProperties == null || !useSystemProperties.equals("true")) { -// OsgiBootUtils.warn("No properties passed but " + PROP_OSGI_USE_SYSTEM_PROPERTIES + " is not set."); -// } -// } // notify start String osgiInstancePath = getProperty(PROP_OSGI_INSTANCE_AREA); @@ -173,6 +151,9 @@ public class OsgiBoot implements OsgiBootConstants { // A2 install bundles provisioningManager.install(null); + // Make sure fragments are properly considered by refreshing + refreshFramework(); + // start bundles // if (properties != null && !Boolean.parseBoolean(properties.get(PROP_OSGI_USE_SYSTEM_PROPERTIES))) startBundles(properties); @@ -241,7 +222,7 @@ public class OsgiBoot implements OsgiBootConstants { String url = (String) urls.get(i); installUrl(url, installedBundles); } - refreshFramework(); +// refreshFramework(); } /** Actually install the provided URL */ @@ -318,15 +299,6 @@ public class OsgiBoot implements OsgiBootConstants { /* * START */ -// /** -// * Start bundles based on system properties. -// * -// * @see OsgiBoot#doStartBundles(Map) -// */ -// public void startBundles() { -// Properties properties = System.getProperties(); -// startBundles(properties); -// } /** * Start bundles based on these properties. @@ -467,109 +439,6 @@ public class OsgiBoot implements OsgiBootConstants { } } -// /** -// * Start the provided list of bundles -// * -// * @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.isDebug()) -// 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.isDebug()) -// 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 */ -// @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 */ @@ -595,6 +464,7 @@ public class OsgiBoot implements OsgiBootConstants { } /** Implements the path matching logic */ + @Deprecated public List getBundlesUrls(String baseUrl, String bundlePatterns) { List urls = new ArrayList(); if (bundlePatterns == null) @@ -689,16 +559,6 @@ public class OsgiBoot implements OsgiBootConstants { distributionBundle = new DistributionBundle(baseUrl, distributionUrl, localCache); } - // if (baseUrl != null && !(distributionUrl.startsWith("http") || - // distributionUrl.startsWith("file"))) { - // // relative url - // distributionBundle = new DistributionBundle(baseUrl, distributionUrl, - // localCache); - // } else { - // distributionBundle = new DistributionBundle(distributionUrl); - // if (baseUrl != null) - // distributionBundle.setBaseUrl(baseUrl); - // } distributionBundle.processUrl(); return distributionBundle.listUrls(); } @@ -830,36 +690,8 @@ public class OsgiBoot implements OsgiBootConstants { * BEAN METHODS */ -// public boolean getDebug() { -// return OsgiBootUtils.debug; -// } - - // public void setDebug(boolean debug) { - // this.debug = debug; - // } - public BundleContext getBundleContext() { return bundleContext; } -// public String getLocalCache() { -// return localCache; -// } - - // public void setDefaultTimeout(long defaultTimeout) { - // this.defaultTimeout = defaultTimeout; - // } - - // public boolean isExcludeSvn() { - // return excludeSvn; - // } - // - // public void setExcludeSvn(boolean excludeSvn) { - // this.excludeSvn = excludeSvn; - // } - - /* - * INTERNAL CLASSES - */ - }