/*
 * 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.1.6
                  ================================
 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.1.6 is a new minor release, which includes a few bug fixes and
a new version of Apache Karaf. This release includes:

- Apache ActiveMQ 5.10.2 (http://activemq.apache.org)
- Apache Camel 2.13.4 (http://camel.apache.org)
- Apache CXF 2.7.14 (http://cxf.apache.org)
- Apache Karaf 2.3.11 (http://karaf.apache.org)

 Changelog
 ---------

** Bug
    * [SM-2492] - Wrong sample keystore format in examples contained in the assembly
    * [SM-2551] - Drools6ExamplesTest fails on Jenkins

** Task
    * [SM-2405] - Remove workaround for SM-2396
    * [SM-2495] - Upgrade to Karaf 2.3.11
    * [SM-2503] - Release Apache ServiceMix 5.1.6


                      Apache ServiceMix 5.1.5
                  ================================
 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.1.5 is a new minor release, which includes a few bug fixes and
a new version of Apache Karaf, Apache Camel, Apache ActiveMQ and Apache CXF.  
This release includes:

- Apache ActiveMQ 5.10.2 (http://activemq.apache.org)
- Apache Camel 2.13.4 (http://camel.apache.org)
- Apache CXF 2.7.14 (http://cxf.apache.org)
- Apache Karaf 2.3.10 (http://karaf.apache.org)

 Changelog
 ---------
 
** Bug
    * [SM-2317] - activemq:browse no more working
    * [SM-2335] - installing both webconsole and activemq-web-console causes hang
    * [SM-2422] - Multiple JMS connection factories found for amq-broker

** Improvement
    * [SM-2426] - Add missing maven plugin versions to examples parent pom in the distribution

** Task
    * [SM-2407] - Release Apache ServiceMix 5.1.5
    * [SM-2421] - Upgrade to ActiveMQ 5.10.1
    * [SM-2431] - Upgrade to Karaf 2.3.10
    * [SM-2432] - Upgrade to ActiveMQ 5.10.2
    * [SM-2467] - Upgrade to Camel 2.13.4
    * [SM-2473] - Consistent usage of joda-time bundle
    * [SM-2474] - Consistent usage of scala bundle
    * [SM-2486] - Upgrade to CXF 2.7.14
    * [SM-2487] - Upgrade to Scala 2.10.4
    * [SM-2488] - Upgrade to Jackson 2.3.3


                     Apache ServiceMix 5.1.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.1.4 is a new minor release, which includes a few bug fixes and
a new version of Apache Karaf, Apache Camel and CXF.  This release includes:

- Apache ActiveMQ 5.10.0 (http://activemq.apache.org)
- Apache Camel 2.13.3 (http://camel.apache.org)
- Apache CXF 2.7.13 (http://cxf.apache.org)
- Apache Karaf 2.3.9 (http://karaf.apache.org)

 Changelog
 ---------

** Bug
* [SM-2346] - Can not resolve feature: camel-avro
* [SM-2396] - CXF WSN sample installation fails

** Improvement
* [SM-2388] - Add "update-strategy" to camel-blueprint example

** Task
* [SM-2380] - Create a overview page with servicemix roadmap
* [SM-2385] - Upgrade to Camel 2.13.3  and CXF 2.7.13
* [SM-2386] - Release Apache ServiceMix 5.1.4
* [SM-2397] - Upgrade to Karaf 2.3.9
* [SM-2398] - Upgrade maven plugins
* [SM-2399] - Upgrade to Apache POM 15 
* [SM-2400] - Upgrade to Felix maven-bundle-plugin 2.5.3
* [SM-2402] - Use correct cxf.codegen-plugin version
* [SM-2403] - Upgrade to maven-surefire-plugin 2.18


                     Apache ServiceMix 5.1.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.1.3 is a new minor release, which includes a few bug fixes and
a new version of Apache Karaf.  This release includes:

- Apache ActiveMQ 5.10.0 (http://activemq.apache.org)
- Apache Camel 2.13.2 (http://camel.apache.org)
- Apache CXF 2.7.11 (http://cxf.apache.org)
- Apache Karaf 2.3.8 (http://karaf.apache.org)

 Changelog
 ---------


** Bug
* [SM-2376] - Incorrect javax.annotation version for java7

** New Feature
* [SM-2381] - Web Script Console Plugin

** Task
* [SM-2371] - Upgrade to Karaf 2.3.8
* [SM-2374] - Release Apache ServiceMix 5.1.3


                      Apache ServiceMix 5.1.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.1.2 is a new minor release, which includes a few bug fixes and
a new version of Apache Karaf.  This release includes:

- Apache ActiveMQ 5.10.0 (http://activemq.apache.org)
- Apache Camel 2.13.2 (http://camel.apache.org)
- Apache CXF 2.7.11 (http://cxf.apache.org)
- Apache Karaf 2.3.7 (http://karaf.apache.org)

 Changelog
 ---------

** Bug
* [SM-2271] - Can't install hibernate-envers in SMX5
* [SM-2284] - Intermittent test failure in CamelExamplesTest.testCamelDroolsExample
* [SM-2301] - Problem installing activiti feature after upgrade to ActiveMQ 5.9.1
* [SM-2318] - Can't install Hibernate 3
* [SM-2319] - Connector feature not in sync with transaction
* [SM-2325] - Blueprint bean loading multiple times
* [SM-2352] - Release Apache ServiceMix 5.1.2
* [SM-2361] - cxf feature should be present as a boot feature

** Task
* [SM-2223] - Incorrect Information on Remote-debugging ServiceMix in Eclipse
* [SM-2320] - Upgrade to Karaf 2.3.6
* [SM-2354] - Upgrade to maven-bundle-plugin 2.5.0
* [SM-2363] - Require JDK 6 for build
* [SM-2365] - Upgrade to Karaf 2.3.7


                      Apache ServiceMix 5.1.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.1.1 is a new minor release, which includes a few bug fixes and
a new versions of Apache Camel.  This release includes:

- Apache ActiveMQ 5.10.0 (http://activemq.apache.org)
- Apache Camel 2.13.2 (http://camel.apache.org)
- Apache CXF 2.7.11 (http://cxf.apache.org)
- Apache Karaf 2.3.4 (http://karaf.apache.org)


 Changelog
 ---------

** Bug
* [SM-2287] - Bundle refresh problem when eventadmin is installed
* [SM-2324] - Use JcaPooledConnectionFactory instead of XaPooledConnectionFactory
* [SM-2337] - Can't install release bundles from a custom repository

** Improvement
* [SM-2341] - Improve WS-Security demos

** Task
* [SM-2313] - Trying to get person with unknown end with error in camel-cxf-soap example
* [SM-2314] - Trying to get person with unknown end with error in camel-cxf-rest example
* [SM-2332] - Remove Alfresco repository from org.ops4j.pax.url.mvn.cfg
* [SM-2340] - Upgrade to Camel 2.13.2
* [SM-2344] - Release Apache ServiceMix 5.1.1

** Test
* [SM-2255] - Intermittent test failure in StatsTest


                      Apache ServiceMix 5.1.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.1.0 is a new major release of the project, which includes:

- Apache ActiveMQ 5.10.0 (http://activemq.apache.org)
- Apache Camel 2.13.1 (http://camel.apache.org)
- Apache CXF 2.7.11 (http://cxf.apache.org)
- Apache Karaf 2.3.4 (http://karaf.apache.org)


 Changelog
 ---------

** Sub-task
* [SM-2297] - Recommend users to install Activiti through the boot features in the Activiti guide
* [SM-2301] - Problem installing activiti feature after upgrade to Camel 2.13.1
* [SM-2303] - ActiveMQ web console not installable after upgrade to 5.9.1
* [SM-2311] - Remove the shaded ActiveMQ web console

** Bug
* [SM-2244] - Uninstall activiti feature results in error
* [SM-2256] - Unable to shutdown container when JMS appender is configured
* [SM-2267] - Provide working configuration for activemq-web-console
* [SM-2269] - ActiveMQ quick start doesn't work due to the missing activemq component
* [SM-2277] - activiti-camel thrown ActivitiException when put document in delivery folder
* [SM-2279] - The jndi feature can not be installed
* [SM-2280] - Activiti test case fails after upgrade to 5.15.1
* [SM-2282] - Installation of the eventadmin feature fails
* [SM-2286] - Intermittent test failure in ActivitiExamplesTest.testActivitiCamelExample
* [SM-2309] - Add itest for camel-cxf-rest example
* [SM-2322] - !<history-number> executes wrong history entry

** Improvement
* [SM-2298] - Add a CXF SOAP with Camel example
* [SM-2299] - Add itest for cxf-wsn example
* [SM-2327] - Improve camel-cxf-rest example

** New Feature
* [SM-2288] - Add drools feature

** Task
* [SM-2229] - Upgrade to activiti version 5.15.1
* [SM-2245] - Upgrade to Pax Exam 3.5.0
* [SM-2270] - Merge ServiceMix archetypes with ServiceMix code base
* [SM-2273] - Release Apache ServiceMix 5.1.0
* [SM-2274] - Upgrade to Camel 2.13.0
* [SM-2281] - Upgrade to Karaf 2.3.5
* [SM-2283] - Align some versions duplicated after the Activiti upgrade
* [SM-2289] - Update ActiveMQ quick start after ServiceMix 5.0.1/5.1.0 release
* [SM-2292] - Upgrade to Camel 2.13.1
* [SM-2294] - Cleanup nonexisting cxf dependencies from dependency management
* [SM-2296] - Add the boot features to the system repository
* [SM-2306] - Update the README file
* [SM-2307] - Add itest for camel-cxf-soap example
* [SM-2308] - Add itest for camel-drools-blueprint example
* [SM-2312] - Remove placeholder configuration from the activemq-camel blueprint
* [SM-2315] - activemq:dstat fails after any messagin operation is performed
* [SM-2316] - Problems when reinstalling the drools examples
* [SM-2328] - Upgrade to ActiveMQ 5.10.0
* [SM-2329] - Downgrade to Karaf 2.3.4

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

