OSGi™ Service Platform
Core Specification

Release 4 Version 4.3

org.osgi.framework.wiring
Interface FrameworkWiring

All Superinterfaces:
BundleReference

public interface FrameworkWiring
extends BundleReference

Query and modify wiring information for the framework. The framework wiring object for the framework can be obtained by calling bundle.adapt(FrameworkWiring.class) on the system bundle. Only the system bundle can be adapted to a FrameworkWiring object.

The system bundle associated with this FrameworkWiring object can be obtained by calling BundleReference.getBundle().

ThreadSafe
Consumers of this API must not implement this interface

Method Summary
 java.util.Collection<Bundle> getDependencyClosure(java.util.Collection<Bundle> bundles)
          Returns the dependency closure for the specified bundles.
 java.util.Collection<Bundle> getRemovalPendingBundles()
          Returns the bundles that have non-current, in use bundle wirings.
 void refreshBundles(java.util.Collection<Bundle> bundles, FrameworkListener... listeners)
          Refreshes the specified bundles.
 boolean resolveBundles(java.util.Collection<Bundle> bundles)
          Resolves the specified bundles.
 
Methods inherited from interface org.osgi.framework.BundleReference
getBundle
 

Method Detail

refreshBundles

void refreshBundles(java.util.Collection<Bundle> bundles,
                    FrameworkListener... listeners)
Refreshes the specified bundles. This forces the update (replacement) or removal of packages exported by the specified bundles.

The technique by which the framework refreshes bundles may vary among different framework implementations. A permissible implementation is to stop and restart the framework.

This method returns to the caller immediately and then performs the following steps on a separate thread:

  1. Compute the dependency closure of the specified bundles. If no bundles are specified, compute the dependency closure of the removal pending bundles.
  2. Each bundle in the dependency closure that is in the ACTIVE state will be stopped as described in the Bundle.stop method.
  3. Each bundle in the dependency closure that is in the RESOLVED state is unresolved and thus moved to the INSTALLED state. The effect of this step is that bundles in the dependency closure are no longer RESOLVED.
  4. Each bundle in the dependency closure that is in the UNINSTALLED state is removed from the dependency closure and is now completely removed from the Framework.
  5. Each bundle in the dependency closure that was in the ACTIVE state prior to Step 2 is started as described in the Bundle.start method, causing all bundles required for the restart to be resolved. It is possible that, as a result of the previous steps, packages that were previously exported no longer are. Therefore, some bundles may be unresolvable until bundles satisfying the dependencies have been installed in the Framework.

For any exceptions that are thrown during any of these steps, a framework event of type FrameworkEvent.ERROR is fired containing the exception. The source bundle for these events should be the specific bundle to which the exception is related. If no specific bundle can be associated with the exception then the System Bundle must be used as the source bundle for the event. All framework events fired by this method are also delivered to the specified FrameworkListeners in the order they are specified.

When this process completes after the bundles are refreshed, the Framework will fire a Framework event of type FrameworkEvent.PACKAGES_REFRESHED to announce it has completed the bundle refresh. The specified FrameworkListeners are notified in the order specified. Each specified FrameworkListener will be called with a Framework event of type FrameworkEvent.PACKAGES_REFRESHED.

Parameters:
bundles - The bundles to be refreshed, or null to refresh the removal pending bundles.
listeners - Zero or more listeners to be notified when the bundle refresh has been completed. The specified listeners do not need to be otherwise registered with the framework. If a specified listener is already registered with the framework, it will be notified twice.
Throws:
java.lang.IllegalArgumentException - If the specified Bundles were not created by the same framework instance associated with this FrameworkWiring.
java.lang.SecurityException - If the caller does not have AdminPermission[System Bundle,RESOLVE] and the Java runtime environment supports permissions.

resolveBundles

boolean resolveBundles(java.util.Collection<Bundle> bundles)
Resolves the specified bundles. The Framework must attempt to resolve the specified bundles that are unresolved. Additional bundles that are not included in the specified bundles may be resolved as a result of calling this method. A permissible implementation of this method is to attempt to resolve all unresolved bundles installed in the framework.

If no bundles are specified, then the Framework will attempt to resolve all unresolved bundles. This method must not cause any bundle to be refreshed, stopped, or started. This method will not return until the operation has completed.

Parameters:
bundles - The bundles to resolve or null to resolve all unresolved bundles installed in the Framework.
Returns:
true if all specified bundles are resolved; false otherwise.
Throws:
java.lang.IllegalArgumentException - If the specified Bundles were not created by the same framework instance associated with this FrameworkWiring.
java.lang.SecurityException - If the caller does not have AdminPermission[System Bundle,RESOLVE] and the Java runtime environment supports permissions.

getRemovalPendingBundles

java.util.Collection<Bundle> getRemovalPendingBundles()
Returns the bundles that have non-current, in use bundle wirings. This is typically the bundles which have been updated or uninstalled since the last call to refreshBundles(Collection, FrameworkListener...).

Returns:
A collection containing a snapshot of the Bundles which have non-current, in use BundleWirings, or an empty collection if there are no such bundles.

getDependencyClosure

java.util.Collection<Bundle> getDependencyClosure(java.util.Collection<Bundle> bundles)
Returns the dependency closure for the specified bundles.

A graph of bundles is computed starting with the specified bundles. The graph is expanded by adding any bundle that is either wired to a package that is currently exported by a bundle in the graph or requires a bundle in the graph. The graph is fully constructed when there is no bundle outside the graph that is wired to a bundle in the graph. The graph may contain UNINSTALLED bundles that are removal pending.

Parameters:
bundles - The initial bundles for which to generate the dependency closure.
Returns:
A collection containing a snapshot of the dependency closure of the specified bundles, or an empty collection if there were no specified bundles.
Throws:
java.lang.IllegalArgumentException - If the specified Bundles were not created by the same framework instance associated with this FrameworkWiring.

OSGi™ Service Platform
Core Specification

Release 4 Version 4.3

Copyright © OSGi Alliance (2000, 2012). All Rights Reserved. Licensed under the OSGi Specification License, Version 2.0