[ 
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

        

Reply via email to