You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@felix.apache.org by Manuel Fiorelli <ma...@gmail.com> on 2021/05/13 18:35:25 UTC
Strange behavior of OBR
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