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


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