*T**_L;DR_*

I was trying to upgrade to CXF 3.3.2 (from 3.2.8) because https://karaf.apache.org/news.html announcement about Karaf 4.2.7 lists CXF version 3.3.2.

But I've hit a big problem.

winrm4j fails in Karaf with CXF 3.3.2: JAXB service construction fails when parsing annotations.

Should we abandon the CXF upgrade and stick with 3.2.8?

I'll report it to the CXF mailing list, so perhaps reserve judgement to see what they say.

_*DETAILS OF ERROR*_

The upgrade involved upgrading winrm4j to use CXF 3.3.2, which seemed to go fine (all tests pass outside of Karaf).

However, when I test use of WinRM inside Brooklyn Karaf, it fails with the error below:

```
2019-12-03T11:44:16,468 wmhGA3U2-[ut059oi7tk,ltajipcuun] WARN 103 i.c.w.c.WinRmClient [ager-Ak6FHXbO-32] Error creating WinRm service with mbean strategy (trying other strategies): org.apache.cxf.service.factory.ServiceConstructionException
org.apache.cxf.service.factory.ServiceConstructionException: null
        at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:355) ~[!/:3.3.2]         at org.apache.cxf.service.factory.AbstractServiceFactoryBean.initializeDataBindings(AbstractServiceFactoryBean.java:86) ~[!/:3.3.2]         at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.buildServiceFromWSDL(ReflectionServiceFactoryBean.java:426) ~[!/:3.3.2]         at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.initializeServiceModel(ReflectionServiceFactoryBean.java:528) ~[!/:3.3.2]         at org.apache.cxf.wsdl.service.factory.ReflectionServiceFactoryBean.create(ReflectionServiceFactoryBean.java:263) ~[!/:3.3.2]         at org.apache.cxf.jaxws.support.JaxWsServiceFactoryBean.create(JaxWsServiceFactoryBean.java:199) ~[?:?]         at org.apache.cxf.frontend.AbstractWSDLBasedEndpointFactory.createEndpoint(AbstractWSDLBasedEndpointFactory.java:103) ~[!/:3.3.2]         at org.apache.cxf.frontend.ClientFactoryBean.create(ClientFactoryBean.java:91) ~[!/:3.3.2]         at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:159) ~[!/:3.3.2]         at org.apache.cxf.jaxws.JaxWsProxyFactoryBean.create(JaxWsProxyFactoryBean.java:142) ~[?:?]         at org.apache.cxf.frontend.ClientProxyFactoryBean.create(ClientProxyFactoryBean.java:95) ~[!/:3.3.2]         at io.cloudsoft.winrm4j.client.WinRmFactory.doCreateServiceWithBean(WinRmFactory.java:97) ~[!/:?]         at io.cloudsoft.winrm4j.client.WinRmFactory.createService(WinRmFactory.java:33) [!/:?]         at io.cloudsoft.winrm4j.client.WinRmFactory.newInstance(WinRmFactory.java:21) [!/:?]         at io.cloudsoft.winrm4j.client.WinRmClient.getService(WinRmClient.java:191) [!/:?]         at io.cloudsoft.winrm4j.client.WinRmClient.<init>(WinRmClient.java:172) [!/:?]         at io.cloudsoft.winrm4j.client.WinRmClientBuilder.build(WinRmClientBuilder.java:194) [!/:?]         at io.cloudsoft.winrm4j.winrm.WinRmTool.executeCommand(WinRmTool.java:298) [!/:?]         at io.cloudsoft.winrm4j.winrm.WinRmTool.executeCommand(WinRmTool.java:216) [!/:?]         at org.apache.brooklyn.util.core.internal.winrm.winrm4j.Winrm4jTool$1.apply(Winrm4jTool.java:119) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.util.core.internal.winrm.winrm4j.Winrm4jTool$1.apply(Winrm4jTool.java:117) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.util.core.internal.winrm.winrm4j.Winrm4jTool.exec(Winrm4jTool.java:185) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.util.core.internal.winrm.winrm4j.Winrm4jTool.executeCommand(Winrm4jTool.java:117) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.winrm.WinRmMachineLocation.executeCommand(WinRmMachineLocation.java:308) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.jclouds.JcloudsLocation$5.call(JcloudsLocation.java:2518) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.jclouds.JcloudsLocation$5.call(JcloudsLocation.java:2514) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.util.repeat.Repeater.runKeepingError(Repeater.java:399) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.jclouds.JcloudsLocation.waitForReachable(JcloudsLocation.java:2741) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.jclouds.JcloudsLocation.waitForWinRmAvailable(JcloudsLocation.java:2567) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.jclouds.DefaultConnectivityResolver.checkCredential(DefaultConnectivityResolver.java:404) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.jclouds.DefaultConnectivityResolver.resolve(DefaultConnectivityResolver.java:196) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.jclouds.JcloudsLocation.obtainOnce(JcloudsLocation.java:807) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.location.jclouds.JcloudsLocation.obtain(JcloudsLocation.java:614) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ObtainLocationTask.call(MachineLifecycleEffectorTasks.java:448) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ObtainLocationTask.call(MachineLifecycleEffectorTasks.java:437) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.util.core.task.Tasks.withBlockingDetails(Tasks.java:114) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ProvisionMachineTask.call(MachineLifecycleEffectorTasks.java:418) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.entity.software.base.lifecycle.MachineLifecycleEffectorTasks$ProvisionMachineTask.call(MachineLifecycleEffectorTasks.java:393) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.util.core.task.DynamicSequentialTask$DstJob.call(DynamicSequentialTask.java:364) [!/:1.0.0-SNAPSHOT]         at org.apache.brooklyn.util.core.task.BasicExecutionManager$SubmissionCallable.call(BasicExecutionManager.java:565) [!/:1.0.0-SNAPSHOT]         at java.util.concurrent.FutureTask.run(FutureTask.java:266) [?:1.8.0_201]         at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_201]         at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_201]
        at java.lang.Thread.run(Thread.java:748) [?:1.8.0_201]
Caused by: com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 2 counts of IllegalAnnotationExceptions         at com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException$Builder.check(IllegalAnnotationsException.java:91) ~[?:1.8.0_201]         at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.getTypeInfoSet(JAXBContextImpl.java:445) ~[?:1.8.0_201]         at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:277) ~[?:1.8.0_201]         at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:124) ~[?:1.8.0_201]         at com.sun.xml.internal.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1123) ~[?:1.8.0_201]         at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:147) ~[?:1.8.0_201]         at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[?:1.8.0_201]         at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ~[?:1.8.0_201]         at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[?:1.8.0_201]
        at java.lang.reflect.Method.invoke(Method.java:498) ~[?:1.8.0_201]
        at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:222) ~[?:1.8.0_201]         at javax.xml.bind.ContextFinder.find(ContextFinder.java:396) ~[?:1.8.0_201]         at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:641) ~[?:1.8.0_201]         at org.apache.cxf.common.jaxb.JAXBContextCache.createContext(JAXBContextCache.java:357) ~[!/:3.3.2]         at org.apache.cxf.common.jaxb.JAXBContextCache.getCachedContextAndSchemas(JAXBContextCache.java:246) ~[!/:3.3.2]         at org.apache.cxf.jaxb.JAXBDataBinding.createJAXBContextAndSchemas(JAXBDataBinding.java:498) ~[!/:3.3.2]         at org.apache.cxf.jaxb.JAXBDataBinding.initialize(JAXBDataBinding.java:353) ~[!/:3.3.2]
        ... 43 more
```

