Constraints from the fragment conflict with the host
Asked Answered
H

1

5

I am trying to extend the imports of bundle A from bundle B using Fragment-Host. In bundle B I have this line: Fragment-Host: and in bundle B's Import-Package I have added the imports required by bundle A

When I try to update bundle B with the manifest and start it I am getting the error: "Constraints from the fragment conflict with the host" with a list of all the imports exist in bundle B however when examining the Manifest of bundle A I don't see why these imports should conflict if they don't exist there

Also worth mentioning that I only run one version of both bundles in the OSGi container and that I already tried restarting the container after the update.

Bundle A Manifest:

Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: hudson
Build-Jdk: 1.6.0_20
Export-Package: <list of packages>
Tool: Bnd-0.0.311
Bundle-Name: Logging infrastructure
Bundle-RequiredExecutionEnvironment: JavaSE-1.6
Bundle-Version: 0.7.0
Bundle-ManifestVersion: 2
Bundle-Activator: <activator class>
Bundle-SymbolicName: com.mycomp.bundlea
Import-Package: com.sap.tc.logging,org.apache.commons.logging,org.apac
 he.log4j,org.apache.log4j.helpers,org.apache.log4j.spi,org.apache.log
 4j.xml,org.eclipse.osgi.framework.console;version="1.0",org.osgi.fram
 ework;version="1.5",org.osgi.service.cm;version="1.2",org.osgi.servic
 e.log;version="1.3",org.osgi.util.tracker;version="1.4"
Eclipse-RegisterBuddy: com.sap.org.apache.log4j

Bundle B Manifest:

    Manifest-Version: 1.0
Export-Package: org.perf4j;uses:="org.perf4j.chart,org.perf4j.helpers"
 ,org.perf4j.aop;uses:="javax.interceptor,org.apache.commons.jexl,org.
 aspectj.lang,org.aspectj.lang.annotation,org.perf4j",org.perf4j.chart
 ;uses:="org.perf4j,org.perf4j.helpers",org.perf4j.commonslog;uses:="o
 rg.apache.commons.logging,org.perf4j",org.perf4j.commonslog.aop;uses:
 ="org.aspectj.lang.annotation,org.perf4j,org.perf4j.aop,org.perf4j.co
 mmonslog",org.perf4j.helpers;uses:="javax.management,org.perf4j",org.
 perf4j.javalog;uses:="org.perf4j",org.perf4j.javalog.aop;uses:="org.a
 spectj.lang.annotation,org.perf4j,org.perf4j.aop,org.perf4j.javalog",
 org.perf4j.log4j;uses:="javax.management,org.apache.log4j,org.apache.
 log4j.helpers,org.apache.log4j.spi,org.perf4j,org.perf4j.chart,org.pe
 rf4j.helpers",org.perf4j.log4j.aop;uses:="org.aspectj.lang.annotation
 ,org.perf4j,org.perf4j.aop,org.perf4j.log4j",org.perf4j.log4j.servlet
 ;uses:="org.perf4j.chart,org.perf4j.servlet",org.perf4j.servlet;uses:
 ="javax.servlet,javax.servlet.http,org.perf4j.chart",org.perf4j.slf4j
 ;uses:="org.perf4j,org.slf4j",org.perf4j.slf4j.aop;uses:="org.aspectj
 .lang.annotation,org.perf4j,org.perf4j.aop,org.perf4j.slf4j"
Implementation-Title: Perf4J
Implementation-Version: 0.9.13
Built-By: devinea
Specification-Vendor: perf4j.org
Tool: Bundlor 1.0.0.RELEASE
Created-By: Apache Maven
Implementation-Vendor: perf4j.org
Implementation-Vendor-Id: org.perf4j
Build-Jdk: 1.5.0_22
Specification-Title: Perf4J
Import-Package: javax.interceptor,javax.management,javax.servlet,javax
 .servlet.http,org.apache.commons.jexl,org.apache.commons.jexl.context
 ,org.apache.commons.logging,org.apache.log4j,org.apache.log4j.helpers
 ,org.apache.log4j.spi,org.aspectj.lang,org.aspectj.lang.annotation,or
 g.slf4j,org.perf4j.log4j
Specification-Version: 0.9.13
Main-Class: org.perf4j.LogParser
Archiver-Version: Plexus Archiver
Bundle-SymbolicName: org.codehaus.perf4j
Bundle-Version: 0.9.13
Fragment-Host: com.mycomp.bundlea

Any ideas...?

Han answered 25/8, 2011 at 14:35 Comment(4)
Could you include the manifests of the bundles? Also, can you explain what you mean by 'update bundle B' (do you already have a fragment bundle, and then update it?)Orison
Hi, I mean that I already have a standard bundle which isworking in my osgi container and I have added the Fragment-Host line to it to make bundle A extend its imports. I will amend the main post shortly to include the manifests. ThanksHan
About the update: you mean that bundle B was already in the framework, but you now have an updated version which includes the Fragment-Host header? If so, try using refresh.Orison
Yes I mean just that and I tried refresh as well, doesn't helpHan
M
5

Constraint conflicts are difficult to diagnose remotely, especially since Equinox gives very little information in its error messages... Felix is better at this but it looks like you are tied to Equinox with some Eclipse-specific extension headers.

For some general pointers and an explanation of the problem, see the following two blog posts that I wrote some time ago:

http://njbartlett.name/2011/09/02/uses-constraints.html

http://njbartlett.name/2011/03/31/uses-constraints-in-felix.html

Michaelson answered 29/8, 2011 at 5:54 Comment(4)
Hi Neil, thank you for the valuable articles. Having examined my osgi container I seem to be having the exact same problem as you described there as I too have two bundles exporting javax.annotation - One is the system bundle org.eclipse.osgi_3.6.0.v20100517 and the other is one of our core custom files. I would like to try the first approach you proposed there - "Removing javax.annotation from the exports of the system bundle altogether". Can you please elaborate on how this can be done?Han
If I examine the system bundle org.eclipse.osgi which, according to the container exports javax.annotation, I don't see this export in its Manifest...Han
@neil-barlett the links are broken.Ruzich
@Ruzich Fixed them. Thanks.Michaelson

© 2022 - 2024 — McMap. All rights reserved.