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
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

        

Mime
View raw message