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 >>> > > >
