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='(&amp;(package=org.example.test))'
extend='false' multiple='false' optional='false'>Import package
org.example.test</require>
    <require name='package' filter='(&amp;(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='(&amp;(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