org.apache.felix.scr.impl
Class ServiceFactoryComponentManager

java.lang.Object
  extended by org.apache.felix.scr.impl.ServiceFactoryComponentManager
All Implemented Interfaces:
Component, ComponentManager, ServiceFactory, ComponentInstance

public class ServiceFactoryComponentManager
extends Object
implements ServiceFactory

The ServiceFactoryComponentManager TODO


Field Summary
 
Fields inherited from interface org.apache.felix.scr.Component
STATE_ACTIVATING, STATE_ACTIVE, STATE_DEACTIVATING, STATE_DESTROYED, STATE_DISABLED, STATE_ENABLED, STATE_FACTORY, STATE_REGISTERED, STATE_UNSATISFIED
 
Constructor Summary
ServiceFactoryComponentManager(org.apache.felix.scr.impl.BundleComponentActivator activator, ComponentMetadata metadata, long componentId)
           
 
Method Summary
 void activate()
          Activates this component if satisfied.
protected  Dictionary copyTo(Dictionary target, Dictionary source)
          Copies the properties from the source Dictionary into the target Dictionary.
protected  boolean createComponent()
          Method is called by activate() in STATE_ACTIVATING or by DelayedComponentManager.getService(Bundle, ServiceRegistration) in STATE_REGISTERED.
protected  Object createImplementationObject(ComponentContext componentContext)
           
 void deactivate()
          Deactivates the component.
protected  void deleteComponent()
          Method is called by deactivate() in STATE_DEACTIVATING
 void disable()
          Disables this component and - if active - first deactivates it.
 void dispose()
          Before doing real disposal, we also have to unregister the managed service which was registered when the instance was created.
protected  void disposeImplementationObject(Object implementationObject, ComponentContext componentContext)
           
 void enable()
          Enables this component and - if satisfied - also activates it.
protected  void enable(boolean synchronous)
          Enables this component and - if satisfied - also activates it synchronously or asynchronously.
 Bundle getBundle()
          Returns the Bundle declaring this component.
 String getClassName()
          Returns the class name of the Component implementation.
 ComponentMetadata getComponentMetadata()
          Get the component information
 String getFactory()
          Returns the component factory name or null if this component is not defined as a component factory.
 long getId()
          Returns the component ID of this component.
 Object getInstance()
          Get the object that is implementing this descriptor
 String getName()
          Returns the name of the component, which is also used as the service PID.
 Dictionary getProperties()
          Returns the (private copy) of the Component properties to be used for the ComponentContext as well as eventual service registration.
 Reference[] getReferences()
          Returns an array of Reference instances representing the service references (or dependencies) of this Component.
protected  Object getService()
          Returns the service object to be registered if the service element is specified.
 Object getService(Bundle bundle, ServiceRegistration registration)
           
 String[] getServices()
          Returns an array of service names provided by this Component or null if the Component is not registered as a service.
 int getState()
          Returns the current state of the Component, which is one of the STATE_* constants defined in this interface.
 boolean isDefaultEnabled()
          Returns whether the Component is declared to be enabled initially.
 boolean isImmediate()
          Returns whether the Component is an Immediate or a Delayed Component.
 boolean isServiceFactory()
          Returns true if this component is a service factory.
 void reactivate()
          Cycles this component by deactivating it and - if still satisfied - activating it again asynchronously.
 void reconfigure()
          Reconfigures this component by deactivating and activating it.
 void reconfigure(Dictionary configuration)
          Called by the Configuration Admin Service to update the component with Configuration properties.
protected  ServiceRegistration registerComponentService()
           
protected  void setFactoryProperties(Dictionary dictionary)
           
protected  void setState(int newState)
          sets the state of the manager
protected  boolean setStateConditional(int requiredStates, int newState)
          If the state is currently one of the requiredStates, the state is set to newState and true is returned.
 String stateToString(int state)
           
 String toString()
           
 void ungetService(Bundle bundle, ServiceRegistration registration, Object service)
           
protected  void unregisterComponentService()
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Constructor Detail

ServiceFactoryComponentManager

