/*
 * 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.4.2
                  ================================
 Overview
 --------

Apache ServiceMix 4.4.2 is a minor release of the OSGi based ServiceMix ESB platform.  This release contains a few core dependency
upgrades as well as some additional bug fixes.  ServiceMix 4.4.2 includes the following dependencies:

- Apache ActiveMQ 5.5.1 (http://activemq.apache.org)
- Apache Camel 2.8.5 (http://camel.apache.org)
- Apache CXF 2.4.6 (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
 ---------

** Improvement
    * [SMX4-1120] - remove some uncessary features

** Task
    * [SMX4-1109] - upgrade to wss4j 1.6.5 and xmlsec 1.5.1
    * [SMX4-1143] - Upgrade to Camel 2.8.5

** Wish
    * [SMX4-944] - Provide a SMX test jar


                      Apache ServiceMix 4.4.1
                  ================================
 Overview
 --------

Apache ServiceMix 4.4.1 is a minor release of the OSGi based ServiceMix ESB platform.  This release contains a few core dependency 
upgrades as well as some additional bug fixes.  ServiceMix 4.4.1 includes the following dependencies:

- Apache ActiveMQ 5.5.1 (http://activemq.apache.org)
- Apache Camel 2.8.4 (http://camel.apache.org)
- Apache CXF 2.4.6 (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
 ---------
 
 ** Bug
    * [SMX4-1024] - Incorrect Apache XML Security Version in POM
    * [SMX4-1094] - feature connector can't be load cause aries.version is not defined

** Improvement
    * [SMX4-1026] - Upgrade to CXF 2.4.5
    * [SMX4-1030] - Upgrade to Camel 2.8.4
    * [SMX4-1037] - some bundle miss dependency="true" in cxf-jaxrs feature
    * [SMX4-1044] - Upgrade to CXF 2.4.6

** Task
    * [SMX4-1031] - Release Apache ServiceMix 4.4.1
    * [SMX4-1082] - Upgrade to CXF 2.4.6


                      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

