Package org.apache.felix.utils.extender
Class AbstractExtender
java.lang.Object
org.apache.felix.utils.extender.AbstractExtender
- All Implemented Interfaces:
EventListener
,org.osgi.framework.BundleActivator
,org.osgi.framework.BundleListener
,org.osgi.framework.SynchronousBundleListener
,org.osgi.util.tracker.BundleTrackerCustomizer
public abstract class AbstractExtender
extends Object
implements org.osgi.framework.BundleActivator, org.osgi.util.tracker.BundleTrackerCustomizer, org.osgi.framework.SynchronousBundleListener
Base class to write bundle extenders.
This extender tracks started bundles (or starting if they have a lazy activation
policy) and will create an
Extension
for each of them to manage it.
The extender will handle all concurrency and synchronization issues, see
Extension
for more information about the additional constraints.
The extender guarantee that all extensions will be stopped synchronously with
the STOPPING event of a given bundle and that all extensions will be stopped
before the extender bundle is stopped.-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionaddingBundle
(org.osgi.framework.Bundle bundle, org.osgi.framework.BundleEvent event) void
bundleChanged
(org.osgi.framework.BundleEvent event) protected Collection<org.osgi.framework.Bundle>
chooseBundlesToDestroy
(Set<org.osgi.framework.Bundle> bundles) protected ExecutorService
Create the executor used to start extensions asynchronously.protected abstract void
protected abstract Extension
doCreateExtension
(org.osgi.framework.Bundle bundle) Create the extension for the given bundle, or null if the bundle is not to be extended.protected void
doStart()
protected void
doStop()
protected abstract void
org.osgi.framework.BundleContext
boolean
Check if the extender performs a preemptive shutdown of all extensions when the framework is being stopped.boolean
boolean
Check if the extender is synchronous or not.void
modifiedBundle
(org.osgi.framework.Bundle bundle, org.osgi.framework.BundleEvent event, Object object) void
removedBundle
(org.osgi.framework.Bundle bundle, org.osgi.framework.BundleEvent event, Object object) void
setPreemptiveShutdown
(boolean preemptiveShutdown) void
setSynchronous
(boolean synchronous) void
start
(org.osgi.framework.BundleContext context) protected void
void
stop
(org.osgi.framework.BundleContext context) protected void
protected abstract void
-
Constructor Details
-
AbstractExtender
public AbstractExtender()
-
-
Method Details
-
isSynchronous
public boolean isSynchronous()Check if the extender is synchronous or not. If the flag is set, the extender will start the extension synchronously with the bundle being tracked or started. Else, the starting of the extension will be delegated to a thread pool.- Returns:
- if the extender is synchronous
-
isPreemptiveShutdown
public boolean isPreemptiveShutdown()Check if the extender performs a preemptive shutdown of all extensions when the framework is being stopped. The default behavior is to wait for the framework to stop the bundles and stop the extension at that time.- Returns:
- if the extender use a preemptive shutdown
-
getBundleContext
public org.osgi.framework.BundleContext getBundleContext() -
getExecutors
-
setSynchronous
public void setSynchronous(boolean synchronous) -
setPreemptiveShutdown
public void setPreemptiveShutdown(boolean preemptiveShutdown) -
isStopping
public boolean isStopping() -
start
- Specified by:
start
in interfaceorg.osgi.framework.BundleActivator
- Throws:
Exception
-
stop
- Specified by:
stop
in interfaceorg.osgi.framework.BundleActivator
- Throws:
Exception
-
doStart
- Throws:
Exception
-
doStop
- Throws:
Exception
-
startTracking
protected void startTracking() -
stopTracking
protected void stopTracking() -
createExecutor
Create the executor used to start extensions asynchronously.- Returns:
- an
-
chooseBundlesToDestroy
protected Collection<org.osgi.framework.Bundle> chooseBundlesToDestroy(Set<org.osgi.framework.Bundle> bundles) -
bundleChanged
public void bundleChanged(org.osgi.framework.BundleEvent event) - Specified by:
bundleChanged
in interfaceorg.osgi.framework.BundleListener
-
addingBundle
- Specified by:
addingBundle
in interfaceorg.osgi.util.tracker.BundleTrackerCustomizer
-
modifiedBundle
public void modifiedBundle(org.osgi.framework.Bundle bundle, org.osgi.framework.BundleEvent event, Object object) - Specified by:
modifiedBundle
in interfaceorg.osgi.util.tracker.BundleTrackerCustomizer
-
removedBundle
public void removedBundle(org.osgi.framework.Bundle bundle, org.osgi.framework.BundleEvent event, Object object) - Specified by:
removedBundle
in interfaceorg.osgi.util.tracker.BundleTrackerCustomizer
-
doCreateExtension
Create the extension for the given bundle, or null if the bundle is not to be extended.- Parameters:
bundle
- the bundle to extend- Returns:
- The extension
- Throws:
Exception
- If something goes wrong
-
debug
-
warn
-
error
-