Added test case which reproduces this issue in revision 1703921.
(FELIX5045_OptionalDependencyCBCalledBeforeStartTest.java)

On Fri, Sep 18, 2015 at 11:52 PM, Pierre De Rop (JIRA) <[email protected]>
wrote:

>
>      [
> https://issues.apache.org/jira/browse/FELIX-5045?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
> ]
>
> Work on FELIX-5045 started by Pierre De Rop.
> --------------------------------------------
> > DM Optional callbacks may sometimes be invoked before start callback
> > --------------------------------------------------------------------
> >
> >                 Key: FELIX-5045
> >                 URL: https://issues.apache.org/jira/browse/FELIX-5045
> >             Project: Felix
> >          Issue Type: Bug
> >          Components: Dependency Manager
> >    Affects Versions:          org.apache.felix.dependencymanager-r5
> >            Reporter: Pierre De Rop
> >            Assignee: Pierre De Rop
> >             Fix For: org.apache.felix.dependencymanager-r6
> >
> >
> > We just found a corner case that triggers optional dependency callbacks
> before the component is invoked in its 'start' lifecycel callback. This is
> a bug, because in DM, optional dependency callbacks should be always
> invoked after the component's 'start' lifecycle callback.
> > I'm describing now the use case: we have the following component players:
> > - B: a simple service component.
> > - BFactory: a service that has a 'create' method which registers in the
> OSGi registry a new B service instance.
> > - A: a component that adds from A.init() lifecycle callback a required
> dependency (with a callback) on BFactory, as well as an optional dependency
> (with a callback) on B.
> > - when A.bind(BFactory factory) is called, it then calls
> "factory.create()" method which triggers the registration of the B
> Service.  At this point, A.bind(B b) is then invoked, but the A.start()
> lifecycle callback has not yet been called. This is because we are
> currently transiting from INSTANTIATED_AND_WAITING_FOR_REQUIRED ->
> TRACKING_OPTIONAL; so the current state is TRACKING_OPTIONAL, and we are
> calling the             invokeAddRequiredInstanceBoundDependencies()
> > method, which calls A.bind(BFactory) method, which synchronously
> registers a B service instance; so this ends up calling the handleAdded
> method, which invoke A.bind(B b) method, but at this point we have not yet
> called the A.start() callback.
> > - then "A.start()" is called.
>
>
>
> --
> This message was sent by Atlassian JIRA
> (v6.3.4#6332)
>

Reply via email to