> It fails because equinox's FiltereServiceListener (as ServiceTracker
> registers a ServiceListener) does the following:
>
> if (allservices || ServiceRegistry.isAssignableTo(context, reference)) {
>    ....
> }
>
> The call to ServiceRegistry.isAssignableTo(context, reference) fails when
> context (A) does not import package of reference ("foo")
>
> Is this a bug?

ServiceRegistry.isAssignableTo(context, reference) seems to be doing its job.

" This method performs the following checks:

    1. Get the package name from the specified class name.
    2. For the bundle that registered the service referenced by this
ServiceReference (registrant bundle); find the source for the package.
If no source is found then return true if the registrant bundle is
equal to the specified bundle; otherwise return false."

Ding!  No source is found for the package for A, and A != B.

So the question is whether ServiceRegistry.isAssignableTo(context,
reference) is a necessary condition for ServiceTracker.  As I understand
Peter's post, it is too narrow a constraint because it excludes the
(unusual) case where no source for the package is found in 'context'.


_______________________________________________
OSGi Developer Mail List
osgi-dev@mail.osgi.org
https://mail.osgi.org/mailman/listinfo/osgi-dev

Reply via email to