[
https://issues.apache.org/jira/browse/FELIX-4168?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13710842#comment-13710842
]
Pierre De Rop commented on FELIX-4168:
--------------------------------------
Hello Angelo;
This has to be confirmed by Xander or Marcel, but I think that the problem
comes from the fact that the extra dependency declared in the SA.init() method
is not "instance bound".
Normally, when an extra/required dependency is declared in an init method, then
the extra (and required) dependency should be declared with
'setInstanceBound(true)" like this:
public void init() {
System.out.println("Adapter init " + s2);
component.add(manager.createServiceDependency().setService(S2.class).setCallbacks("add",
"remove").setRequired(true).setInstanceBound(true));
}
The setInstanceBound(true) is useful when declaring dynamic dependencies from
the init() methods and ensures that when the SA adapter is being created, it
then won't be immediately destroyed if the dynamically added dependency is not
yet available.
I have tested your testcase using the code above where I added
setInstanceBound(true) and the test is now passing OK.
You can refer to
http://www.mail-archive.com/[email protected]/msg09314.html, which is a
post where Marcel is explaining what is doing the setInstanceBound method.
If you do agree, then can we close this issue ?
> Adapter services don't call callbacks for existing services when adding a
> required dependency after setup
> ---------------------------------------------------------------------------------------------------------
>
> Key: FELIX-4168
> URL: https://issues.apache.org/jira/browse/FELIX-4168
> Project: Felix
> Issue Type: Bug
> Components: Dependency Manager
> Affects Versions: dependencymanager-3.1.0
> Reporter: Angelo van der Sijpt
> Attachments: FELIX_4168AdapterWithDynamicallyAddedDependencies.java
>
>
> I have the following scenario,
> - an adapter service comes up for some underlying service;
> - some time during start (either during init(), start(), or add()), I add a
> required service dependency, with callbacks;
> - the service on which we depend, is already available.
> I would expect the callbacks get called during startup of the component.
> However, this doesn't happen.
> I have been able to localize this a little further,
> - this only happens when the service is already available (i.e., services
> that show up later work fine),
> - the service does not get pulled because of the new dependency (which is
> should),
> - it doesn't matter which callback function I register the depencies from,
> - it can be solved partially by setting the required dependencies to be
> instanceBound(), but then still the service doesn't get pulled before a
> service becomes available.
--
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