/*
 * 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.6.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.6.3 is a new patch release, which includes a few bug fixes and
 a new version of Apache Camel and Apache CXF. This release includes:

 This is the last scheduled release of ServiceMix 5.x.

 - Apache ActiveMQ 5.12.3 (http://activemq.apache.org)
 - Apache Camel 2.16.5 (http://camel.apache.org)
 - Apache CXF 3.1.9 (http://cxf.apache.org)
 - Apache Karaf 2.4.4 (http://karaf.apache.org)

  Changelog
  ---------

** Sub-task
    * [SM-3223] - Add notice about usage of non-free json library

** Bug
    * [SM-2300] - Failed to query stty columns
    * [SM-2302] - BndUtils - Bundle cannot be generated
    * [SM-2323] - ServiceMix freezes if bundled is refreshed after feature install
    * [SM-2338] - cm:property-placeholder and camelContext conflict with each other on redeploy
    * [SM-2416] - Missing HttpWagon while upgrading to Karaf 2.4.1

** Task
    * [SM-3164] - Release Apache ServiceMix 5.6.3
    * [SM-3228] - Upgrade to Apache Camel 2.16.5 and Apache CXF 3.1.9


                       Apache ServiceMix 5.6.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.6.2 is a new patch release, which includes a few bug fixes and
 a new version of Apache Camel and Apache CXF. This release includes:

 - Apache ActiveMQ 5.12.3 (http://activemq.apache.org)
 - Apache Camel 2.16.4 (http://camel.apache.org)
 - Apache CXF 3.1.5 (http://cxf.apache.org)
 - Apache Karaf 2.4.4 (http://karaf.apache.org)

  Changelog
  ---------

 ** Task
     * [SM-3018] - Release Apache ServiceMix 5.6.2
     * [SM-3110] - Upgrade to Apache Camel 2.16.4


                      Apache ServiceMix 5.6.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.6.1 is a new patch release, which includes a few bug fixes and
a new version of Apache Camel and Apache CXF. This release includes:

- Apache ActiveMQ 5.12.3 (http://activemq.apache.org)
- Apache Camel 2.16.3 (http://camel.apache.org)
- Apache CXF 3.1.5 (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-2882] - Release Apache ServiceMix 5.6.1
    * [SM-2934] - Upgrade to Apache Camel 2.16.3 and Apache CXF 3.1.5


                      Apache ServiceMix 5.6.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.6.0 is a new minor release of the project, which includes:

- Apache ActiveMQ 5.12.3 (http://activemq.apache.org)
- Apache Camel 2.16.2 (http://camel.apache.org)
- Apache CXF 3.1.4 (http://cxf.apache.org)
- Apache Karaf 2.4.4 (http://karaf.apache.org)


 Changelog
 ---------

** Bug
    * [SM-2251] - Intermittent test failure in JMSAppenderTest
    * [SM-2824] - Missing dependencies in system folder
    * [SM-2848] - cxf-wsn-client client fails due to wrong slf4j version
    * [SM-2850] -  JMSAppenderTest.testReconnectToBroker fails

** Improvement
    * [SM-2395] - Download pages should correctly refer the documentation pages

** Task
    * [SM-2700] - Increase the java compilance level to 1.7
    * [SM-2707] - Upgrade to Activiti 5.19.0
    * [SM-2727] - Upgrade to Jackson 2.6.2
    * [SM-2741] - Upgrade to Apache Camel 2.16.1 and Apache CXF 3.1.4
    * [SM-2752] - Upgrade to depends-maven-plugin 1.3.1
    * [SM-2753] - Use maven properties like `${project.build.outputDirectory}` instead of `target/classes`
    * [SM-2754] - Release Apache ServiceMix 5.6.0
    * [SM-2763] - Upgrade to Activiti 5.19.0.1
    * [SM-2778] - Upgrade to Apache ActiveMQ 5.12.2
    * [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-2821] - Upgrade to Apache Camel 2.16.2
    * [SM-2844] - Upgrade to Activiti 5.19.0.2
    * [SM-2849] - Upgrade to Jackson 2.6.3
    * [SM-2858] - Upgrade to Apache ActiveMQ 5.12.3


                      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.32 (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

