felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Pierre De Rop (JIRA)" <j...@apache.org>
Subject [jira] [Resolved] (FELIX-2954) DM/ annotated component factory does not allow to provide a component instance explicitly
Date Wed, 18 May 2011 10:15:47 GMT

     [ https://issues.apache.org/jira/browse/FELIX-2954?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel

Pierre De Rop resolved FELIX-2954.

    Resolution: Fixed

Fixed in trunk.

> 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

View raw message