Hi everybody I've been experimenting with *bundle repository *for a while, and I think that I've found some strange behavior, possibly a bug in the resolver. As I was working on a program of mine, I wanted to create a simple test in an independent environment. To this end, I made the following tests using Apache Karaf 4.3.1 with the *obr *feature installed.
Please consider the following repository containing two versions of the same bundle, 1.0 and 1.5, both exporting the service *java.util.EventListener.* The version 1.0 should not resolve, as it imports a package that is not provided by any bundle. <repository> <resource id='test-provider/1.0' symbolicname='test-provider' presentationname='test-provider' uri='test-provider-1.0.jar' version='1.0'> <size>6750</size> <capability name='bundle'> <p n='symbolicname' v='test-provider'/> <p n='presentationname' v='test-provider'/> <p n='version' t='version' v='1.0'/> <p n='manifestversion' v='2'/> </capability> <capability name='package'> <p n='package' v='org.example.test'/> <p n='version' t='version' v='1.0'/> </capability> <capability name='service'> <p n='service' v='java.util.EventListener'/> </capability> <require name='package' filter='(&(package=org.example.test))' extend='false' multiple='false' optional='false'>Import package org.example.test</require> <require name='package' filter='(&(package=org.example.notfound))' extend='false' multiple='false' optional='false'>Import package org.example.notfound</require> </resource> <resource id='test-provider/1.5' symbolicname='test-provider' presentationname='test-provider' uri='test-provider-1.5.jar' version='1.5'> <size>6750</size> <capability name='bundle'> <p n='symbolicname' v='test-provider'/> <p n='presentationname' v='test-provider'/> <p n='version' t='version' v='1.5'/> <p n='manifestversion' v='2'/> </capability> <capability name='package'> <p n='package' v='org.example.test'/> <p n='version' t='version' v='1.5'/> </capability> <capability name='service'> <p n='service' v='java.util.EventListener'/> </capability> <require name='package' filter='(&(package=org.example.test))' extend='false' multiple='false' optional='false'>Import package org.example.test</require> </resource> </repository> Now, if I try to resolve a provider for the service *java.util.EventListener*, I've a strange result: karaf@root()> obr:resolve -w service:(service=java.util.EventListener) Required resource(s): --------------------- test-provider (1.0.0) - test-provider / package:(&(package=org.example.test)) - test-provider / package:(&(package=org.example.test)) test-provider (1.5.0) - null / service:(service=java.util.EventListener) While version 1.5 would is self-contained, the resolver still tries to resolve the package *org.example.test *from version 1.0 (which should be a worse candidate for this capability). In fact, the latter should not resolve, but the resolver seems to claim to be successful. Best regards, Manuel