Looking via a debugger to get the underlying IllegalAnnotatoinExceptions, I see:
```
((com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException)e.getCause()).getErrors()
 (java.util.Collections$UnmodifiableRandomAccessList<E>) [Two classes have the same XML type name "{http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd}objectFactory";. Use @XmlType.name and @XmlType.namespace to assign different names to them.
    this problem is related to the following location:
        at io.cloudsoft.winrm4j.client.transfer.ObjectFactory
    this problem is related to the following location:
        at io.cloudsoft.winrm4j.client.wsman.ObjectFactory, Two classes have the same XML type name "{http://schemas.dmtf.org/wbem/wsman/1/wsman.xsd}objectFactory";. Use @XmlType.name and @XmlType.namespace to assign different names to them.
    this problem is related to the following location:
        at io.cloudsoft.winrm4j.client.wsman.ObjectFactory
    this problem is related to the following location:
        at io.cloudsoft.winrm4j.client.shell.ObjectFactory]
```


_*INVESTIGATION OF ERROR*_

This thread gives some pointers: https://stackoverflow.com/questions/7361336/two-classes-have-the-same-xml-type-name-objectfactory

It suggests looking at how many javax.xml.bind.annotation.XMLRegistry classes you have on your classpath.

Via a debugger, I compared what happens in Karaf with CXF 3.3.2 and CXF 3.2.8:

