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

Pierre De Rop updated FELIX-2994:
---------------------------------

    Attachment: FELIX-2994.tgz

attached the proposed implementation for delayed components.

> Delayed Components in Dependency Manager
> ----------------------------------------
>
>                 Key: FELIX-2994
>                 URL: https://issues.apache.org/jira/browse/FELIX-2994
>             Project: Felix
>          Issue Type: Improvement
>          Components: Dependency Manager
>            Reporter: Pierre De Rop
>            Priority: Minor
>         Attachments: FELIX-2994.tgz
>
>
> This issue proposes a lightweight implementation for the support of "delayed 
> components" in Dependency Manager.
> (see patch attached to this issue).
> It allows components to delay their possibly expensive activation until they 
> are really used, and allows
> Dependency Manager to instantiate/initialize components only as needed.
> For system where many services are installed, and where not every services 
> are actually used, then this feature 
> can significantly speed up startup time, especially when some unused 
> components require an expensive 
> processing from their  "init" / "start" methods.
> A new "setDelayed(boolean)" method has been added in the Component interface, 
> and also a new "delayed" state 
> has been added in the ComponentDeclaration, allowing to browse delayed 
> components from the DM shell.
> Here is a code example which defines a delayed component:
> dm.add(createComponent()
>        .setImplementation(DelayedServiceImpl.class)
>        .setInterface(DelayedService.class.getName, null)
>        .setDelayed(true));
> Implementation notes
> --------------------------
>    - By default, components are not delayed (as before).
>    - A new DelayedComponentTest has been added in the test sub-project
>   
>    - This implementation is simple and is not intrusive: DM core classes 
> *have not* been modified
>      (excepts a micro-modif in ComponentImpl.java, and in 
> ComponentDeclaration.java). Basically, 
>      we track every service listeners, and when a listener is matching a 
> delayed component, then 
>      the component is started. Else, the component is not started, hence 
> avoiding the useless component
>      instantiation/initialization.
>    - A new state has been added in the ComponentDeclaration class 
> (STATE_DELAYED), allowing to track
>      delayed components from the Dependency Manager shell.     
>    - The new filter index recently introduced in DM has not yet been used, 
> but it might be useful to 
>      integrate it in the delayed component manager, since the DM indexer 
> greatly speeds up service listeners lookup, 
>      especially when using many (thousands) of services. But this enhancement 
> could be done in a next step.
>    - The ListenerHook (from ServiceHook specification) is used for the 
> implementation: this allows to trigger the
>      activation of DM delayed components not only using DependencyManager 
> dependencies, but also using other libraries, 
>      like Declarative Service, iPOJO, blueprint, or even ServiceTracker.  
> This is important because
>      in our environment, we are using both dependency manager and Declarative 
> Service, and we need to be able to
>      activate a delayed DM component from a Declarative Service "Reference" 
> dependency. ListenerHook
>      allows to do this because using ListenerHook, we are able to track every 
> service listeners registered in the framework.

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to