/*
 * 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.5.1
                  ================================
 Overview
 --------

Apache ServiceMix 4.5.1 is a minor release of the OSGi based ServiceMix ESB platform.  This release picks up new versions of
Apache Camel and Apache CXF.  It also contains a few bug fixes/

ServiceMix 4.5.0 includes the following major dependency versions:
- Apache ActiveMQ 5.7.0 (http://activemq.apache.org)
- Activiti 5.10 (http://www.activiti.org)
- Apache Camel 2.10.4 (http://camel.apache.org)
- Apache CXF 2.6.6 (http://cxf.apache.org)
- Apache Karaf 2.2.10 (http://karaf.apache.org)
- Apache ServiceMix NMR 1.6.0
- Apache ServiceMix JBI Components 2013.01

 Changelog
 ---------

** Bug
    * [SMX4-1286] - Replace camel-activemq with activemq-camel
    * [SMX4-1380] - Exception when using CXF/SAAJ in ServiceMix 4.5.0
    * [SMX4-1399] - incorrect readme.txt files in cxf examples
    * [SMX4-1401] - cxf-ws-security-blueprint log4j warning + wrong README info
    * [SMX4-1405] - NMR example is broken

** Task
    * [SMX4-1318] - upgrade to cxf 2.6.6
    * [SMX4-1388] - Release Apache ServiceMix 4.5.1


                      Apache ServiceMix 4.5.0
                  ================================
 Overview
 --------

Apache ServiceMix 4.5.0 is a major release of the OSGi based ServiceMix ESB platform.  This release contains many
bugfixes and feature enhancements over the 4.5.0 release.  New features include support for Activiti and a JMS log
appender implementation.

ServiceMix 4.5.0 includes the following major dependency upgrades:
- Apache ActiveMQ 5.7.0 (http://activemq.apache.org)
- Activiti 5.10 (http://www.activiti.org)
- Apache Camel 2.10.3 (http://camel.apache.org)
- Apache CXF 2.6.3 (http://cxf.apache.org)
- Apache Karaf 2.2.10 (http://karaf.apache.org)
- Apache ServiceMix NMR 1.6.0
- Apache ServiceMix JBI Components 2013.01

 Changelog
 ---------

** Bug
    * [SMX4-537] - Startup script (bin/servicemix) misconfigures java.ext.dirs, breaking things like SSL in CXF
    * [SMX4-784] - activemq:list/activemq:query/activemq:bstat command doesn't work
    * [SMX4-1013] - Port already in use warning message in JBI assembly
    * [SMX4-1084] - ServiceMix won't boot when Felix 4.0.x is used
    * [SMX4-1094] - feature connector can't be load cause aries.version is not defined
    * [SMX4-1150] - Unable to install examples-cxf-jaxrs feature
    * [SMX4-1172] - upgrade to cxf 2.6.1
    * [SMX4-1193] - servicemix-shared feature is not self-contained
    * [SMX4-1204] - remove unnecessary runtime dependency for camel-nmr component
    * [SMX4-1206] - JBI configuration present in non-JBI assemblies
    * [SMX4-1207] - minimal kit by default will install activemq-broker.xml bundle
    * [SMX4-1258] - servicemix-saxon feature is missing dependencies
    * [SMX4-1271] - WarDeployer tries to load README file
    * [SMX4-1272] - Error installing 'connector' and 'activiti' features
    * [SMX4-1273] - cxf-nmr trasport should copy the message header which value is String as the Protocol Header
    * [SMX4-1276] - At examples-activiti-camel startup get  has *ERROR* Configuration
    * [SMX4-1277] - ResourceManager in activemq-broker.xml doesn't recover from TX after crash
    * [SMX4-1278] - Jetty logging to console
    * [SMX4-1285] - Activiti camel Test failed Order process lookup.
    * [SMX4-1287] - nmr toc has broken link
    * [SMX4-1314] -  CXF NMR transport throws NPE when it handles the fault message
    * [SMX4-1315] - Can't install servicemix-drools feature
    * [SMX4-1317] - activemq-broker.xml should be given start-level 50
    * [SMX4-1342] - Cxf examples that need org.apache.commons.httpclient does not start

** Improvement
    * [SMX4-1019] - Remove README file from deploy directory to avoid WarDeployer error message on TRACE
    * [SMX4-1037] - some bundle miss dependency="true" in cxf-jaxrs feature
    * [SMX4-1107] - Added cxf blueprint examples
    * [SMX4-1108] - Upgrade CXF version to 2.5.2
    * [SMX4-1120] - remove some uncessary features
    * [SMX4-1132] - cxf-ws-security-osgi/blueprint example should use smx/smx by default
    * [SMX4-1145] - add a new cxf ws-security example which demonstrate how to use signaturePropRefId in OSGi container
    * [SMX4-1179] - remove unecessary annotations from cxf nmr transport
    * [SMX4-1187] - Upgrade to XBean 3.11.1
    * [SMX4-1191] - Add support for Activiti
    * [SMX4-1224] - remove jetty6 bundle from  kit
    * [SMX4-1256] - Add Logstash event message format to JMS appender
    * [SMX4-1262] - remove jre.properties.cxf from SMX distribution
    * [SMX4-1313] - Add EnableCORSInterceptor for cxf related examples
    * [SMX4-1316] - add address/endpintName for dispatch process for CXF NMR transport
    * [SMX4-1319] - use StreamSource but not DOMSource for cxf-nmr-transport
    * [SMX4-1320] - missing features for cxf-jaxrs-blueprint and cxf-jaxws-blueprint example
    * [SMX4-1338] - Upgrade to Karaf 2.2.10

** Task
    * [SMX4-1004] - upgrade to cxf 2.5.1
    * [SMX4-1005] - upgrade to camel 2.9
    * [SMX4-1022] - wrap the smack bundle 3.2.1
    * [SMX4-1032] - add twitter4j-core and twitter4j-stream 2.2.5 bundle
    * [SMX4-1036] - Create Bundler wrap of saxon 9.3.0.11
    * [SMX4-1109] - upgrade to wss4j 1.6.5 and xmlsec 1.5.1
    * [SMX4-1115] - Align jdom version with Camel
    * [SMX4-1128] - Upgrade to Karaf 2.2.7
    * [SMX4-1129] - Upgrade to Camel 2.9.2
    * [SMX4-1130] - Upgrade to CXF 2.5.3
    * [SMX4-1131] - Upgrade to ActiveMQ 5.6.0
    * [SMX4-1134] - Upgrade to Camel 2.10.x
    * [SMX4-1135] - Upgrade to CXF 2.6.x
    * [SMX4-1146] - AWS SDK 1.3.10 bundle
    * [SMX4-1194] - Align http client version with Camel
    * [SMX4-1225] - upgrade to cxf 2.6.2
    * [SMX4-1227] - upgrade to camel 2.10.1
    * [SMX4-1228] - upgrade to spring 3.0.7.RELEAS
    * [SMX4-1241] - upgrade to karaf 2.2.9
    * [SMX4-1242] - endorse the smx spec api jar
    * [SMX4-1257] - Release Apache ServiceMix 4.5.0
    * [SMX4-1263] - upgrade to activemq 5.7.0
    * [SMX4-1267] - upgrade to cxf 2.6.3
    * [SMX4-1274] - upgrade to activiti 5.10
    * [SMX4-1275] - Add Activiti examples to the release
    * [SMX4-1323] - upgrade to saxon 9.3.0.11

** Wish
    * [SMX4-944] - Provide a SMX test jar


                      Apache ServiceMix 4.4.0
                  ================================
 Overview
 --------

Apache ServiceMix 4.4.0 is a major release of the OSGi based ServiceMix ESB platform.  This release contains many
bugfixes and feature enhancements over the 4.3.0 release.  ServiceMix 4.4.0 includes the following major dependency upgrades:

- Apache ActiveMQ 5.5.1 (http://activemq.apache.org)
- Apache Camel 2.8.3 (http://camel.apache.org)
- Apache CXF 2.4.4 (http://cxf.apache.org)
- Apache Karaf 2.2.4 (http://karaf.apache.org)
- Apache ServiceMix NMR 1.5.0
- Apache ServiceMix JBI Components 2011.02

 Changelog
 ---------

** Sub-task
    * [SMX4-220] - Extend the help command to display usefull help for all commands available
    * [SMX4-221] - The option --help on commands doesn't display good enough help
    * [SMX4-721] - Add complete distribution for offline deployments
    * [SMX4-884] - Rename existing assembly to apache-servicemix-4.x.0-jbi
    * [SMX4-885] - Add a basic distribution for new users
    * [SMX4-955] - Add minimal distribution to allow building any ServiceMix-based distribution

** Bug
    * [SMX4-206] - Apache ServiceMix 4 binary assembly zip file is not valid
    * [SMX4-246] - Avoid duplication of config files for NMR and Features assembly build
    * [SMX4-458] - Command activemq:list, activemq:browse return null
    * [SMX4-461] - Test failures in SMX4 Features' project on AIX
    * [SMX4-480] - Files in deploy folder before initial startup are getting deployed before boot features
    * [SMX4-518] - Camel NMR component WSSecurityTest fails
    * [SMX4-687] - ServiceMix 4.3.0-fuse-02-00 does not start correctly with fresh unzip on Windows
    * [SMX4-737] - Components Not Loading Before Routes
    * [SMX4-751] - Property replacement is broken in camel-blueprint examples
    * [SMX4-768] - bin/client script missing from Linux distribution
    * [SMX4-771] - simple example use out-of-date DocumentFactory
    * [SMX4-774] - artchetypes for servicemix-cxf-code-first-osgi-bundle and servicemix-cxf-code-first-osgi-bundle doesn't work
    * [SMX4-780] -  omit client script in bin folder
    * [SMX4-797] - Create OSGi bundle for RJC (Redis Java Client)
    * [SMX4-804] - ensure some bundle could be installed with OBR resolver
    * [SMX4-821] - wsdl4j bundle shouldn't import javax.wsdl as itself export it
    * [SMX4-853] - Simple quartz.xml example caue intermittent exception
    * [SMX4-867] - the endorsed xml-api jar can't correctly load org.apache.xpath.jaxp.XPathFactoryImpl class
    * [SMX4-869] - Missing class reference in the log:display output
    * [SMX4-873] - system bundle should export xerces and xalan package as we already endorse those jar
    * [SMX4-897] - reuse woodstox feature but not list seperate bundle
    * [SMX4-907] - BOM marker in camel-osgi Spring XML file not handled well on CI server
    * [SMX4-922] - Not all content of branding.properties is shown
    * [SMX4-926] - should add org.ops4j.pax.web.config.file properties to etc/org.ops4j.pax.web.cfg
    * [SMX4-932] - system.properties miss karaf.admin.role property
    * [SMX4-940] - ServiceMix features depends on non-existent version of geronimo servlet spec.
    * [SMX4-948] - Build failure when building with a clean maven repository (unable to determine JBI component)
    * [SMX4-962] - servicemix xstream 1.4.1 bundle incorrectly refer xstream 1.4
    * [SMX4-967] - remove saaj feature from add-features-to-repo
    * [SMX4-968] - distribution kit miss org.apache.karaf.features.obr bundles which cause startup failed
    * [SMX4-969] - features itests depends on old karaf management jar
    * [SMX4-980] - rename etc/org.ops4j.pax.web.cfg to etc/org.ops4j.pax.web.cfg.empty.stub
    * [SMX4-987] - simple/quartz.xml example output doesn't comply with the README
    * [SMX4-993] - The link to the FuseSource commercial documentation is broken
    * [SMX4-996] - examples won't build with clean Maven local repo

** Improvement
    * [SMX4-219] - The help of the shell commands is wrong or not sufficient and needs improvement
    * [SMX4-446] - Update Feature file of SMX4 to use HTTP feature of karaf and same version of jetty as camel feature file
    * [SMX4-572] - Cleanup POMs and provide a better build
    * [SMX4-597] - Use Camel feature
    * [SMX4-654] - Improve features.xml to leverage OBR improvements in Karaf
    * [SMX4-659] - Create bundle for jSch 0.1.44
    * [SMX4-722] - Update POMs to Maven3
    * [SMX4-727] - Consider dropping commons-logging for standard Java.util.logging
    * [SMX4-744] - specify camel feature bundle start level less than 60
    * [SMX4-772] - add configuration stub file for SSL pax-web suport for ease of users
    * [SMX4-775] - Provide assembly in JAR packaging as well
    * [SMX4-777] - Upgrade to Jetty 7.3.1.v20110307
    * [SMX4-778] - Rework the smx4 build to have better dependency handling
    * [SMX4-787] - Upgrade to ActiveMQ 5.5.1
    * [SMX4-791] - Make allowCoreThreadTimeOut name consistent across mbeans and properties
    * [SMX4-792] - Support run as subject for Camel NMR endpoint
    * [SMX4-793] - Support run as subject for CXF NMR endpoint
    * [SMX4-798] - Ensure OBR support is available before boot features are installed
    * [SMX4-799] - use the latest xerces to replace the jaxp-ri-1.4.4 to resolve cocurrent issue
    * [SMX4-801] - update a set of bundle version
    * [SMX4-802] - use features.xml from cxf
    * [SMX4-805] - Ignore the sun saaj package from the org.osgi.framework.bootdelegation
    * [SMX4-808] - Ignore the sun jaxb package from the org.osgi.framework.bootdelegation
    * [SMX4-809] - camel-cache ehcache cache repilication using ehcache-jmsreplication
    * [SMX4-812] - Upgrade FreeMarker to 2.3.16
    * [SMX4-815] - upgrade to cxf 2.4.0
    * [SMX4-825] - Support timeout property on Camel NMR endpoints
    * [SMX4-836] - Upgrade FreeMarker to 2.3.17
    * [SMX4-837] - Upgrade FreeMarker to 2.3.18
    * [SMX4-846] - Upgrade to Jetty 7.4.1.v20110513
    * [SMX4-852] - Add 'karaf-framework' to boot features to avoid uninstalling core Karaf bundles
    * [SMX4-854] - add avalon-framework-api bundle
    * [SMX4-855] - create avalon-framework-impl bundle
    * [SMX4-863] - upgrade to jetty 7.4.2.v20110526
    * [SMX4-870] - ">>>> JavaDSL set body:" displayed but not noted in the Camel/OSGi example's README.txt file
    * [SMX4-871] - README.txt file incomplete for "simple" example in regards to the wsn.xml file.
    * [SMX4-877] - create wrap bundle for axiom API and Impl 1.2.12
    * [SMX4-882] - specify start-level as 50 for default installed jbi component features which ensure jbi component related bundle can get started before customer bundles when restart OSGi container
    * [SMX4-883] - Alter packaging options to better reflect common use cases
    * [SMX4-899] - xerces and xalan SPI factory package should be added in custom.properties org.osgi.framework.bootdelegation
    * [SMX4-900] - add camel-blueprint as default installed feature
    * [SMX4-910] - install activemq-web-console feature should work out of the box
    * [SMX4-911] - use system properties to define activemq url
    * [SMX4-923] - add activemq-spring feature to featuresBoot
    * [SMX4-924] - should ship servlet api 2.5 but not servlet api 3.0
    * [SMX4-931] - Sample project module elements are missing from top-level POM.
    * [SMX4-938] - features.xml should reuse jetty feature from karaf
    * [SMX4-939] - Refactor features build to be independent of NMR build
    * [SMX4-943] - Camel NMR producer is not registered with its keyName but using the UUID
    * [SMX4-956] - Monitor etc/activemq-broker.xml for changes
    * [SMX4-957] - Add a name attribute to the features descriptors
    * [SMX4-960] - extract servicemix-soap and servicemix-soap2 bundle into servicemix-shared feature
    * [SMX4-966] - Connection refused to embedded broker when starting up
    * [SMX4-978] - Upgrade to Camel 2.8.3
    * [SMX4-979] - add specs feature to featuresBoot list ensure the specs bundle are available in time
    * [SMX4-981] - Reorganize examples by technology
    * [SMX4-988] - should add delay to camel timer of  camel-nmr and camel-nmr-blueprint example so that the nmr endpoint get chance to create
    * [SMX4-989] - create demo using Camel and local ActiveMQ broker
    * [SMX4-998] - cleanup cxf related examples to remove unnecessary package/resource import and Required-Bundle
    * [SMX4-999] - enhance cxf-ws-security-osgi example to leverage cxf JAASLoginInterceptor to authenticate against karaf default jaas configuration
    * [SMX4-1002] - Use SLF4J instead of Java standard logging for CXF in SMX
    * [SMX4-1008] - let cxf-ws-rm example use http osgi transport

** New Feature
    * [SMX4-776] - Create OSGi bundle for Perf4j
    * [SMX4-786] - Add a struts2-core and struts-xwork bundles for SMX project
    * [SMX4-794] - Provide a convenience POM for users

** Task
    * [SMX4-752] - Switch to use slf4j as logger (instead of commons-logging)
    * [SMX4-770] - Update to Karaf 2.2.0
    * [SMX4-781] - Upgrade to Camel 2.7
    * [SMX4-785] - upgrade to cxf 2.3.3
    * [SMX4-795] - Update to CXF 2.4.0
    * [SMX4-816] - Create JBoss Netty 3.2.4 bundle
    * [SMX4-820] - Create Bundle for cometd java server 2.1.1
    * [SMX4-834] - upgrade karaf version to 2.2.1
    * [SMX4-851] - Velocity bundle - Add dynamic imports so the #parse macro can load the resource
    * [SMX4-856] - Upgrade to Java Mail 1.4.4
    * [SMX4-858] - Quartz 2.0.1 bundle
    * [SMX4-861] - upgrade to cxf 2.4.1
    * [SMX4-876] - Upgrade to Karaf 2.2.2
    * [SMX4-880] - Release Apache ServiceMix 4.4.0
    * [SMX4-881] - Upgrade to Groovy 1.8.0
    * [SMX4-887] - Upgrade to Quartz 1.8.5
    * [SMX4-888] - Upgrade to Camel 2.8.0
    * [SMX4-896] - upgrade to cxf 2.4.2
    * [SMX4-902] - upgrade to cxf 2.4.2
    * [SMX4-903] - upgrade to jetty 7.4.5.v20110725
    * [SMX4-905] - Create a scala 2.9.1 bundle
    * [SMX4-906] - upgrade xmlsec and opensaml bundle version
    * [SMX4-908] - Upgrade to Camel 2.8.1
    * [SMX4-912] - upgrade to spring-dm 1.2.1
    * [SMX4-916] - upgrade to cxf 2.4.4
    * [SMX4-942] - upgrade to spring 3.0.6
    * [SMX4-952] - upgrade axiom version to 1.2.12
    * [SMX4-961] - XStream 1.4.2 bundle
    * [SMX4-995] - use same version of jsr311 as cxf 2.4.4



                      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

