/*
 * 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.

 Java 1.5.0 support
 ------------------
To be able to run ServiceMix 4.3.0 using Java 1.5.0, you need to remove jaxp-ri-1.4.4.jar from the lib/endorsed folder.

 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
* [SMX4-761] - cxf-osgi example miss a package import which cause it fail with felix
* [SMX4-763] - Remove examples/web from the distribution
* [SMX4-764] - Override Apache Felix Framework version to 3.0.8 in the distribution
* [SMX4-765] - ServiceMix doesn't start with Java 1.5.0

** 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
* [SMX4-766] - Upgrade to Felix Framework 3.0.9

** 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

