]> git.argeo.org Git - gpl/argeo-slc.git/blobdiff - runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java
Revert explicit security context propagation
[gpl/argeo-slc.git] / runtime / org.argeo.slc.support.osgi / src / main / java / org / argeo / slc / osgi / BundlesManager.java
index b56ebc2a638dc48cb5c6beeabe49f4c9f286f79e..2571efe9d0f70a64393441265069f2644dcf6ce9 100644 (file)
@@ -49,7 +49,7 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
 
        private BundleContext bundleContext;
 
-       private Long defaultTimeout = 120 * 1000l;
+       private Long defaultTimeout = 30 * 1000l;
        private Long pollingPeriod = 200l;
 
        // Refresh sync objects
@@ -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);
@@ -299,15 +304,20 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
                return (T) bundleContext.getService(sfs[0]);
        }
 
-       public <T> T getSingleServiceStrict(Class<T> clss, String filter) {
-               T service = getSingleService(clss, filter);
+       public <T> T getSingleServiceStrict(Class<T> clss, String filter,
+                       Boolean synchronous) {
+               T service = getSingleService(clss, filter, synchronous);
                if (service == null)
                        throw new SlcException("No execution flow found for " + filter);
                else
                        return service;
        }
 
-       /** @return the related bundle or null if not found */
+       /**
+        * @param osgiBundle
+        *            cannot be null
+        * @return the related bundle or null if not found
+        */
        public Bundle findRelatedBundle(OsgiBundle osgiBundle) {
                Bundle bundle = null;
                if (osgiBundle.getInternalBundleId() != null) {
@@ -382,8 +392,11 @@ public class BundlesManager implements BundleContextAware, FrameworkListener,
                this.defaultTimeout = defaultTimeout;
        }
 
-       /** Temporary internal access for {@link OsgiExecutionModulesManager} */
-       BundleContext getBundleContext() {
+       /**
+        * Use with caution since it may interfer with some cached information
+        * within this object
+        */
+       public BundleContext getBundleContext() {
                return bundleContext;
        }