public ServiceFactoryComponentManager(org.apache.felix.scr.impl.BundleComponentActivator activator,
                                      ComponentMetadata metadata,
                                      long componentId)
Parameters:
activator -
metadata -
Method Detail

createComponent

protected boolean createComponent()
Method is called by activate() in STATE_ACTIVATING or by DelayedComponentManager.getService(Bundle, ServiceRegistration) in STATE_REGISTERED.

Returns:
true if creation of the component succeeded. If false is returned, the cause should have been logged.

deleteComponent

protected void deleteComponent()
Method is called by deactivate() in STATE_DEACTIVATING


getService

protected Object getService()
Returns the service object to be registered if the service element is specified.

Extensions of this class may overwrite this method to return a ServiceFactory to register in the case of a delayed or a service factory component.


getInstance

public Object getInstance()
Get the object that is implementing this descriptor

Specified by:
getInstance in interface ComponentInstance
Returns:
the object that implements the services

getService

public Object getService(Bundle bundle,
                         ServiceRegistration registration)
Specified by:
getService in interface ServiceFactory

ungetService

public void ungetService(Bundle bundle,
                         ServiceRegistration registration,
                         Object service)
Specified by:
ungetService in interface ServiceFactory

dispose

public void dispose()
Before doing real disposal, we also have to unregister the managed service which was registered when the instance was created.

Specified by:
dispose in interface ComponentManager
Specified by:
dispose in interface ComponentInstance

createImplementationObject

protected Object createImplementationObject(ComponentContext componentContext)

disposeImplementationObject

protected void disposeImplementationObject(Object implementationObject,
                                           ComponentContext componentContext)

setFactoryProperties

protected void setFactoryProperties(Dictionary dictionary)

getProperties

public Dictionary getProperties()
Returns the (private copy) of the Component properties to be used for the ComponentContext as well as eventual service registration.

Method implements the Component Properties provisioning as described in 112.6, Component Properties.

Specified by:
getProperties in interface Component
Returns:
a private Hashtable of component properties

reconfigure

public void reconfigure(Dictionary configuration)
Called by the Configuration Admin Service to update the component with Configuration properties.

This causes the component to be reactivated with the new configuration unless no configuration has ever been set on this component and the configuration parameter is null. In this case nothing is to be done. If a configuration has previously been set and now the configuration is deleted, the configuration parameter is null and the component has to be reactivated with the default configuration.

Parameters:
configuration - The configuration properties for the component from the Configuration Admin Service or null if there is no configuration or if the configuration has just been deleted.

enable

public final void enable()
Enables this component and - if satisfied - also activates it. If enabling the component fails for any reason, the component ends up disabled.

This method ignores the enabled flag of the component metadata and just enables as requested.

This method schedules the enablement for asynchronous execution.

Specified by:
enable in interface Component
Specified by:
enable in interface ComponentManager

enable

protected final void enable(boolean synchronous)
Enables this component and - if satisfied - also activates it synchronously or asynchronously. If enabling the component fails for any reason, the component ends up disabled.

This method ignores the enabled flag of the component metadata and just enables as requested.

Parameters:
synchronous - If true the component is immediately enabled synchronously. Otherwise the component enabled is scheduled for asynchronous enabled by calling enable().

activate

public final void activate()
Activates this component if satisfied. If any of the dependencies is not met, the component is not activated and remains unsatisifed.

This method schedules the activation for asynchronous execution.


reconfigure

public final void reconfigure()
Reconfigures this component by deactivating and activating it. During activation the new configuration data is retrieved from the Configuration Admin Service.

Specified by:
reconfigure in interface ComponentManager

reactivate

public final void reactivate()
Cycles this component by deactivating it and - if still satisfied - activating it again asynchronously.

This method schedules the deactivation and reactivation for asynchronous execution.


deactivate

public final void deactivate()
Deactivates the component.

Deactivation of the component happens when a service is unregistered (or modified). Since such a service change may take place while a bundle is being stopped and the bundle lock is held, we have to be careful and schedule the deactivation for asynchronous execution.

