[
https://issues.apache.org/jira/browse/FELIX-3388?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13227656#comment-13227656
]
Thomas Diesler commented on FELIX-3388:
---------------------------------------
With this alternative aproach, which I tested first, I get
DEBUG [org.jboss.osgi.resolver.v2.FelixResolver] (main) Resolve:
[AbstractResource[war.extender.jar:0.0.0]], null
DEBUG [org.jboss.osgi.resolver.v2.spi.AbstractEnvironment] (main)
findProviders:
AbstractPackageRequirement[atts={osgi.wiring.package=org.ops4j.pax.web.service},[war.extender.jar:0.0.0]]
=>
[AbstractPackageCapability[atts={osgi.wiring.package=org.ops4j.pax.web.service},dirs={uses=javax.servlet},[http.service.provider:0.0.0]]]
DEBUG [org.jboss.osgi.resolver.v2.spi.AbstractEnvironment] (main)
findProviders:
AbstractPackageRequirement[atts={osgi.wiring.package=javax.servlet,
version=[2.3,3.0)},[war.extender.jar:0.0.0]] =>
[AbstractPackageCapability[atts={osgi.wiring.package=javax.servlet,
version=2.5},[javax.servlet.api:0.0.0]]]
Note, that the environment now finds only one provider for javax.servlet
This is followed by
TRACE [org.jboss.osgi.resolver] (main) +++ PACKAGE SPACES START +++
TRACE [org.jboss.osgi.resolver] (main)
AbstractResource[javax.servlet.api:0.0.0] (RESOLVED)
TRACE [org.jboss.osgi.resolver] (main) EXPORTED
TRACE [org.jboss.osgi.resolver] (main) javax.servlet -
AbstractResource[javax.servlet.api:0.0.0].javax.servlet NO BLAME
TRACE [org.jboss.osgi.resolver] (main) IMPORTED
TRACE [org.jboss.osgi.resolver] (main) REQUIRED
TRACE [org.jboss.osgi.resolver] (main) USED
TRACE [org.jboss.osgi.resolver] (main)
AbstractResource[http.service.provider:0.0.0] (RESOLVED)
TRACE [org.jboss.osgi.resolver] (main) EXPORTED
TRACE [org.jboss.osgi.resolver] (main) javax.servlet -
AbstractResource[http.service.provider:0.0.0].javax.servlet NO BLAME
TRACE [org.jboss.osgi.resolver] (main) org.ops4j.pax.web.service -
AbstractResource[http.service.provider:0.0.0].org.ops4j.pax.web.service NO BLAME
TRACE [org.jboss.osgi.resolver] (main) org.osgi.service.http -
AbstractResource[http.service.provider:0.0.0].org.osgi.service.http NO BLAME
TRACE [org.jboss.osgi.resolver] (main) IMPORTED
TRACE [org.jboss.osgi.resolver] (main) javax.servlet -
[AbstractResource[javax.servlet.api:0.0.0].javax.servlet BLAMED ON
[AbstractPackageRequirement[atts={osgi.wiring.package=javax.servlet,
version=[2.3.0,2.6.0)},dirs={resolution=optional},[http.service.provider:0.0.0]]]]
TRACE [org.jboss.osgi.resolver] (main) REQUIRED
TRACE [org.jboss.osgi.resolver] (main) USED
TRACE [org.jboss.osgi.resolver] (main) AbstractResource[war.extender.jar:0.0.0]
(UNRESOLVED)
TRACE [org.jboss.osgi.resolver] (main) EXPORTED
TRACE [org.jboss.osgi.resolver] (main) IMPORTED
TRACE [org.jboss.osgi.resolver] (main) javax.servlet -
[AbstractResource[javax.servlet.api:0.0.0].javax.servlet BLAMED ON
[AbstractPackageRequirement[atts={osgi.wiring.package=javax.servlet,
version=[2.3,3.0)},[war.extender.jar:0.0.0]]]]
TRACE [org.jboss.osgi.resolver] (main) org.ops4j.pax.web.service -
[AbstractResource[http.service.provider:0.0.0].org.ops4j.pax.web.service BLAMED
ON
[AbstractPackageRequirement[atts={osgi.wiring.package=org.ops4j.pax.web.service},[war.extender.jar:0.0.0]]]]
TRACE [org.jboss.osgi.resolver] (main) REQUIRED
TRACE [org.jboss.osgi.resolver] (main) USED
TRACE [org.jboss.osgi.resolver] (main) javax.servlet -
[AbstractResource[http.service.provider:0.0.0].javax.servlet BLAMED ON
[AbstractPackageRequirement[atts={osgi.wiring.package=org.ops4j.pax.web.service},[war.extender.jar:0.0.0]]]]
TRACE [org.jboss.osgi.resolver] (main) +++ PACKAGE SPACES END +++
DEBUG [org.jboss.osgi.resolver] (main) Candidate permutation failed due to a
conflict between imports; will try another if possible.:
org.osgi.service.resolver.ResolutionException: Uses constraint violation.
Unable to resolve bundle revision war.extender.jar
[AbstractResource[war.extender.jar:0.0.0]] because it is exposed to package
'javax.servlet' from bundle revisions javax.servlet.api
[AbstractResource[javax.servlet.api:0.0.0]] and http.service.provider
[AbstractResource[http.service.provider:0.0.0]] via two dependency chains.
Chain 1:
war.extender.jar [AbstractResource[war.extender.jar:0.0.0]]
import: null
|
export: osgi.wiring.package=javax.servlet
javax.servlet.api [AbstractResource[javax.servlet.api:0.0.0]]
Chain 2:
war.extender.jar [AbstractResource[war.extender.jar:0.0.0]]
import: null
|
export: osgi.wiring.package=org.ops4j.pax.web.service; uses:=javax.servlet
export: osgi.wiring.package=javax.servlet
http.service.provider [AbstractResource[http.service.provider:0.0.0]]
at
org.apache.felix.resolver.impl.ResolverImpl.checkPackageSpaceConsistency(ResolverImpl.java:1047)
at
org.apache.felix.resolver.impl.ResolverImpl.resolve(ResolverImpl.java:226)
at
org.apache.felix.resolver.impl.ResolverImpl.resolve(ResolverImpl.java:83)
at
org.jboss.osgi.resolver.v2.FelixResolver.resolve(FelixResolver.java:60)
at
org.jboss.test.osgi.resolver.UsesDirectiveResolverTest.testMultipleProviders(UsesDirectiveResolverTest.java:160)
Note, that we have
TRACE [org.jboss.osgi.resolver] (main) USED
TRACE [org.jboss.osgi.resolver] (main) javax.servlet -
[AbstractResource[http.service.provider:0.0.0].javax.servlet BLAMED ON
[AbstractPackageRequirement[atts={osgi.wiring.package=org.ops4j.pax.web.service},[war.extender.jar:0.0.0]]]]
which points to the http.service.provider.
It seems that candSourcePkgs.m_exportedPkgs should not contain an entry for
usedPkgName if candSourcePkgs.m_importedPkgs also does.
> Complex uses resolver failure
> -----------------------------
>
> Key: FELIX-3388
> URL: https://issues.apache.org/jira/browse/FELIX-3388
> Project: Felix
> Issue Type: Bug
> Reporter: Thomas Diesler
> Attachments: test.log
>
>
> Consider this
> // Bundle-SymbolicName: javax.servlet.api
> // ExportPackage: javax.servlet;version=2.5
> // Bundle-SymbolicName: enterprise.jar
> // ExportPackage:
> org.osgi.service.http;version=1.2.1;uses:=javax.servlet
> // ImportPackage: javax.servlet;resolution:=optional
> // Bundle-SymbolicName: http.service.provider
> // ExportPackage: javax.servlet;version=2.5
> // ExportPackage: org.ops4j.pax.web.service;uses:=javax.servlet
> // ExportPackage:
> org.osgi.service.http;version=1.2.0;uses:=javax.servlet
> // ImportPackage:
> javax.servlet;version="[2.3.0,2.6.0)";resolution:=optional
> Install, resolve and apply results for the above.
> Verify that package requirement javax.servlet wires to javax.servlet.api
> // Bundle-SymbolicName: war.extender.jar
> // ImportPackage: org.ops4j.pax.web.service
> // ImportPackage: javax.servlet;version="[2.3,3.0)"
> Install, resolve and apply results for the above.
> Verify that package requirement javax.servlet wires to javax.servlet.api
> The test is here:
> https://github.com/tdiesler/jbosgi-resolver/blob/master/felix/src/test/java/org/jboss/test/osgi/resolver/UsesDirectiveResolverTest.java
--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators:
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira