[
https://issues.apache.org/jira/browse/FELIX-3754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13618262#comment-13618262
]
David Jencks commented on FELIX-3754:
-------------------------------------
I found a related problem in FELIX-4006 when a component is being disposed.
Thinking about this some more I don't think that any special treatment of
being-created implementation objects is needed for
ServiceFactoryComponentManager because the service registry will only be
calling the service factory once for each bundle, and hence once for each
component. Since there are no immediate service factory components we don't
have to worry about getService accessing an under-construction object in this
case.
I'm considering a state flag for immediate/delayed component manager since it
may make some other things simpler.
> Services registered from within the activate method may not be bound
> --------------------------------------------------------------------
>
> Key: FELIX-3754
> URL: https://issues.apache.org/jira/browse/FELIX-3754
> Project: Felix
> Issue Type: Bug
> Components: Declarative Services (SCR)
> Affects Versions: scr-1.6.2
> Reporter: Felix Meschberger
> Assignee: Felix Meschberger
> Fix For: scr-1.8.0
>
> Attachments: FELIX-3754-improved.patch
>
>
> The Sling POST Servlet registers a number of services in the activate method
> and expects these services to be bound to itself. With SCR 1.6.0 this worked
> because each component instance had its dependency managers configured with
> its component instance.
> As of SCR 1.6.2 the DependencyManager instances are shared amongst all
> component instances and thus don't have a reference to the component
> instances. Instead actually bind, unbind and update services the
> DependencyManager instances call the respective component manager which then
> dispatches to the component instances.
> At the point in time when the activate method is called (in the
> ImmediateComponentManager.createComponentInstance method) the actual
> component instance is not "registered" with the component manager yet and
> thus a bind call while the activate method is called cannot be satisfied.
> To fix this, the component instance must be "registered" with the component
> manager before calling the activate method. If the activate method fails, the
> instance must of course be "unregistered" again.
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira