brooklyn-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Aled Sage (JIRA)" <j...@apache.org>
Subject [jira] [Commented] (BROOKLYN-423) Upgrade cxf to 3.1.9 (in karaf)
Date Tue, 10 Jan 2017 09:23:58 GMT

    [ https://issues.apache.org/jira/browse/BROOKLYN-423?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15814449#comment-15814449
] 

Aled Sage commented on BROOKLYN-423:
------------------------------------

[~svet] I'm not sure about: {{create a PR against jclouds to accept [1.1.0; 2.0] just as Brooklyn
already does}}.

I actually thought we should remove that from brooklyn-rest-api's pom.xml (so that it auto-generates
{{javax.ws.rs;version="[2.0,3)"}}). Also, accepting 1.1.0 and 2.0 feels risky, unless jclouds
has been tested thoroughly with both of those major versions. Also, we're moving to javax.ws.rs
version 2.0.1 so jclouds would still refuse to accept that.

I favour changing the bundle ordering so that we have javax.ws.rs versions 1.1.1 and 2.0.1
in karaf. Longer term, jclouds will presumably eventually change to depend on {{[2.0,3)}}.

> Upgrade cxf to 3.1.9 (in karaf)
> -------------------------------
>
>                 Key: BROOKLYN-423
>                 URL: https://issues.apache.org/jira/browse/BROOKLYN-423
>             Project: Brooklyn
>          Issue Type: Improvement
>    Affects Versions: 0.10.0
>            Reporter: Aled Sage
>            Priority: Minor
>
> For why we want this, see https://github.com/cloudsoft/winrm4j/pull/44 (upgrading cxf
to 3.1.9, and httpcomponents.httpclient to 4.5.2).
> Also see https://github.com/apache/brooklyn-server/pull/362, which attempts to update
httpcomponents' httpcore and httpclient. However, that breaks winrm4j if we don't also upgrade
cxf (according to Svet's comment).
> ---
> However, cxf 3.1.9 pulls in {{javax.ws.rs;version=2.0.1}}, which causes jclouds to fail
to start because that needs 1.1.0 >= version < 2.0.0. The 2.0.1 version comes from feature
cxf-core, which depends on feature cxf-specs, which depends on bundle org.apache.servicemix.specs.jsr339-api-2.0.1
(bundle version 2.6.0, but exports {{javax.ws.rs;version=2.0.1}})).
> The jclouds error is:
> {noformat}
> 2017-01-09 09:48:52,714 ERROR  40 o.a.k.s.s.ShellUtil [nsole user karaf] Exception caught
while executing command
> org.osgi.service.resolver.ResolutionException: Unable to resolve jclouds-core/2.0.0:
missing requirement [jclouds-core/2.0.0] osgi.wiring.package; filter:="(&(osgi.wiring.package=javax.ws.rs)(version>=1.1.0)(!(version>=2.0.0)))"
>         at org.apache.felix.resolver.ResolutionError.toException(ResolutionError.java:42)[org.apache.felix.framework-5.4.0.jar:]
>         at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:404)[org.apache.felix.framework-5.4.0.jar:]
>         at org.apache.felix.resolver.ResolverImpl.resolve(ResolverImpl.java:158)[org.apache.felix.framework-5.4.0.jar:]
>         at org.apache.karaf.features.internal.region.SubsystemResolver.resolve(SubsystemResolver.java:216)[11:org.apache.karaf.features.core:4.0.4]
>         at org.apache.karaf.features.internal.service.Deployer.deploy(Deployer.java:263)[11:org.apache.karaf.features.core:4.0.4]
>         at org.apache.karaf.features.internal.service.FeaturesServiceImpl.doProvision(FeaturesServiceImpl.java:1089)[11:org.apache.karaf.features.core:4.0.4]
>         at org.apache.karaf.features.internal.service.FeaturesServiceImpl$1.call(FeaturesServiceImpl.java:985)[11:org.apache.karaf.features.core:4.0.4]
>         at java.util.concurrent.FutureTask.run(FutureTask.java:266)[:1.8.0_111]
>         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)[:1.8.0_111]
>         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)[:1.8.0_111]
>         at java.lang.Thread.run(Thread.java:745)[:1.8.0_111]
> {noformat}
> Looking at Brooklyn 0.10.0, it does include both 1.x and 2.x of javax.ws.rs:
> {noformat}
> karaf@brooklyn()> package:exports | grep javax.ws.rs
> ...
> javax.ws.rs                                                       | 1.1.1           
| 185 | org.apache.servicemix.bundles.jersey-core
> javax.ws.rs                                                       | 2.0.0           
| 194 | org.apache.servicemix.specs.jsr339-api-2.0
> {noformat}
> ---
> However, adding both bundle versions 1.1.1 and 2.0.1 gives the error shown below:
> {noformat}
> 2017-01-09 10:25:41,238 ERROR  40 o.a.k.s.s.ShellUtil [nsole user karaf] Exception caught
while executing command
> org.osgi.service.resolver.ResolutionException: Uses constraint violation. Unable to resolve
resource org.apache.brooklyn.rest-resources [org.apache.brooklyn.rest-resources/0.11.0.SNAPSHOT]
because it is exposed to package 'javax.ws.
> rs' from resources javax.ws.rs-api [javax.ws.rs-api/2.0.1] and org.apache.servicemix.specs.jsr311-api-1.1.1
[org.apache.servicemix.specs.jsr311-api-1.1.1/2.7.0] via two dependency chains.
> Chain 1:
>   org.apache.brooklyn.rest-resources [org.apache.brooklyn.rest-resources/0.11.0.SNAPSHOT]
>     import: (&(osgi.wiring.package=javax.ws.rs)(version>=2.0.0)(!(version>=3.0.0)))
>      |
>     export: osgi.wiring.package: javax.ws.rs
>   javax.ws.rs-api [javax.ws.rs-api/2.0.1]
> Chain 2:
>   org.apache.brooklyn.rest-resources [org.apache.brooklyn.rest-resources/0.11.0.SNAPSHOT]
>     import: (&(osgi.wiring.package=io.swagger.jaxrs.listing)(version>=1.5.0)(!(version>=2.0.0)))
>      |
>     export: osgi.wiring.package=io.swagger.jaxrs.listing; uses:=javax.ws.rs
>   io.swagger.jaxrs [io.swagger.jaxrs/1.5.6]
>     import: (&(osgi.wiring.package=javax.ws.rs)(version>=1.1.0)(!(version>=3.0.0)))
>      |
>     export: osgi.wiring.package: javax.ws.rs
>   org.apache.servicemix.specs.jsr311-api-1.1.1 [org.apache.servicemix.specs.jsr311-api-1.1.1/2.7.0]
> {noformat}
> This is because brooklyn-rest-api pom.xml explicitly adds the OSGi import {{javax.ws.rs;version="[1.1,2.0]}},
with the commit (6f624c78b1e7fe72c6df1ecd297b922721b2c023) comment:
> {noformat}
>     There is no standard JAX-RS way to process multipart/form-data contents,
>     so this service was removed from the API for the purpose of unifying the
>     CXF and Jersey API.
>     
>     * Adjust OSGi package import directives to allow a version range of 1.1 to
>     2.0 of JAX-RS directives.
> {noformat}
> ---
> Removing that from the pom (so brooklyn-rest-api depends on {{javax.ws.rs;version="[2.0,3)"}}),
it seems to work (without having tested any api calls that require multipart/form-data).
> However, it refreshes cxf core (and thus many other bundles) because of:
> {noformat}
> 2017-01-09 11:31:43,748 INFO   11 o.a.k.f.i.s.FeaturesServiceImpl [pool-14-thread-1]
    org.apache.httpcomponents.httpasyncclient/4.1.2 (Attached fragments changed: [org.apache.brooklyn.karaf-httpcomponents-extension/0.11.0.SNAPSHO
> T])
> {noformat}
> The only purpose of https://github.com/apache/brooklyn-server/blob/master/karaf/httpcomponent-extension/pom.xml
is to work around a bu in the httpasyncclient OSGi bundle (as described in the commit message
below):
> {noformat}
> commit 470dda2ced543bf68f4ae931c5c7090a08d799f3
> Author: Svetoslav Neykov <svetoslav.neykov@cloudsoftcorp.com>
> Date:   Wed Aug 31 19:33:20 2016 +0300
>     Fix winrm4j in Karaf
>     
>     winrm4j version update has fixed for OSGi. Also adding an extension bundle to httpcomponents-asyncclient
so that it's able to see org.apache.http.ssl package (that's fixed in later revision releases
of the jar).
> {noformat}
> This leads us back to https://github.com/apache/brooklyn-server/pull/362, which attempts
to bump the httpclient and httpcore versions to 4.5.2 and 4.4.5 respectively. If we also update
httpasyncclient then we shouldn't need that.



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message