felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Felix Meschberger (JIRA)" <j...@apache.org>
Subject [jira] Work started: (FELIX-1044) DependencyManager may miss service registrations
Date Mon, 20 Apr 2009 10:55:47 GMT

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

Work on FELIX-1044 started by Felix Meschberger.

> DependencyManager may miss service registrations
> ------------------------------------------------
>                 Key: FELIX-1044
>                 URL: https://issues.apache.org/jira/browse/FELIX-1044
>             Project: Felix
>          Issue Type: Bug
>          Components: Declarative Services (SCR)
>    Affects Versions: scr-1.0.6
>            Reporter: Felix Meschberger
>            Assignee: Felix Meschberger
>             Fix For: scr-1.0.8
> Instances of the DependencyManager class are used to track component references and to
call the bind/unbind methods as appropriate.
> There are timing issues, which may cause instances of this class to miss services.
> The serviceAdded method checks whether the component is active before handling a service
registration. Generally this works because the activation of the component will call the bind()
method for all dependency managers. The problem arises if the service is registered _after_
the DependencyManager has bound registered services but before the component is fully active
(e.g. while the activate() method is still running): In this case the service is received
but not bound because the component is activating and because the dependency manager has already
been called to bind to registered services, the registering service is lost.
> An approach to explore is to ignore the component state when deciding on whether to handle
the event or not but to add a flag: The flag indicates whether the DependencyManager.bind
method has already been called and hence future events should be handled. When the DependencyManager.unbind
method is called, the flag should be cleare to prevent event handling. In other words:
>    * Add boolean flag "open"
>    * Add open(Object) method to be called during activation. This binds existing services
and sets the "open" flag
>    * Rename undinb(Object) called during deactivation to close(Object) . This unbinds
all bound services and clears the "open" flag
>    * Add a check for the "open" flag to the serviceChanged method
>    * Remove the "handleEvent" method, whose functionality is replaced by the "open" flag

This message is automatically generated by JIRA.
You can reply to this email to add a comment to the issue online.

View raw message