]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java
Unique launch
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.osgi / src / main / java / org / argeo / slc / osgi / BundlesManager.java
index 0e18f3599b7e65828928c64fc815468fc17e89f0..3d6510d147bb051e0348bf631b8117f7d60d222a 100644 (file)
@@ -49,8 +49,8 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
 
        private BundleContext bundleContext;
 
-       private Long defaultTimeout = 10000l;
-       private Long pollingPeriod = 100l;
+       private Long defaultTimeout = 120 * 1000l;
+       private Long pollingPeriod = 200l;
 
        // Refresh sync objects
        private final Object refreshedPackageSem = new Object();
@@ -281,11 +281,16 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
        }
 
        @SuppressWarnings(value = { "unchecked" })
-       public <T> T getSingleService(Class<T> clss, String filter) {
+       public <T> T getSingleService(Class<T> clss, String filter,
+                       Boolean synchronous) {
                Assert.isTrue(OsgiFilterUtils.isValidFilter(filter), "valid filter");
                ServiceReference[] sfs;
                try {
-                       sfs = bundleContext.getServiceReferences(clss.getName(), filter);
+                       if (synchronous)
+                               sfs = getServiceRefSynchronous(clss.getName(), filter);
+                       else
+                               sfs = bundleContext
+                                               .getServiceReferences(clss.getName(), filter);
                } catch (InvalidSyntaxException e) {
                        throw new SlcException("Cannot retrieve service reference for "
                                        + filter, e);
@@ -300,7 +305,7 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
        }
 
        public <T> T getSingleServiceStrict(Class<T> clss, String filter) {
-               T service = getSingleService(clss, filter);
+               T service = getSingleService(clss, filter, true);
                if (service == null)
                        throw new SlcException("No execution flow found for " + filter);
                else
@@ -316,8 +321,10 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
                                        osgiBundle.getName().equals(bundle.getSymbolicName()),
                                        "symbolic name consistent");
                        if (osgiBundle.getVersion() != null)
-                               Assert.isTrue(osgiBundle.getVersion().equals(
-                                               bundle.getHeaders().get(Constants.BUNDLE_VERSION)),
+                               Assert.isTrue(
+                                               osgiBundle.getVersion().equals(
+                                                               bundle.getHeaders().get(
+                                                                               Constants.BUNDLE_VERSION)),
                                                "version consistent");
                } else if (osgiBundle.getVersion() == null) {
                        bundle = OsgiBundleUtils.findBundleBySymbolicName(bundleContext,
@@ -335,8 +342,8 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
                                                break bundles;
                                        }
 
-                                       if (b.getHeaders().get(Constants.BUNDLE_VERSION).equals(
-                                                       osgiBundle.getVersion())) {
+                                       if (b.getHeaders().get(Constants.BUNDLE_VERSION)
+                                                       .equals(osgiBundle.getVersion())) {
                                                bundle = b;
                                                osgiBundle.setInternalBundleId(b.getBundleId());
                                                break bundles;