```
io.cloudsoft.winrm4j.client.wsman.ObjectFactory.class.getAnnotations()[0].annotationType()
[CXV 3.2.8 output] (java.lang.Class<T>) interface javax.xml.bind.annotation.XmlRegistry [CXV 3.3.2 output] (java.lang.Class<T>) interface javax.xml.bind.annotation.XmlRegistry

io.cloudsoft.winrm4j.client.wsman.ObjectFactory.class.getAnnotations()[0].annotationType().getClassLoader()
[CXV 3.2.8 output] null
[CXV 3.3.2 output] (org.apache.felix.framework.BundleWiringImpl$BundleClassLoader) jakarta.xml.bind-api [108]
```

I interpret the null classloader as meaning it is from the system classloader (e.g. `java.lang.Object.class.getClassLoader()` also returns `null`).

Looking in Karaf using `bin/client` (with CXF 3.2.8):
```
package:exports | grep javax.xml.bind.annotation
javax.xml.bind.annotation.adapters    │ 2.2.8    │ 0   │ org.apache.felix.framework javax.xml.bind.annotation             │ 2.2.8    │ 0   │ org.apache.felix.framework

package:imports | grep winrm | grep javax.xml.bind.annotation
Package                               │ Version    │ Optional │ ID  │ Bundle Name javax.xml.bind.annotation.adapters │        │          │ 103 │ io.cloudsoft.windows.winrm4j-client javax.xml.bind.annotation │          │          │ 103 │ io.cloudsoft.windows.winrm4j-client
```

Compare that with CXF 3.3.2:
```
package:exports | grep javax.xml.bind.annotation
javax.xml.bind.annotation.adapters    │ 2.2.8    │ 0   │ org.apache.felix.framework javax.xml.bind.annotation.adapters    │ 2.3.2    │ 108 │ jakarta.xml.bind-api javax.xml.bind.annotation             │ 2.2.8    │ 0   │ org.apache.felix.framework javax.xml.bind.annotation             │ 2.3.2    │ 108 │ jakarta.xml.bind-api

package:imports | grep winrm | grep javax.xml.bind.annotation
Package                               │ Version        │ Optional │ ID  │ Bundle Name javax.xml.bind.annotation.adapters │ [2.3.0,3.0.0) │          │ 103 │ io.cloudsoft.windows.winrm4j-client javax.xml.bind.annotation │ [2.3.0,3.0.0) │          │ 103 │ io.cloudsoft.windows.winrm4j-client
```

