[
https://issues.apache.org/jira/browse/FELIX-5507?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15864554#comment-15864554
]
Karl Pauls commented on FELIX-5507:
-----------------------------------
Ok, I looked at this issue a little bit more in depth and I think I can see
what is going on.
When we did the implicit bootdelegation we really had one specific corner case
in mind namely, something outside the framework (and more specifically, classes
inside the jdk) assumes it can just use the class loader of the class of an
object provided to it to get access to stuff it sees. That used to be the case
for example in certain scenarios with swing. In order to remedy the somewhat
awkward situation that people new to OSGi constantly had problems with this
kind of thing we introduced our “magic hack” that would try to detect this
situation as a last resort and bootdelegate automagically.
After looking at that code again I do think it could be improved but overall it
still seems to be sound in regard to its original purpose (and it was always
the case that in more complicated scenarios, especially around embedding, we
knew it needed to be turned off - hence, the possibility to disable it).
However, what happens here is that we sort of ignored the fact that it is going
to happen on all classloads when we did the tests for service assignability
later on (iirc, this is still code form the beginning of R4 - at least in its
origins). As a consequence, we have a problem in the service lookup path when,
1) the class that instigates the lookup is coming from the outside
2) and the service class can actually be loaded from the outside but isn’t
assignable to the class of the service
3) and both, the requirer and the provider, don’t have a wire to the package of
the service class.
It is this specific case that is happening here and it goes like this:
The scr looks for ConfigAdmin via the bundle context of an extended bundle.
That makes it so that the extended bundle doesn’t have a wire to the
ConfigAdmin package (as it doesn’t use it itself) and the ConfigAdmin bundle
provides the package - hence, doesn’t have a wire either (3). Next, scr uses a
ServiceTracker to track the ConfigAdmin and is importing the
org.osgi.util.tracker package from the system bundle - in other words, the
ServiceTracker class instigates the lookup and is coming from the outside (1).
Finally, it just so happens that there is a ConfigAdmin class outside as well
that comes with equinox in websphere (2).
As a result, when the lookup happens the ConfigAdmin isn’t returned because due
to the triggered boot delegation we think it might not be assignable. Now, in
the second case, when the ConfigAdmin bundle gets restarted later what happens
is that the tracker isn’t instigating the lookup. In that case, it gets the
service via a service event which _does not_ trigger the magic and in turn
makes it so that the service is delivered (thats why it works after a restart
of the ConfigAdmin bundle but _not_ after a restart of the scr bundle).
TL;DR For now, the workaround with the current framework is to turn of implicit
bootdelegation. For the future, we need to stop trying to implicitly
bootdelegate in the service lookup.
If nobody complains, I will go ahead and create a new issue for making it so
that we don’t implicitly bootdelegate when we lookup the class for checking
assignability of services and link it to this issue. I’ll try to get to
addressing it soon as I want to get this into a new framework release this week.
> ConfigurationAdmin not visible to bundles
> -----------------------------------------
>
> Key: FELIX-5507
> URL: https://issues.apache.org/jira/browse/FELIX-5507
> Project: Felix
> Issue Type: Bug
> Components: Framework
> Affects Versions: framework-5.6.1
> Reporter: Carsten Ziegeler
> Assignee: Carsten Ziegeler
> Fix For: framework-5.6.2
>
>
> We have one case where the extended bundles do not see the configuration
> admin service. Interestingly the same application runs fine everywhere else,
> but just on a special environment (windows, ibm java inside Websphere) we
> have this problem reproducibly.
> Using the system bundle context instead of the bundle context of the extended
> bundle in ConfigAdminTracker solves the problem.
> Interestingly only the bundles started last (2 out of probably 80) see the
> configuration admin.
> It could also be that a faulty service hook is involved, although I'm not yet
> aware of such a hook
--
This message was sent by Atlassian JIRA
(v6.3.15#6346)