felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Felix Meschberger <fmesc...@gmail.com>
Subject Re: Corner case where ServiceListener do not receive events for matching services
Date Thu, 07 May 2009 13:07:27 GMT
Hi,

Guillaume Nodet schrieb:
> 
> In my case, the bundle exporting the service defines a class that
> indirectly implement the required interface by inheriting a class from
> another package.
> So I have 3 bundles:
>   * bundle A defines an interface R and a class S in different
> packages, whith S implementing R
>   * bundle B defines a class T extending S, it has an import statement
> on S package, but not on R package
>   * bundle C defines a ServiceFactory that export T service without
> any import on any package from R, S, T
> Maybe the service registration is invalid because bundle B does not
> import R package, but the service actually implement the right
> interface

Hmm, I fear, that in this case the framework is not able to validate the
registration and thus send events since the framework has no way of
telling which service interface (class object) is really implemented by
the factory.

As I understand it, this corner case is not properly handled in the
spec, yet I would conclude from the specification, that not sending a
ServiceEvent is correct in this case: An event is only sent if the
service providing bundle and the event listener bundle use the service
class from the same source, or specifically if
ServiceReference.isAssignableTo(Bundle, String) returns true.

Now, given the bundle providing the service (bundle C here) has no
wiring to the actual service class (R exported by bundle A) and hence
the isAssignableTo method will always return false.

Regards
Felix

> 
>> Regards
>> Felix
>>
>>> This leads to the service listener not being invoked because
>>> Util.isServiceAssignable() returns false.
>>> I think it's a problem, but I've no idea how to solve it.  The only
>>> way I can think about is to actually check the service class returned
>>> by the factory instead of the factory, but it may cause side effects,
>>> not sure.
>>>
>>> Thoughts?
>>>
>>> --
>>> Cheers,
>>> Guillaume Nodet
>>> ------------------------
>>> Blog: http://gnodet.blogspot.com/
>>> ------------------------
>>> Open Source SOA
>>> http://fusesource.com
>>>
> 
> 
> 

Mime
View raw message