/*
 * 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 4.3.0
                  ================================
 Overview
 --------

Apache ServiceMix 4.3.0 is a major release of the OSGi based ServiceMix ESB platform.  This release contains many
bugfixes and feature enhancements over the 4.2.0 release.  ServiceMix 4.3.0 includes the following dependencies:

- Apache Felix Karaf 2.1.3 (http://karaf.apache.org)
  A lightweight OSGi container built on top of Apache Felix OSGi framework.  Karaf provides much of the core OSGi
  functionality and features (SSH shell, console commands, provisioning, blueprint XML support, etc...)

- Apache ServiceMix NMR 1.4.0
  An OSGi based NMR and JBI container, with a new clustering engine ready for enterprise deployment

- Apache ServiceMix Components 2011.01
  OSGi and JBI compatible components for common integration bindings such as FTP, HTTP, JMS, etc. as well as
  service engines such as Camel (Enterprise Integration Patterns), Quartz, JSR-223 Scripting, etc.


ServiceMix 4.3.0 also ships with a web console for administering and deploying endpoints and components,
additional OSGi bundles, and configuration files.  We also include support for running outof the box web applications
via WAR file deployment.  This release includes preliminary implementations of the OSGi Enterprise Specification 4.2
and includes support for OSGi fragment bundles.  OSGi framework support defauls to Apache Felix, but can be changed
via a simple configuration paramater to use Eclipse Equinox.

 Changelog
 ---------
The following list shows the bug fixes and enhancements included in this release.

Release Notes - ServiceMix 4 - Version 4.3.0

** Sub-task
* [SMX4-543] - Improve Camel NMR component to leverage async camel routing

** Bug
* [SMX4-398] - openjpa bundle should import the transaction package without optional flag
* [SMX4-415] - need add josql bundle to activemq feature
* [SMX4-417] - calling <setHeader> with <groovy> expression can delete message and headers
* [SMX4-455] - activemq feature missing dependencies; fails to start two bundles without camel-cxf installed
* [SMX4-489] - ServiceMix 4.x/ Fuse 4.2 hangs when using command dev:show-tree
* [SMX4-519] - Allow configuring Camel NMR endpoint to bypass thread pool for handling exchanges
* [SMX4-520] - NMR Destination should check Exchange Status and Mep Pattern
* [SMX4-522] - Camel NMR component: reponse NMR message contains reference to itself in property
* [SMX4-527] - cxf nmr transport should copy over property headers and attachment between cxf message and nmr message
* [SMX4-530] - servicemix-vfs fails with sftp
* [SMX4-539] - Inconsistent use of Endpoint.INTERFACE_NAME in cxf nmr transport
* [SMX4-541] - Jetty bundles export package is not correct
* [SMX4-548] - remove javax.script package from config.properties for jre export package
* [SMX4-561] - Servicemix flatpack component is missing the default fpconvert.properties, causing NullPointerException
* [SMX4-564] - stacktrace dumped on console when shutdown smx
* [SMX4-578] - Ensure that SecuritySubject is properly conveyed by cxf-nmr transport
* [SMX4-581] - xpp3 bundle is missing META-INF/services/org.xmlpull.v1.XmlPullParserFactory needed to support zero configuation operation mode
* [SMX4-585] - incorrect MTOM message for NMR transport
* [SMX4-602] - Update Karaf jre package
* [SMX4-608] - Drools package doesn't export org.drools.runtime.rule
* [SMX4-648] - Camel NMR component does not propagate Exception when using an InOnly MEP
* [SMX4-649] - config:* commands not available out-of-the-box
* [SMX4-652] - camel example doesn't work
* [SMX4-674] - ActiveMQ 5.4.1 feature has a missing dependency
* [SMX4-706] - specify version for cxf-codegen-plugin in pluginManagement to avoid downloading latest snapshot cxf-codegen-plugin
* [SMX4-708] - NMR adds null header in Camel Exchange ?
* [SMX4-709] - Features pom contains duplicate dependency declaration
* [SMX4-711] - check Exception from Camel Exchange at very first place to honor asyn processor in camel 2.5
* [SMX4-720] - Several poms contain old JIRA URL
* [SMX4-729] - "Ather URL Handler not available" messages in the log file
* [SMX4-735] - Problem on install camel-cxf component for unresolved dependency org.apache.servicemix.specs/org.apache.servicemix.specs.jsr311-api_1.0/1.6.0
* [SMX4-739] - add nmr features.xml dependency to make the kit build pass
* [SMX4-748] - Improve logging policy to avoid impact on performances
* [SMX4-749] - JBI deployer version range is not up to date
* [SMX4-760] - JAXB API and implementation version mismatch in Camel features descriptor

** Improvement
* [SMX4-512] - Upgrade to ActiveMQ 5.3.1
* [SMX4-523] - Use Camel Synchronization to ensure NMR exchange can be handled asynchronously
* [SMX4-531] - Update the jsmpp bundle to 2.1.0
* [SMX4-534] - Add quartz 1.8.1 bundle
* [SMX4-536] - Add Quartz 1.8.2 bundle
* [SMX4-538] - Add quartz 1.8.3 bundle
* [SMX4-544] - Update poms to not have warnings with Maven 3
* [SMX4-551] - upgrade to spring 3.x
* [SMX4-552] - Upgrade to ActiveMQ 5.4
* [SMX4-556] - Wrap the jaxb impl 2.1.13
* [SMX4-560] - Prepare the upgrade to ActiveMQ 5.4.0
* [SMX4-562] - Update flatpack to 3.2.0
* [SMX4-565] - Upgrade to Karaf 2.0.0
* [SMX4-567] - Normalize SMX4 naming convention of resources
* [SMX4-573] - Rome bundle should try to load the configure file from local bundle classloader as a fallback
* [SMX4-576] - Ensure that Subject is properly conveyed by camel-nmr component
* [SMX4-579] - extract common used classes for itests
* [SMX4-584] - Upgrade to the latest release of ServiceMix Bundles
* [SMX4-586] - The Camel examples uses @deprecated namespace
* [SMX4-588] - refactor NMRMessageHelper to use new api from cxf StaxUtis
* [SMX4-591] - Upgrade to ActveMQ 5.4.0
* [SMX4-592] - Add hibernate-validator 4.1.0.Final bundle
* [SMX4-598] - HSQLDB bundles.
* [SMX4-599] - Create drools-5.1.1 bundle with minimal set of dependencies
* [SMX4-600] - Create antlr-runtime 3.2 bundle
* [SMX4-601] - Upgrade to Karaf 2.1.0
* [SMX4-603] - Upgrade to Camel 2.5.0
* [SMX4-604] - Upgrade to CXF 2.2.11
* [SMX4-606] - Make the executors/threadpool viewable as JMX mbeans
* [SMX4-660] - Create OSGi wrap bundle for Jetty 6.1.25
* [SMX4-667] - Upgrade to JAXP 1.4.4
* [SMX4-673] - Upgrade to Karaf 2.1.1
* [SMX4-676] - Upgrade to Karaf 2.1.2
* [SMX4-689] - Upgrade to ActiveMQ 5.4.2
* [SMX4-710] - Add Camel NMR blueprint example
* [SMX4-713] - upgrade to cxf 2.3.1
* [SMX4-716] - Upgrade to SMX components 2010.02
* [SMX4-719] - Make camel-blueprint feature installed by default
* [SMX4-728] - Add a Camel blueprint example
* [SMX4-738] - remove org.apache.camel.osgi package import for camel-osgi example
* [SMX4-740] - JAXB-IMPL 2.1.13 Release
* [SMX4-741] - Upgrade to Karaf 2.1.3
* [SMX4-742] - Upgrade to Spring 3.0.5.RELEASE
* [SMX4-745] - Upgrade to Camel 2.6.0
* [SMX4-746] - Upgrade to CXF 2.3.2
* [SMX4-754] - Upgrade to ServiceMix Components 2011.01
* [SMX4-755] - Upgrade to ServiceMix NMR 1.4.0
* [SMX4-757] - Upgrade to Apache ODE 1.3.5

** New Feature
* [SMX4-558] - Add a wrap bundle of xmlbeans 2.5.0
* [SMX4-559] - Add the wrap bundle of jsch-0.1.43
* [SMX4-590] - Create OSGi bundle for Jasypt 1.6
* [SMX4-614] - Documentation: Add a Getting Started Guide
* [SMX4-675] - Bundles for Mongo DB

** Task
* [SMX4-524] - upgrade to cxf 2.2.7
* [SMX4-528] - upgrade to cxf 2.2.8
* [SMX4-533] - upgrade to cxf 2.2.9
* [SMX4-542] - Upgrade to Camel 2.4.0
* [SMX4-545] - Update SMX to use aries version of blueprint and latest Felix/Karaf stuff that also uses aries
* [SMX4-547] - upgrade to use new karaf artifacts
* [SMX4-553] - Upgrade to google protobuf 2.3.0
* [SMX4-557] - Upgrade to Velocity 1.6.4
* [SMX4-563] - upgrade aries to 0.1-r964701
* [SMX4-574] - add commons-digester-1.8 bundle
* [SMX4-575] - add commons-configuration-1.4 bundle
* [SMX4-582] - upgrade to activemq 5.4
* [SMX4-587] - upgrade to cxf 2.2.10
* [SMX4-593] - Create Bundles for SIP API and RI.
* [SMX4-607] - downgrade geronimo-annotation version to 1.0 from 1.1
* [SMX4-613] - Create a wrap bundle dozer 5.3.0
* [SMX4-668] - Upgrade to MVEL 2.0.18
* [SMX4-671] - add scala 2.8.1 bundle
* [SMX4-672] - Create a wrap bundle for Jetty 6.1.26
* [SMX4-707] - Fix the camel-nmr failed unit tests

** Test
* [SMX4-554] - fix itests failure
* [SMX4-568] - add cxf mtom test
* [SMX4-650] - fix loan-broker-drools-su test failure
* [SMX4-651] - add osgi service property for itests test client

** Wish
* [SMX4-540] - Jetty bundle 6.1.24


See the README file for more general informations about ServiceMix 4.

Thanks you for downloading ServiceMix.  Enjoy !

The ServiceMix Team
http://servicemix.apache.org/team.html

