DM/ annotated component factory does not allow to provide a component instance
explicitly
-----------------------------------------------------------------------------------------
Key: FELIX-2954
URL: https://issues.apache.org/jira/browse/FELIX-2954
Project: Felix
Issue Type: Improvement
Components: Dependency Manager
Reporter: Pierre De Rop
Assignee: Pierre De Rop
Priority: Minor
This change request concerns dependency manager annotations.
Currently, it is possible to trigger an instantiation of a given annotated
dependency manager Component, using the "factorySet" attribute of the
"@Component" annotation.
A "factory set" is similar to declarative service "component factory", except
that a Set<Dictionary> is provided in the OSGi registry, instead of the
"org.osgi.service.component.ComponentFactory" SCR object.
This Set<Dicionary> acts as a factory API and can be considered as a repository
of component instances configurations.
(there is one component created per each dictionary stored in the set).
For instance, in the following example, the component X is instantiated by the
component Y, like this:
@Component(factorySet="MyComponentFactory")
class X implements Z {
...
}
@Component
class Y {
@ServiceDependency(filter="(dm.factory.name=MyComponentFactory)")
Set<Dictionary> _XFactory; // This Set acts as a Factory API for creating
X component instances.
@Start
void start() {
// Instantiate a X component instance
Dictionary x1 = new Hashtable() {{ put("foo", "bar"); }};
_XFactory.add(x1); // create a new X component instance
}
}
In the above example, Y instantiates one X component, by passing an instance
dictionary configuration into the set "_XFactory".
The X component is instantiated using the X default constructor, and currently,
the Y component can not create itself the X component instance object.
The purpose of this change request is to allow the Y class to explicitly
provide the X component instance, by passing a special
key in the component configuration (x1), whose value may contain the actual
component instance object.
For instance:
@Component
class Y {
@ServiceDependency(filter="(dm.factory.name=MyComponentFactory)")
Set<Dictionary> _XFactory;
@Start
void start() {
// Instantiate a X component instance, and pass the real component
instance in the dictionary:
Dictionary x1 = new Hashtable() {{
put("foo", "bar");
put("dm.factory.instance", new X(whatever params));
}};
_XFactory.add(x1); // create a new X dependency manager component
instance, using the object instance passed to the "dm.factory.instance" key
}
}
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira