Class ComponentFactoryImpl<S>
- All Implemented Interfaces:
ComponentContainer<S>
,ComponentManager<S>
,org.osgi.service.component.ComponentFactory<S>
ComponentFactoryImpl
extends the AbstractComponentManager
class to implement the component factory functionality. As such the
OSGi Declarative Services ComponentFactory
interface is
implemented.
In addition the ComponentHolder
interface is implemented to use this
class directly as the holder for component instances created by the
newInstance(Dictionary)
method.
This class implements spec-compliant component factories and the felix "persistent" component factory, where the factory is always registered whether or not all dependencies are present and the created components also persist whether or not the dependencies are present to allow the component instance to exist.
-
Nested Class Summary
Nested classes/interfaces inherited from class org.apache.felix.scr.impl.manager.AbstractComponentManager
AbstractComponentManager.State
-
Field Summary
FieldsModifier and TypeFieldDescriptionprotected long
Configuration change count (R5) or imitation (R4)protected TargetedPID
Fields inherited from class org.apache.felix.scr.impl.manager.AbstractComponentManager
m_activationLock, m_container, m_factoryInstance
Fields inherited from interface org.apache.felix.scr.impl.manager.ComponentManager
STATE_ACTIVE, STATE_DISPOSED, STATE_SATISFIED, STATE_UNSATISFIED_CONFIGURATION, STATE_UNSATISFIED_REFERENCE
-
Constructor Summary
ConstructorsConstructorDescriptionComponentFactoryImpl
(ComponentContainer<S> container, ComponentMethods componentMethods) -
Method Summary
Modifier and TypeMethodDescriptionprotected boolean
collectDependencies
(ComponentContextImpl<S> componentContext) Collect and store in m_dependencies_map all the services for dependencies, outside of any locks.protected void
deleteComponent
(int reason) The component factory does not have a component to delete.void
dispose
(int reason) Disposes off all components ever created by this component holder.void
disposed
(SingleComponentManager<S> component) Informs the holder that the component has been disposed as a result of calling the dispose method.boolean
Compares thisComponentFactoryImpl
object to another object.void
protected void
getComponentManagers
(Map<?, SingleComponentManager<S>> componentMap, List<AbstractComponentManager<S>> componentManagers) getConfigurationTargetedPID
(TargetedPID pid, TargetedPID factoryPid) For ComponentFactoryImpl, this is used only for updating targets on the dependency managers, so we don't need any other properties.protected String[]
Returns the subset of component properties to be used as service properties.boolean
int
hashCode()
Returns a hash code value for the object.boolean
org.osgi.service.component.ComponentInstance<S>
newInstance
(Dictionary<String, ?> dictionary) void
reconfigure
(Map<String, Object> configuration, boolean configurationDeleted, TargetedPID factoryPid) void
setServiceProperties
(Dictionary<String, ?> serviceProperties) protected boolean
Methods inherited from class org.apache.felix.scr.impl.manager.AbstractComponentManager
copyTo, copyToDictionary, copyToMap, disable, enable, getActivator, getBundle, getComponentMetadata, getFailureReason, getId, getLogger, getReferenceManagers, getRegisteredServiceReference, getServiceRegistration, getSpecState, isImmediate, registerService, setFailureReason, setServiceProperties, toString, unregisterService
Methods inherited from class java.lang.Object
clone, finalize, getClass, notify, notifyAll, wait, wait, wait
Methods inherited from interface org.apache.felix.scr.impl.manager.ComponentContainer
getActivator, getComponentMetadata, getLogger
-
Field Details
-
m_changeCount
protected volatile long m_changeCountConfiguration change count (R5) or imitation (R4) -
m_targetedPID
-
-
Constructor Details
-
ComponentFactoryImpl
-
-
Method Details
-
verifyDependencyManagers
protected boolean verifyDependencyManagers()- Overrides:
verifyDependencyManagers
in classAbstractComponentManager<S>
-
isFactory
public boolean isFactory()- Overrides:
isFactory
in classAbstractComponentManager<S>
-
newInstance
- Specified by:
newInstance
in interfaceorg.osgi.service.component.ComponentFactory<S>
-
equals
Compares thisComponentFactoryImpl
object to another object.A component factory impl is considered to be equal to another component factory impl if the component names are equal(using
String.equals
). -
hashCode
public int hashCode()Returns a hash code value for the object. -
deleteComponent
protected void deleteComponent(int reason) The component factory does not have a component to delete.But in the backwards compatible case any instances created for factory configuration instances are to disabled as a consequence of deactivating the component factory.
- Specified by:
deleteComponent
in classAbstractComponentManager<S>
-
getProvidedServices
- Overrides:
getProvidedServices
in classAbstractComponentManager<S>
-
hasConfiguration
public boolean hasConfiguration() -
getProperties
For ComponentFactoryImpl, this is used only for updating targets on the dependency managers, so we don't need any other properties.- Specified by:
getProperties
in interfaceComponentManager<S>
- Specified by:
getProperties
in classAbstractComponentManager<S>
-
setServiceProperties
- Specified by:
setServiceProperties
in classAbstractComponentManager<S>
-
getServiceProperties
Description copied from class:AbstractComponentManager
Returns the subset of component properties to be used as service properties. These properties are all component properties where property name does not start with dot (.), properties which are considered private.- Overrides:
getServiceProperties
in classAbstractComponentManager<S>
-
collectDependencies
Description copied from class:AbstractComponentManager
Collect and store in m_dependencies_map all the services for dependencies, outside of any locks.- Overrides:
collectDependencies
in classAbstractComponentManager<S>
- Parameters:
componentContext
- possible instance key for prototype scope references- Returns:
- true if all references can be collected, false if some dependency is no longer available.
-
dispose
public void dispose(int reason) Disposes off all components ever created by this component holder. This method is called if either the Declarative Services runtime is stopping or if the owning bundle is stopped. In both cases all components created by this holder must be disposed off.- Overrides:
dispose
in classAbstractComponentManager<S>
-
disposed
Description copied from interface:ComponentContainer
Informs the holder that the component has been disposed as a result of calling the dispose method.- Specified by:
disposed
in interfaceComponentContainer<S>
-
getComponentManagers
protected void getComponentManagers(Map<?, SingleComponentManager<S>> componentMap, List<AbstractComponentManager<S>> componentManagers) -
getConfigurationTargetedPID
-
reconfigure
public void reconfigure(Map<String, Object> configuration, boolean configurationDeleted, TargetedPID factoryPid) - Specified by:
reconfigure
in classAbstractComponentManager<S>
-
getComponentManagers
- Specified by:
getComponentManagers
in classAbstractComponentManager<S>
-