Dependency Manager - Bundle Dependency
A bundle dependency allows you to depend on a bundle in a certain set of states, as indicated by a state mask. You can also use a filter condition that is matched against all manifest entries. Finally you can provide a reference to an existing bundle.
To define a bundle dependency, you need to use the BundleDependecy interface. This interface can be created using DependencyActivatorBase.createBundleDependency() or DependencyManager.createBundleDependency() methods;
Here is an example of a component which tracks all ACTIVE bundles having a Service-Component header in the manifest:
public class Activator extends DependencyActivatorBase {
@Override
public void init(BundleContext ctx, DependencyManager dm) throws Exception {
Component scr = createComponent()
.setImplementation(ScrRuntime.class)
.add(createBundleDependency().setFilter("(Service-Component=*").setStateMask(Bundle.ACTIVE).setCallbacks("bind", "unbind"));
}
}
public class ScrRuntime {
void bind(Bundle bundle) {
// load SCR descriptors from the starting bundle
}
void unbind(Bundle bundle) {
// unload SCR descriptors from the starting bundle
}
}
The dependency is optional by default, and will invoke the ScrRuntime.bind callback each time a bundle containing some Declarative Service component is started.