/*
 * Licensed to the Apache Software Foundation (ASF) under one or more
 * contributor license agreements.  See the NOTICE file distributed with
 * this work for additional information regarding copyright ownership.
 * The ASF licenses this file to You under the Apache License, Version 2.0
 * (the "License"); you may not use this file except in compliance with
 * the License.  You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

                      Apache ServiceMix 5.5.4
                  ================================
 Overview
 --------

Apache ServiceMix is a flexible, open-source integration container that unifies the
features and functionality of Apache ActiveMQ, Camel, CXF, and Karaf into a powerful
runtime platform you can use to build your own integrations solutions.

Apache ServiceMix 5.5.4 is a new patch release, which includes a few bug fixes and
a new version of Apache Camel. This release includes:

- Apache ActiveMQ 5.12.3 (http://activemq.apache.org)
- Apache Camel 2.15.6 (http://camel.apache.org)
- Apache CXF 3.0.6 (http://cxf.apache.org)
- Apache Karaf 2.4.4 (http://karaf.apache.org)


 Changelog
 ---------


** Bug
    * [SM-2976] - stax-ex-1.7.6.jar is under CDDL+GPL  license

** Task
    * [SM-2881] - Release Apache ServiceMix 5.5.4
    * [SM-2933] - Upgrade to Apache Camel 2.15.6


                      Apache ServiceMix 5.5.3
                  ================================
 Overview
 --------

Apache ServiceMix is a flexible, open-source integration container that unifies the
features and functionality of Apache ActiveMQ, Camel, CXF, and Karaf into a powerful
runtime platform you can use to build your own integrations solutions.

Apache ServiceMix 5.5.3 is a new patch release, which includes a few bug fixes and
a new version of Apache Karaf and Apache ActiveMQ. This release includes:

- Apache ActiveMQ 5.12.3 (http://activemq.apache.org)
- Apache Camel 2.15.5 (http://camel.apache.org)
- Apache CXF 3.0.6 (http://cxf.apache.org)
- Apache Karaf 2.4.4 (http://karaf.apache.org)


 Changelog
 ---------

** Bug
    * [SM-2848] - cxf-wsn-client client fails due to wrong slf4j version

** Improvement
    * [SM-2395] - Download pages should correctly refer the documentation pages

** Task
    * [SM-2778] - Upgrade to Apache ActiveMQ 5.12.2
    * [SM-2780] - Release Apache ServiceMix 5.5.3
    * [SM-2806] - Ensure ServiceMix uses Apache Commons Collections 3.2.2
    * [SM-2808] - Avoid warnings about 'parent.relativePath' during the maven build
    * [SM-2816] - Upgrade to Apache Karaf 2.4.4
    * [SM-2858] - Upgrade to Apache ActiveMQ 5.12.3


                      Apache ServiceMix 5.5.2
                  ================================
 Overview
 --------

Apache ServiceMix is a flexible, open-source integration container that unifies the
features and functionality of Apache ActiveMQ, Camel, CXF, and Karaf into a powerful
runtime platform you can use to build your own integrations solutions.

Apache ServiceMix 5.5.2 is a new patch release, which includes a few bug fixes and
a new version of Apache Camel. This release includes:

- Apache ActiveMQ 5.12.1 (http://activemq.apache.org)
- Apache Camel 2.15.5 (http://camel.apache.org)
- Apache CXF 3.0.6 (http://cxf.apache.org)
- Apache Karaf 2.4.3 (http://karaf.apache.org)


 Changelog
 ---------

** Bug
    * [SM-2709] - RAT plugin reports a few missing license headers

** Task
    * [SM-2713] - Release Apache ServiceMix 5.5.2
    * [SM-2715] - Upgrade to Apache Camel 2.15.4
    * [SM-2739] - Upgrade to maven-release-plugin 2.5.3
    * [SM-2749] - Upgrade to Apache Camel 2.15.5
    * [SM-2752] - Upgrade to depends-maven-plugin 1.3.1
    * [SM-2753] - Use maven properties like `${project.build.outputDirectory}` instead of `target/classes`


                      Apache ServiceMix 5.5.1
                  ================================
 Overview
 --------

Apache ServiceMix is a flexible, open-source integration container that unifies the
features and functionality of Apache ActiveMQ, Camel, CXF, and Karaf into a powerful
runtime platform you can use to build your own integrations solutions.

Apache ServiceMix 5.5.1 is a new patch release, which includes a few bug fixes and
a new version of Apache ActiveMQ, Apache Camel and Apache CXF. This release includes:

- Apache ActiveMQ 5.12.1 (http://activemq.apache.org)
- Apache Camel 2.15.3 (http://camel.apache.org)
- Apache CXF 3.0.6 (http://cxf.apache.org)
- Apache Karaf 2.4.3 (http://karaf.apache.org)


 Changelog
 ---------

** Task
    * [SM-2621] - Upgrade to Apache Camel 2.15.3 and CXF 3.0.6
    * [SM-2623] - Release Apache ServiceMix 5.5.1
    * [SM-2653] - Upgrade to Apache ActiveMQ 5.11.2
    * [SM-2675] - Upgrade to depends-maven-plugin 1.3.0
    * [SM-2696] - Upgrade to maven-bundle-plugin 3.0.0
    * [SM-2697] - Upgrade to Pax Exam 4.6.0
    * [SM-2701] - Upgrade to ActiveMQ 5.12.1


                      Apache ServiceMix 5.5.0
                  ================================
 Overview
 --------

Apache ServiceMix is a flexible, open-source integration container that unifies the
features and functionality of Apache ActiveMQ, Camel, CXF, and Karaf into a powerful
runtime platform you can use to build your own integrations solutions.

Apache ServiceMix 5.5.0 is a new minor release of the project, which includes:

- Apache ActiveMQ 5.11.1 (http://activemq.apache.org)
- Apache Camel 2.15.2 (http://camel.apache.org)
- Apache CXF 3.0.4 (http://cxf.apache.org)
- Apache Karaf 2.4.3 (http://karaf.apache.org)


 Changelog
 ---------

** Sub-task
    * [SM-2415] - Add missing Spring Deployer bundle into startup.properties

** Bug
    * [SM-2317] - activemq:browse no more working
    * [SM-2330] - Remove joda-time from startup.properties
    * [SM-2422] - Multiple JMS connection factories found for amq-broker
    * [SM-2425] - Compilation of examples included in distribution fails
    * [SM-2464] - Unable to install the bundle created using the servicemix-cxf-code-first-osgi-bundle and servicemix-cxf-wsdl-first-osgi-bundle archetype
    * [SM-2481] - activemq-service blueprint uses dash in persistent id: config file is never loaded nor read
    * [SM-2485] - Add missing wrap deployer
    * [SM-2492] - Wrong sample keystore format in examples contained in the assembly
    * [SM-2535] - Upgrade to Apache Camel 2.15.2
    * [SM-2538] - JMSAppenderTest fails on Jenkins
    * [SM-2551] - Drools6ExamplesTest fails on Jenkins

** Task
    * [SM-2291] - Remove the workaround for the obr and jndi problem
    * [SM-2405] - Remove workaround for SM-2396
    * [SM-2421] - Upgrade to ActiveMQ 5.10.1
    * [SM-2426] - Add missing maven plugin versions to examples parent pom in the distribution
    * [SM-2428] - Upgrade to ActiveMQ 5.11.1
    * [SM-2432] - Upgrade to ActiveMQ 5.10.2
    * [SM-2438] - Upgrade to Camel 2.14.2
    * [SM-2468] - Upgrade to Camel 2.15.1
    * [SM-2469] - Upgrade to Activiti 5.17.0
    * [SM-2471] - Upgrade to Swagger 1.3.11
    * [SM-2472] - Upgrade to Scala 2.11
    * [SM-2473] - Consistent usage of joda-time bundle
    * [SM-2474] - Consistent usage of scala bundle
    * [SM-2475] - Upgrade to Akka 2.3.9
    * [SM-2487] - Upgrade to Scala 2.10.4
    * [SM-2488] - Upgrade to Jackson 2.3.3
    * [SM-2490] - Upgrade to CXF 3.0.4
    * [SM-2502] - Upgrade to Karaf 2.4.2
    * [SM-2506] - Upgrade to Felix maven-bundle-plugin 2.5.4
    * [SM-2507] - Upgrade to Pax Exam 4.5.0
    * [SM-2546] - Remove workarounds for SM-2472
    * [SM-2547] - Perform some housekeeping in poms
    * [SM-2555] - Upgrade to Karaf 2.4.3
    * [SM-2557] - Release Apache ServiceMix 5.5.0
    * [SM-2591] - Enable command RBAC support


See the README file for more general information about ServiceMix 5.

Thanks you for downloading ServiceMix.  Enjoy !

The ServiceMix Team
http://servicemix.apache.org/community/team.html