Looking at where `jakarta.xml.bind-api` comes from in CXF 3.3.2 (it's not there when we use CXF 3.2.8):
```
feature:info cxf-specs

Running feature:info cxf-specs
Feature cxf-specs 3.3.2
...
Feature contains followed bundles:
  ...
  mvn:jakarta.xml.bind/jakarta.xml.bind-api/2.3.2 start-level=10
```
(The cxf-specs feature is a dependency of the cxf-core feature.)

Looking at the MANIFEST.mf (or the bundle:headers) of `winrm4j-client`:
With CXF 3.3.2, it has:
```
javax.xml.bind.annotation;version="[2.3,3)"
```
With CXF 3.2.8, it has:
```
javax.xml.bind.annotation
```
(i.e. no version range is specified).

I don't think there are code changes causing this - I think it is inferred from the CXF versions (or perhaps because newer maven plugin versions are used?)

But even if it didn't specify a version range with CXF 3.3.2, it would prefer the import from the newer version (i.e. from 2.3.2).


_*NEXT STEPS*_

We should report the issue on the CXF / Karaf mailing list - I'll do that.

I lean towards not fixing it (unless the CXF community come back with an easy answer).

If we did try to fix it, possibilities include:

1. Change winrm4j bundle's package imports to require 2.2.x of
   javax.xml.bind.annotation.
   But would that be compatible with the rest of the CXF package imports?
2. Or some other mechanism to force the annotation parsing to somehow
   use javax.xml.bind.annotation.XmlRegistry version 2.2.8 from
   org.apache.felix.framework?!
3. Or try to force use of a particular `JAXBContext` - but winrm4j
   isn't instantiating the JAXBContext.
   (e.g. https://stackoverflow.com/a/7483425/1393883 tries to force a
   particular `META-INF/services/javax.xml.bind.JAXBContext` at the
   classloader level).


Option (2) feels really hard and risky - the feature `cxf-specs` is pulling in `jakarta.xml.bind-api`, and `cxf-core` pulls in the feature `cxf-specs`. That feels very low level! There could be untold consequences of messing with the bind-api version at that level. Even if our smoke tests pass, I'd be worried about what else we might have broken.

Option (1) gives me some of the same worries as for (2) - we'd be importing a different javax.xml.bind.annotation compared to the bundles that the CXF packages come from. That kind of thing can cause weird ClassCastExceptions because things are using different classloaders.

My gut feel for option (3) is that it's the wrong road to be going down - it's fighting CXF rather than working with it!


_*MISCELLANEOUS DEBUGGING NOTES*_

I find the script below useful to get a dump of all the features and which bundles they bring in - I normally redirect the output to a file and search through that:
```
#!/bin/bash

for i in `./bin/client "feature:list" | grep -v "Uninstalled" | awk '{print $1}'`; do
    echo "Running feature:info ${i}"
    ./bin/client "feature:info ${i}"
    echo
    echo
done
```

On 02/12/2019 21:21, Geoff Macartney wrote:
It's always a bit of a maze, isn't it!

Thanks for looking into this Aled. I think it will be great to get things brought up to a consistent level with this latest Karaf.

Cheers
Geoff



On Mon, 2 Dec 2019 at 13:28, Aled Sage <aled.s...@gmail.com <mailto:aled.s...@gmail.com>> wrote:

    Hi all,

    TL;DR: I'm looking at upgading CXF from 3.2.8 to 3.3.2.

    ---

    For dependency:
         system//javax/mail/mail: [1.4.7, 1.4.4]

    Exploring this one shows that v1.4.4 is coming from the old cxf-specs
    3.2.8. The Karaf 4.2.7 announcement [1] gives a table of versions
    - it
    shows CXF at 3.3.2. We should look up updating CXF from 3.2.8 to
    3.3.2.

    That will also require an upgrade of mvn:io.cloudsoft.windows/winrm4j
    (as v0.7.0 is built against CXF 3.2.8).

    I'm looking into this, to see what else breaks when we switch to
    CXF 3.3.2.

    ---

    I suggest we ignore:
    system//org/apache/aries/spifly/org.apache.aries.spifly.dynamic.bundle:

    [1.2.2, 1.2]

    Feature 'jetty' brings in v1.2.2, whereas feature 'pax-jetty'
    brings in
    v1.2, so it's out of our control.

    Aled


    On 02/12/2019 10:38, Aled Sage wrote:
    > Hi all,
    >
    > I see there was great progress with the karaf version bump last
    week
    > and over the weekend, e.g. [1, 2].
    >
    > Looking at brooklyn master karaf dependency versions using `find
    > ${BROOKLYN_HOME}/system/ -name "*.jar"` and running a little
    program
    > to find multiple versions, I see the following concerning
    duplicates:
    >
    >
    system//org/apache/aries/spifly/org.apache.aries.spifly.dynamic.bundle:

    > [1.2.2, 1.2]
    > system//javax/mail/mail: [1.4.7, 1.4.4]
    >
    > The full list is:
    >
    > system//org/ow2/asm/asm: [5.2, 7.1]
    > system//org/ow2/asm/asm-util: [5.2, 7.1]
    > system//org/ow2/asm/asm-tree: [5.2, 7.1]
    > system//org/ow2/asm/asm-analysis: [5.2, 7.1]
    > system//org/ow2/asm/asm-commons: [5.2, 7.1]
    > system//org/yaml/snakeyaml: [1.23, 1.17]
    >
    system//org/apache/servicemix/bundles/org.apache.servicemix.bundles.jzlib:

    > [1.1.3_2, 1.0.7_1]
    >
    system//org/apache/servicemix/bundles/org.apache.servicemix.bundles.okhttp:

    > [3.4.1_1, 2.2.0_1]
    >
    system//org/apache/servicemix/bundles/org.apache.servicemix.bundles.okio:

    > [1.9.0_1, 1.2.0_1]
    >
    system//org/apache/aries/spifly/org.apache.aries.spifly.dynamic.bundle:

    > [1.2.2, 1.2]
    > system//javax/mail/mail: [1.4.7, 1.4.4]
    > system//javax/ws/rs/javax.ws <http://javax.ws>.rs-api: [2.0.1,
    2.1.1]
    >
    > Compare this with Brooklyn version 1.0.0-M1:
    >
    > system//org/ow2/asm/asm-all: [5.2, 5.0.2]
    > system//org/yaml/snakeyaml: [1.17, 1.22]
    >
    
