Max
Max

Reputation: 105

Virgo server plugin resolver conflict

I have two bundles, A export two packages, and then B use these two packages(org.dom4j , org.dom4j.io) , and B still uses spring packages exported by other bundles. If I load bundle A then load bundle B in the osgi console, there is no resolver issue.

But, if I put these two packages into a par, if would fail in the synthetic.context bundle, saying "Uses violation:

A's manifest:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: device-openapi
Bundle-SymbolicName: device-openapi
Bundle-Version: 1.0.0
Export-Package: com.google.gson,
 com.google.gson.annotations,
 com.google.gson.internal,
 com.google.gson.internal.bind,
 com.google.gson.reflect,
 com.google.gson.stream,
 org.apache.commons.codec,
 org.apache.commons.codec.binary,
 org.apache.commons.codec.digest,
 org.apache.commons.codec.language,
 org.apache.commons.codec.language.bm,
 org.apache.commons.codec.net,
 org.apache.commons.io,
 org.apache.commons.io.comparator,
 org.apache.commons.io.filefilter,
 org.apache.commons.io.input,
 org.apache.commons.io.monitor,
 org.apache.commons.io.output,
 org.apache.commons.lang3,
 org.apache.commons.lang3.builder,
 org.apache.commons.lang3.concurrent,
 org.apache.commons.lang3.event,
 org.apache.commons.lang3.exception,
 org.apache.commons.lang3.math,
 org.apache.commons.lang3.mutable,
 org.apache.commons.lang3.reflect,
 org.apache.commons.lang3.text,
 org.apache.commons.lang3.text.translate,
 org.apache.commons.lang3.time,
 org.apache.commons.lang3.tuple,
 org.apache.commons.logging,
 org.apache.commons.logging.impl,
 org.apache.http,
 org.apache.http.annotation,
 org.apache.http.auth,
 org.apache.http.auth.params,
 org.apache.http.client,
 org.apache.http.client.config,
 org.apache.http.client.entity,
 org.apache.http.client.methods,
 org.apache.http.client.params,
 org.apache.http.client.protocol,
 org.apache.http.client.utils,
 org.apache.http.concurrent,
 org.apache.http.config,
 org.apache.http.conn,
 org.apache.http.conn.params,
 org.apache.http.conn.routing,
 org.apache.http.conn.scheme,
 org.apache.http.conn.socket,
 org.apache.http.conn.ssl,
 org.apache.http.conn.util,
 org.apache.http.cookie,
 org.apache.http.cookie.params,
 org.apache.http.entity,
 org.apache.http.entity.mime,
 org.apache.http.entity.mime.content,
 org.apache.http.impl,
 org.apache.http.impl.auth,
 org.apache.http.impl.client,
 org.apache.http.impl.conn,
 org.apache.http.impl.conn.tsccm,
 org.apache.http.impl.cookie,
 org.apache.http.impl.entity,
 org.apache.http.impl.execchain,
 org.apache.http.impl.io,
 org.apache.http.impl.pool,
 org.apache.http.io,
 org.apache.http.message,
 org.apache.http.params,
 org.apache.http.pool,
 org.apache.http.protocol,
 org.apache.http.util,
 org.apache.log4j,
 org.apache.log4j.chainsaw,
 org.apache.log4j.config,
 org.apache.log4j.helpers,
 org.apache.log4j.jdbc,
 org.apache.log4j.jmx,
 org.apache.log4j.lf5,
 org.apache.log4j.lf5.util,
 org.apache.log4j.lf5.viewer,
 org.apache.log4j.lf5.viewer.categoryexplorer,
 org.apache.log4j.lf5.viewer.configure,
 org.apache.log4j.net,
 org.apache.log4j.nt,
 org.apache.log4j.or,
 org.apache.log4j.or.jms,
 org.apache.log4j.or.sax,
 org.apache.log4j.pattern,
 org.apache.log4j.rewrite,
 org.apache.log4j.spi,
 org.apache.log4j.varia,
 org.apache.log4j.xml,
 org.dom4j,
 org.dom4j.bean,
 org.dom4j.datatype,
 org.dom4j.dom,
 org.dom4j.dtd,
 org.dom4j.io,
 org.dom4j.jaxb,
 org.dom4j.rule,
 org.dom4j.rule.pattern,
 org.dom4j.swing,
 org.dom4j.tree,
 org.dom4j.util,
 org.dom4j.xpath,
 org.dom4j.xpp,
 org.json,
 org.wcc.crypt,
 org.wcc.framework
Import-Package: javax.crypto,javax.crypto.spec,javax.naming,javax.nami
 ng.directory,javax.naming.event,javax.naming.ldap,javax.naming.spi,ja
 vax.net,javax.net.ssl,javax.security.auth.x500

B's manifest:

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: NGCPlugin-service
Bundle-SymbolicName: com.myplugin.esdk.storage.service
Bundle-Version: 1.5.50
Bundle-Vendor: myplugin
Bundle-ClassPath: .
Tool: Bundlor 1.1.0.RELEASE
Export-Package: com.myplugin.esdk.storage.mvc,
 com.myplugin.esdk.storage.service.datastore,
 com.myplugin.esdk.storage.service.device,
 com.myplugin.esdk.storage.service.host,
 com.myplugin.esdk.storage.service.mount,
 com.myplugin.esdk.storage.service.resource,
 com.myplugin.esdk.storage.service.snapshot,
 com.myplugin.esdk.storage.service.vm
Import-Package: org.apache.commons.logging,
 org.dom4j,
 org.dom4j.io,
 org.json,org.w3c.dom,
 org.xml.sax,
 org.apache.commons.codec,
 org.apache.commons.codec.binary,
 org.apache.commons.codec.digest,
 org.apache.commons.codec.language,
 org.apache.commons.codec.language.bm,
 org.apache.commons.codec.net,
 org.apache.commons.io,
 org.slf4j,
 org.springframework.beans.factory.annotation

Error log:

Resolver report:
        Uses violation: <Import-Package: org.springframework.beans.factory.annotation; version="0.0.0"> in bundle <com.myplugin.esdk.storage.ngc-2.1.7-com.myplugin.esdk.storage.service_1.5.50[1520387337960]>
             Resolver reported uses conflict for import
        An Import-Package could not be resolved. Resolver error data <Import-Package: com.myplugin.esdk.storage.service.snapshot; version="0.0.0">. Caused by missing constraint in bundle <com.myplugin.esdk.storage.ngc-2.1.7-synthetic.context_2.1.7>
             constraint: <Import-Package: com.myplugin.esdk.storage.service.snapshot; version="0.0.0"> constrained to bundle <com.myplugin.esdk.storage.ngc-2.1.7-com.myplugin.esdk.storage.service> constrained bundle version range "[1.5.50,1.5.50]"
            with attributes {module_scope=com.myplugin.esdk.storage.ngc-2.1.7}

Anyone knows how to fix this? I tried to make a dummy bundle which uses Import-Bundle to import the two bundle's all exported packages, after I manually loaed the A and B bundle, these is no resolver error......

Upvotes: 0

Views: 109

Answers (1)

GianMaria Romanato
GianMaria Romanato

Reputation: 132

I am not familiar with deployment of PAR files, when using Virgo I normally deploy PLAN files. This said, I suspect that the problem may be due to the fact that A exports a number of packages org.apache* which are probably already exported by other bundles included in Virgo and which are dependencies of Spring. So when your PAR is resolved, plan B finds itself in the situation in which the same package is being inherited from A and also from Spring via transitive dependencies.

I would try to remove from A manifest the export of all the packages that are already provided by Virgo.

Upvotes: 1

Related Questions