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
Constructor
Description
`AbstractExtender()`

## Method Summary

Modifier and Type
Method
Description
`Object`
`addingBundle(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`
`createExecutor()`
Create the executor used to start extensions asynchronously.
`protected abstract void`
`debug(org.osgi.framework.Bundle bundle, String msg)`
`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`
`error(String msg, Throwable t)`
`org.osgi.framework.BundleContext`
`getBundleContext()`
`ExecutorService`
`getExecutors()`
`boolean`
`isPreemptiveShutdown()`
Check if the extender performs a preemptive shutdown of all extensions when the framework is being stopped.
`boolean`
`isStopping()`
`boolean`
`isSynchronous()`
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`
`startTracking()`
`void`
`stop(org.osgi.framework.BundleContext context)`
`protected void`
`stopTracking()`
`protected abstract void`
`warn(org.osgi.framework.Bundle bundle, String msg, Throwable t)`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## 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

public ExecutorService getExecutors()

### setSynchronous

public void setSynchronous(boolean synchronous)

### setPreemptiveShutdown

public void setPreemptiveShutdown(boolean preemptiveShutdown)

### isStopping

public boolean isStopping()

### start

public void start(org.osgi.framework.BundleContext context) throws Exception

Specified by:
  `start` in interface `org.osgi.framework.BundleActivator`
Throws:
  `Exception`

### stop

public void stop(org.osgi.framework.BundleContext context) throws Exception

Specified by:
  `stop` in interface `org.osgi.framework.BundleActivator`
Throws:
  `Exception`

### doStart

protected void doStart() throws Exception

Throws:
  `Exception`

### doStop

protected void doStop() throws Exception

Throws:
  `Exception`

### startTracking

protected void startTracking()

### stopTracking

protected void stopTracking()

### createExecutor

protected ExecutorService 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 interface `org.osgi.framework.BundleListener`

### addingBundle

public Object addingBundle(org.osgi.framework.Bundle bundle, org.osgi.framework.BundleEvent event)

Specified by:
  `addingBundle` in interface `org.osgi.util.tracker.BundleTrackerCustomizer`

### modifiedBundle

public void modifiedBundle(org.osgi.framework.Bundle bundle, org.osgi.framework.BundleEvent event, Object object)

Specified by:
  `modifiedBundle` in interface `org.osgi.util.tracker.BundleTrackerCustomizer`

### removedBundle

public void removedBundle(org.osgi.framework.Bundle bundle, org.osgi.framework.BundleEvent event, Object object)

Specified by:
  `removedBundle` in interface `org.osgi.util.tracker.BundleTrackerCustomizer`

### doCreateExtension

protected abstract Extension doCreateExtension(org.osgi.framework.Bundle bundle) throws Exception
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

protected abstract void debug(org.osgi.framework.Bundle bundle, String msg)

### warn

protected abstract void warn(org.osgi.framework.Bundle bundle, String msg, Throwable t)

### error

protected abstract void error(String msg, Throwable t)