system//org/apache/servicemix/specs/org.apache.servicemix.specs.activation-api-1.1:

    > [2.5.0, 2.6.0]
    >
    system//org/apache/servicemix/bundles/org.apache.servicemix.bundles.jzlib:

    > [1.1.3_2, 1.0.7_1]
    >
    system//org/apache/servicemix/bundles/org.apache.servicemix.bundles.okhttp:

    > [3.4.1_1, 2.2.0_1]
    >
    system//org/apache/servicemix/bundles/org.apache.servicemix.bundles.okio:

    > [1.9.0_1, 1.2.0_1]
    > system//org/apache/aries/org.apache.aries.util: [1.1.3, 1.1.0]
    > system//com/google/code/gson/gson: [2.5, 2.3]
    >
    > I'll take a look at these and see if they really are a problem
    or not.
    >
    > Aled
    >
    > [1] https://github.com/apache/brooklyn-server/pull/1068
    >
    > [2] https://github.com/apache/brooklyn-server/pull/1069
    >
    >
    >
    >
    > On 02/12/2019 09:27, Aled Sage wrote:
    >> Hi,
    >>
    >> Thanks Ludo, all: - great list, and +1 from me.
    >>
    >> I think most of those sound fairly small and manageable.
    >>
    >> The one that stands out as potentially hard is the "Karaf version
    >> bump" (which would fix the "Two different versions of
    jetty-server").
    >> We've had problems in the past getting all versions consistent,
    and
    >> karaf to start up fast and cleanly (without it restarting a
    bunch of
    >> bundles). Changing the version is really easy - getting all
    versions
    >> of all bundles to be consistent can be a pain! But it's worth
    doing.
    >>
    >> Aled
    >>
    >>
    >> On 01/12/2019 14:47, Geoff Macartney wrote:
    >>> We should definitely include
    >>> https://issues.apache.org/jira/browse/BROOKLYN-597 "Remove MD5
    and
    >>> SHA-1
    >>> checksums" as part of 1.0.0.  I'd be happy to do this but I
    see it's
    >>> got
    >>> you assigned to it Richard. Do you have work in progress on
    this, or
    >>> would
    >>> you like me to look into it? I have a notion that I might
    polish up the
    >>> signing procedure a bit.
    >>>
    >>> Cheers
    >>> Geoff
    >>>
    >>> On Sun, 1 Dec 2019 at 14:13, Geoff Macartney
    >>> <geoff.macart...@gmail.com <mailto:geoff.macart...@gmail.com>>
    >>> wrote:
    >>>
    >>>> Hi Ludo,
    >>>>
    >>>> I am indeed pleased to see this!  I had been thinking of
    mailing the
    >>>> community again on the matter after Christmas was out of the
    way,
    >>>> let's let
    >>>> 2020 be the year of Brooklyn 1.0.0!
    >>>>
    >>>> That's a great list of things to address. One thing to add
    would be
    >>>> removing some deprecated code. Do you think they are all small
    >>>> changes, or
    >>>> do any require extensive work or have a wide impact?
    >>>>
    >>>> The reason I ask is that I think it would be good to restrict
    >>>> ourselves to
    >>>> relatively easy and limited impact changes between now and
    1.0.0.
    >>>> My fear
    >>>> is that larger changes will take a longer time and push back a
    >>>> release even
    >>>> further. It seems to me things are quite stable now; I'd say
    let's
    >>>> polish
    >>>> it up and release it rather than try to make significant
    improvements.
    >>>>
    >>>> What does everyone think?
    >>>>
    >>>> Cheers
    >>>> Geoff
    >>>>
    >>>>
    >>>>
    >>>>
    >>>> On Thu, 28 Nov 2019 at 11:04, Ludovic Farine
    <l...@cloudsoft.io <mailto:l...@cloudsoft.io>>
    >>>> wrote:
    >>>>
    >>>>> Hi everyone,
    >>>>>
    >>>>> Hope you are all doing well!
    >>>>>
    >>>>> Christmas is fast approaching and well hopefully a gift we
    would
    >>>>> all like
    >>>>> to have: Brooklyn 1.0.0 release :) Geoff would be pleased to
    hear!
    >>>>>
    >>>>> Working towards this goal of first official release, these
    are a
    >>>>> few bug
    >>>>> fixes and improvements that I believe are worth considering
    >>>>> (non-exhaustive
    >>>>> and not ordered wishlist!) :
    >>>>>
    >>>>> Bug fixes:
    >>>>>
    >>>>>     -
    >>>>>
    >>>>>     Broken icon links for ELK and DNS entities
    >>>>>     -
    >>>>>
    >>>>>     REST API Swagger error
    >>>>>     -
    >>>>>
    >>>>>     Two different versions of jetty-server
    >>>>>     -
    >>>>>
    >>>>>     Karaf version bump
    >>>>>
    >>>>>
    >>>>> Improvements:
    >>>>>
    >>>>>     -
    >>>>>
    >>>>>     Session Management: introduce expiry settings for
    inactivity or
    >>>>> repeated
    >>>>>     background API calls
    >>>>>     -
    >>>>>
    >>>>>     User Experience: blueprints ordered by date deployed,
    cookies to
    >>>>>     remember preferred sort criteria and palette preferences
    >>>>>
    >>>>>
    >>>>> Clean-up:
    >>>>>
    >>>>>     -
    >>>>>
    >>>>>     Review existing open Pull Requests
    >>>>>     -
    >>>>>
    >>>>>     Fix most of the Jenkins tests
    >>>>>
    >>>>>
    >>>>> What are your thoughts on this scope? Any other suggestions you
    >>>>> would like
    >>>>> to deliver in this next release?
    >>>>>
    >>>>> Looking forward to get the community engaging in the next
    weeks and
    >>>>> months.
    >>>>>
    >>>>> Remember you can participate with others on the official Slack
    >>>>> channel
    >>>>> *#brooklyn* on the official Apache group. Sign up here
    >>>>> https://s.apache.org/slack-invite to join the discussion!
    >>>>>
    >>>>> Thanks
    >>>>>
    >>>>> Ludo
    >>>>>
    >>>>>
    >>>>> --
    >>>>>
    >>>>> Ludovic Farine
    >>>>>
    >>>>> Senior Technical Project Manager
    >>>>>
    >>>>>
    >>>>> Cloudsoft <https://cloudsoft.io/> | Bringing Business to the
    Cloud
    >>>>>
    >>>>> E: l...@cloudsoft.io <mailto:l...@cloudsoft.io>
    >>>>>
    >>>>> T: +44 7584 748013
    >>>>>
    >>>>> L: https://www.linkedin.com/in/ludovicfarine/
    >>>>>

Reply via email to