[
https://issues.apache.org/jira/browse/FELIX-4168?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13712096#comment-13712096
]
Pierre De Rop commented on FELIX-4168:
--------------------------------------
ok Angelo, we probably have to do some more documentations about what is the
setInstanceBound method.
To summarize: when a required dependency is dynamically added from an init()
method, it is necessary to configure it with setInstanceBound(true), in order
to avoid having the adapter component being stopped and restarted multiple
times if the dependency is not there at the time the init method is called.
However, and admittedly, in your testcase, the dependency S2 is already
available when the init() method is declaring the dependency. So let's keep
this issue opened because it might be necessary to do some more investigations.
PS: in the DM core implementation, in the
ServiceDependencyImpl.addedService(ServiceReference ref, Object service), if
the following patch is applied line 480, then your testcase will work without
using instanceBound dependency:
if (ds.isInstantiated() /*&& isInstanceBound()*/ &&
isRequired()) {
I have commented the isInstanceBound method, but I'm not sure for now if this
patch is valid.
In the meantime, you should use "setInstanceBound(true)" when declaring
required dependency within Component's init method
thanks.
> 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