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] [Updated] (FELIX-2994) Delayed Components in Dependency Manager
Date Sun, 12 Jun 2011 20:52:51 GMT

     [ 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
>      (excepts a micro-modif in ComponentImpl.java, and in ComponentDeclaration.java).
>      we track every service listeners, and when a listener is matching a delayed component,
>      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
>      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.
>      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


View raw message