The drawback is, that the user of the removed (or modified) service is still bound to the old service for a small amount of time and thus may run into issues. But weighing this against the deadlock possibility, it is more important to be deadlock save.

If services have a problem with this delayed deactivation, they should consider marking the reference as optional and dynamic and be prepared to the service not being present, since service bind and unbind will always be synchronous.


disable

public final void disable()
Disables this component and - if active - first deactivates it. The component may be reenabled by calling the enable() method.

This method schedules the disablement for asynchronous execution.

Specified by:
disable in interface Component
Specified by:
disable in interface ComponentManager

getId

public long getId()
Description copied from interface: Component
Returns the component ID of this component. This ID is managed by the SCR.

Specified by:
getId in interface Component

getName

public String getName()
Description copied from interface: Component
Returns the name of the component, which is also used as the service PID. This method provides access to the name attribute of the component element.

Specified by:
getName in interface Component

getBundle

public Bundle getBundle()
Description copied from interface: Component
Returns the Bundle declaring this component.

Specified by:
getBundle in interface Component

getClassName

public String getClassName()
Description copied from interface: Component
Returns the class name of the Component implementation. This method provides access to the class attribute of the implementation element.

Specified by:
getClassName in interface Component

getFactory

public String getFactory()
Description copied from interface: Component
Returns the component factory name or null if this component is not defined as a component factory. This method provides access to the factory attribute of the component element.

Specified by:
getFactory in interface Component

getReferences

public Reference[] getReferences()
Description copied from interface: Component
Returns an array of Reference instances representing the service references (or dependencies) of this Component. If the Component has no references, null is returned.

Specified by:
getReferences in interface Component

isImmediate

public boolean isImmediate()
Description copied from interface: Component
Returns whether the Component is an Immediate or a Delayed Component. This method provides access to the immediate attribute of the component element.

Specified by:
isImmediate in interface Component

isDefaultEnabled

public boolean isDefaultEnabled()
Description copied from interface: Component
Returns whether the Component is declared to be enabled initially. This method provides access to the enabled attribute of the component element.

Specified by:
isDefaultEnabled in interface Component

isServiceFactory

public boolean isServiceFactory()
Description copied from interface: Component
Returns true if this component is a service factory. This method returns the value of the serviceFactory attribute of the service element. If the component has no service element, this method returns false.

Specified by:
isServiceFactory in interface Component

getServices

public String[] getServices()
Description copied from interface: Component
Returns an array of service names provided by this Component or null if the Component is not registered as a service. This method provides access to the interface attributes of the provide elements.

Specified by:
getServices in interface Component

registerComponentService

protected ServiceRegistration registerComponentService()

unregisterComponentService

protected void unregisterComponentService()

toString

public String toString()
Overrides:
toString in class Object

copyTo

protected Dictionary copyTo(Dictionary target,
                            Dictionary source)
Copies the properties from the source Dictionary into the target Dictionary.

Parameters:
target - The Dictionary into which to copy the properties. If null a new Hashtable is created.
source - The Dictionary providing the properties to copy. If null or empty, nothing is copied.
Returns:
The target is returned, which may be empty if source is null or empty and target was null.

getComponentMetadata

public ComponentMetadata getComponentMetadata()
Description copied from interface: ComponentManager
Get the component information

Specified by:
getComponentMetadata in interface ComponentManager
Returns:
a ComponentMetadata object

getState

public int getState()
Description copied from interface: Component
Returns the current state of the Component, which is one of the STATE_* constants defined in this interface.

Specified by:
getState in interface Component

setState

protected void setState(int newState)
sets the state of the manager


setStateConditional

protected boolean setStateConditional(int requiredStates,
                                      int newState)
If the state is currently one of the requiredStates, the state is set to newState and true is returned. Otherwise the state is not changed and false is returned.

This method atomically checks the current state and sets the new state.

Parameters:
requiredStates - The set of states required for the state change to happen.
newState - The new state to go into.
Returns:
true if the state was one of the required states and the new state has now been entered.

stateToString

public String stateToString(int state)


Copyright © 2006-2011 Apache Software Foundation. All Rights Reserved.