Mandatory directive stoped working on OBR 1.6.4. It worked OBR 1.4.1
--------------------------------------------------------------------

                 Key: FELIX-2673
                 URL: https://issues.apache.org/jira/browse/FELIX-2673
             Project: Felix
          Issue Type: Bug
          Components: Bundle Repository (OBR)
    Affects Versions: bundlerepository-1.6.4
            Reporter: Emily Jiang


I moved up to bundlerepository-1.6.4 from bundlerepository-1.4.1 and found the 
mandatory directive stoped working. I have three bundles obr.bundle121, 
obr.bundle122 and obr.bundle123.  Their manifest.mf files are shown below:

bundle obr.bundle121:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Bundle Plug-in
Bundle-SymbolicName: obr.bundle121
Bundle-Version: 3.0.0
Bundle-Vendor: IBM
Export-Package:obr.bundle121
Import-Package:org.componenttest.logging,
 obr.bundle122;version="2.3";company=mood;local=yes

bundle obr.bundle122:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Bundle Plug-in
Bundle-SymbolicName: obr.bundle122
Bundle-Version: 1.0.0
Bundle-Vendor: IBM
Import-Package: org.componenttest.logging
Export-Package: 
obr.bundle122;version=3;company=mood;local=yes;security=yes;mandatory:="company,security"

bundle obr.bundle123:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Bundle Plug-in
Bundle-SymbolicName: obr.bundle123
Bundle-Version: 3.0
Bundle-Vendor: IBM
Import-Package: org.componenttest.logging
Export-Package: 
obr.bundle122;version=2.4;company=mood;local=yes;security=yes;mandatory:="company,local"

When I provision obr.bundle121, obr.bundle122 was identified as required 
instead of obr.bundle123. As a conseqence, the obr.bundle121 cannot be started 
after installation, as the obr.bundle122 has mandatory requirement of 'company' 
and 'security', which obr.bundle121 does not provide. However, obr.bundle121 
provides the mandatory attributes required by obr.bundle123, which also exports 
the package at the version of which obr.bundle121 needs. The OBR provisioner 
should wire the obr.bundle121 to the bundle obr.bundle123 instead of 
obr.bundle122. It suggests the mandatory directive is not functioning in the 
new OBR level.

Below is the repository.xml to represent the bundle manifest.
<?xml version="1.0" encoding="UTF-8"?>
<repository name="obr.eba12.eba_1.0.0">
<resource id="org.componenttest.logging/1.0.0" presentationname="Logging 
Plug-in" symbolicname="org.componenttest.logging" uri="" version="1.0.0">
<capability name="bundle">
<p n="presentationname" v="Logging Plug-in"/>
<p n="version" t="version" v="1.0.0"/>
<p n="symbolicname" v="org.componenttest.logging"/>
<p n="Bundle-ManifestVersion" v="2"/>
<p n="mandatory" v=""/>
</capability>
<capability name="package">
<p n="package" v="org.componenttest.logging"/>
<p n="version" t="version" v="0.0.0"/>
<p n="bundle-symbolic-name" v="org.componenttest.logging"/>
<p n="bundle-version" t="version" v="1.0.0"/>
<p n="mandatory" v=""/>
</capability>
<capability name="service">
<p n="service" v="service"/>
<p n="osgi.service.blueprint.compname" v="ResultLoggerImpl"/>
<p n="objectClass" t="set" v="org.componenttest.logging.ResultLogger"/>
<p n="service.ranking" v="0"/>
<p n="mandatory" v=""/>
</capability>
<require extend="false" 
filter="(&amp;(package=org.osgi.framework)(version&gt;=1.3.0)(version&lt;=2.0.0)(!(version=2.0.0)))"
 multiple="false" name="package" optional="false">Requires package with 
attributes {package=org.osgi.framework, version=[1.3.0,2.0.0)}</require>

</resource>
<resource id="obr.bundle121/3.0.0" presentationname="Bundle Plug-in" 
symbolicname="obr.bundle121" uri="" version="3.0.0">
<capability name="bundle">
<p n="presentationname" v="Bundle Plug-in"/>
<p n="version" t="version" v="3.0.0"/>
<p n="symbolicname" v="obr.bundle121"/>
<p n="Bundle-ManifestVersion" v="2"/>
<p n="mandatory" v=""/>
</capability>
<capability name="package">
<p n="package" v="obr.bundle121"/>
<p n="version" t="version" v="0.0.0"/>
<p n="bundle-symbolic-name" v="obr.bundle121"/>
<p n="bundle-version" t="version" v="3.0.0"/>
<p n="mandatory" v=""/>
</capability>
<require extend="false" 
filter="(&amp;(package=org.componenttest.logging)(version&gt;=0.0.0))" 
multiple="false" name="package" optional="false">Requires package with 
attributes {package=org.componenttest.logging, version=0.0.0}</require>
<require extend="false" 
filter="(&amp;(package=obr.bundle122)(version&gt;=2.3.0)(local=yes)(company=mood)(mandatory:&lt;*local,
 company))" multiple="false" name="package" optional="false">Requires package 
with attributes {package=obr.bundle122, version=2.3.0, local=yes, 
company=mood}</require>

</resource>
<resource id="obr.bundle122/1.0.0" presentationname="Bundle Plug-in" 
symbolicname="obr.bundle122" uri="" version="1.0.0">
<capability name="bundle">
<p n="presentationname" v="Bundle Plug-in"/>
<p n="version" t="version" v="1.0.0"/>
<p n="symbolicname" v="obr.bundle122"/>
<p n="Bundle-ManifestVersion" v="2"/>
<p n="mandatory" v=""/>
</capability>
<capability name="package">
<p n="security" v="yes"/>
<p n="mandatory" v="company,security"/>
<p n="package" v="obr.bundle122"/>
<p n="version" t="version" v="3"/>
<p n="local" v="yes"/>
<p n="bundle-symbolic-name" v="obr.bundle122"/>
<p n="company" v="mood"/>
<p n="bundle-version" t="version" v="1.0.0"/>
</capability>
<require extend="false" 
filter="(&amp;(package=org.componenttest.logging)(version&gt;=0.0.0))" 
multiple="false" name="package" optional="false">Requires package with 
attributes {package=org.componenttest.logging, version=0.0.0}</require>

</resource>
<resource id="obr.bundle123/3.0.0" presentationname="Bundle Plug-in" 
symbolicname="obr.bundle123" uri="" version="3.0.0">
<capability name="bundle">
<p n="presentationname" v="Bundle Plug-in"/>
<p n="version" t="version" v="3.0"/>
<p n="symbolicname" v="obr.bundle123"/>
<p n="Bundle-ManifestVersion" v="2"/>
<p n="mandatory" v=""/>
</capability>
<capability name="package">
<p n="security" v="yes"/>
<p n="mandatory" v="company,local"/>
<p n="package" v="obr.bundle122"/>
<p n="version" t="version" v="2.4"/>
<p n="local" v="yes"/>
<p n="bundle-symbolic-name" v="obr.bundle123"/>
<p n="company" v="mood"/>
<p n="bundle-version" t="version" v="3.0.0"/>
</capability>
<require extend="false" 
filter="(&amp;(package=org.componenttest.logging)(version&gt;=0.0.0))" 
multiple="false" name="package" optional="false">Requires package with 
attributes {package=org.componenttest.logging, version=0.0.0}</require>

</resource>

</repository>

Are there any xml changes in mandatory directive expression between version 
1.4.1 and 1.6.4? If not, there is a regression, as it works on 
bundlerepsoitory-1.4.1.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to