X-Git-Url: http://git.argeo.org/?a=blobdiff_plain;f=runtime%2Forg.argeo.slc.support.osgi%2Fsrc%2Fmain%2Fjava%2Forg%2Fargeo%2Fslc%2Fosgi%2FBundlesManager.java;h=2571efe9d0f70a64393441265069f2644dcf6ce9;hb=098e868d40b2130c6735b1547247c61a5d88da95;hp=5f50bf84fb1c5ba42a81920d17be130a37f74167;hpb=c092f2c4564f7238f2960bc005c5a2202732f44e;p=gpl%2Fargeo-slc.git diff --git a/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java b/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java index 5f50bf84f..2571efe9d 100644 --- a/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java +++ b/runtime/org.argeo.slc.support.osgi/src/main/java/org/argeo/slc/osgi/BundlesManager.java @@ -1,3 +1,19 @@ +/* + * Copyright (C) 2010 Mathieu Baudier + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + package org.argeo.slc.osgi; import org.apache.commons.logging.Log; @@ -33,8 +49,8 @@ public class BundlesManager implements BundleContextAware, FrameworkListener, private BundleContext bundleContext; - private Long defaultTimeout = 10000l; - private Long pollingPeriod = 100l; + private Long defaultTimeout = 30 * 1000l; + private Long pollingPeriod = 200l; // Refresh sync objects private final Object refreshedPackageSem = new Object(); @@ -265,11 +281,16 @@ public class BundlesManager implements BundleContextAware, FrameworkListener, } @SuppressWarnings(value = { "unchecked" }) - public T getSingleService(Class clss, String filter) { + public T getSingleService(Class 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); @@ -283,15 +304,20 @@ public class BundlesManager implements BundleContextAware, FrameworkListener, return (T) bundleContext.getService(sfs[0]); } - public T getSingleServiceStrict(Class clss, String filter) { - T service = getSingleService(clss, filter); + public T getSingleServiceStrict(Class 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) { @@ -300,8 +326,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, @@ -319,8 +347,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; @@ -364,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; }