/*
 * 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 Karaf 3.0.0.RC1
                    ======================

  Overview
  --------

  !! This is a technology preview release of Apache Karaf, and should NOT be considered production ready !!

  Apache Karaf 3.0.0.RC1 represents a major refactoring of the project, and includes numerous new features. We ask that users provide the community with their feed back so that the full Apache Karaf 3.0.0 release can be as feature complete and stable as possible.

  Changelog
  --------- 

** Sub-task
    * [KARAF-305] - New maven goal to create a kar file from a given feature / feature set
    * [KARAF-1095] - Update Branding Shell demo
    * [KARAF-1096] - Update Custom Command demo
    * [KARAF-1098] - Update Dump Provider demo
    * [KARAF-1099] - Update Web demo
    * [KARAF-1275] - Refactor bundle modules into core, command, management
    * [KARAF-1457] - Revert Aries JMX Update on SCR Management Component
    * [KARAF-1524] - Support creating a kar from the console
    * [KARAF-2228] - Karaf.webconsole uses wrong version in export-package header
    * [KARAF-2229] - Adapt karaf.webconsole package-imports/exports to felix.webconsole all-in-one bundle


** Bug
    * [KARAF-18] - features:list fails to show which bundles have been installed by featuresBoot if any exception is thrown during installation
    * [KARAF-281] - History using up arrow does not work on windows
    * [KARAF-384] - Cannot find some jar in ext directory
    * [KARAF-398] - Features schema is not correct
    * [KARAF-440] - features-maven-plugin throws NullPointerException maven 3.0.2
    * [KARAF-451] - Trunk build is broken
    * [KARAF-456] - Artifact versions named in the documentation are not replaced with the version of the current project
    * [KARAF-457] - Merge 2.2.x assemblies structure to trunk
    * [KARAF-468] - The admin InstanceImpl class should use the util properties for loading / storing rmiRegistryPort , sshPort
    * [KARAF-472] - features-maven-plugin: TAB-characters in feature-repository lead to resolution-errors in add-features-to-repo
    * [KARAF-479] - Console doesn't like it when the console window is to small - no line wrapping for commands
    * [KARAF-493] - Various site fixes
    * [KARAF-496] - Karaf prompt displayed twice
    * [KARAF-499] - Unable to load simple standalone JSF 2.0 webapp - JSF's implementation's META-INF/*.tld files are not scanned at startup
    * [KARAF-504] - Features Maven Plugin does not work with Maven 3
    * [KARAF-506] - The config shell commands offer no way to delete a command
    * [KARAF-507] - The config shell completer does not allow completion of factory based pids
    * [KARAF-508] - The config:edit create does not allow the creation of factory configs
    * [KARAF-509] - The config:update command does not save factory configurations to the correct file
    * [KARAF-512] - WebConsole installation failed due to missing jetty-jaas feature
    * [KARAF-518] - Unable to load features.xml with included schema attribute
    * [KARAF-519] - Jline behavior problem when pasting long lines
    * [KARAF-521] - Executing complex scripts is extremely difficult
    * [KARAF-525] - Bundles listed in etc/startup.properties should only installed the first time
    * [KARAF-527] - The console bundle should indicate it provides the gogo related services
    * [KARAF-528] - Error while using correct feature descriptor in features-maven-plugin
    * [KARAF-534] - Startlevel: Strange deployment behaviour
    * [KARAF-535] - Description for List command incorrectly claims Threshold default is -1
    * [KARAF-536] - Backspace no longer works in Putty after using 'connect' command to connect to other instance, and commands are printed in only 2 columns.
    * [KARAF-537] - admin.bat prints stacktraces to standard out
    * [KARAF-538] - Dependency issue with feature spring-web
    * [KARAF-546] - Null point exception when executing log:display on an empty log
    * [KARAF-547] - Missing features file in the system directory of the distribution
    * [KARAF-557] - Feature: Failed to check to not install a bundle with the symbolic name contains attributes
    * [KARAF-558] - Boot feature from configuration file, can contain some spaces; the name should be trimmed
    * [KARAF-559] - AdminService loses root flag for instances
    * [KARAF-562] - Config properties defined in <config> tag (features.xml) are loaded during each refresh
    * [KARAF-565] - junit bundle missing (required by dev commands)
    * [KARAF-568] - minimal assembly: zip and tar.gz do differ in content
    * [KARAF-569] - Installing and uninstalling the jetty feature leaves Karaf in an ususable state
    * [KARAF-575] - webconsole: branding isn't resolved, therfore the webconsole doesn't work anymore
    * [KARAF-583] - Karaf manual does not build with new karaf-maven-plugin
    * [KARAF-585] - When connected to a remote instance, Ctrl-C closes the connection instead of simply interrupting the command
    * [KARAF-600] - "Extending the console" documentation still refers to org.osgi.service.command
    * [KARAF-601] - features:list does not show features of newly installed feature file
    * [KARAF-604] - All bundles are considered as system bundle
    * [KARAF-610] - Can't input the path string completely via karaf shell
    * [KARAF-622] - Jaas Cancel command is not working
    * [KARAF-624] - admin:stop command behavior not correct
    * [KARAF-625] - Missing property 'log4j.appender.out.file' in the file org.ops4j.pax.logging.cfg caused a NPE
    * [KARAF-630] - SpringDeploymentListenerTest fails on IBM JDK builds with No Class Def Found Error
    * [KARAF-634] - README file refers an incorrect contribution URL
    * [KARAF-637] - Update branding-console documentation to include the changes to custom.properties
    * [KARAF-653] - Karaf minimal is missing the feature files.
    * [KARAF-655] - Remove http://repository.ops4j.org/maven2 from org.apache.karaf.management.cfg
    * [KARAF-656] - kar deployer service not exported
    * [KARAF-669] - Dependency artifacts should be available on the Maven central repo
    * [KARAF-670] - Missing ${karaf.base}/system cause NullPointerException
    * [KARAF-671] - http:list does not display the correct information
    * [KARAF-675] - Longer shell commands affect the shell view when using up and down arrows
    * [KARAF-686] - introduce an override flag to configfile element so that we get chance to not override the finalname if it already exist
    * [KARAF-689] - Karaf instance can wrongly obtain a lock when the locking table is empty on a Oracle DB
    * [KARAF-690] - install http feature will start both 8080 and 8181 jetty port
    * [KARAF-697] - features:list shows the features that failed installation as installed.
    * [KARAF-706] - variable substitution doesn't work for system.properties
    * [KARAF-712] - Karaf's ls command does not represent URL objects correctly
    * [KARAF-718] - Grep doesn't work when piped from features:listurl
    * [KARAF-735] - java.util.NoSuchElementException if issue the first command as an empty command
    * [KARAF-753] - commandlist --help points to help for jaas:pending
    * [KARAF-754] - shell:cat hyphen ("-") option not activating STDIN.
    * [KARAF-760] - MInor time rendering bug
    * [KARAF-766] - Wrong help for features:install
    * [KARAF-769] - Update NOTICE file to mention JSW
    * [KARAF-771] - KAR Deployer doesn't work
    * [KARAF-773] - KAR docu outdated
    * [KARAF-776] - jclouds features require OSS Sonatype repository
    * [KARAF-781] - Class RunnableServiceListener misspelled
    * [KARAF-794] - mvn eclipse:eclipse fails with maven plugin 2.8.
    * [KARAF-796] - Editing Pax Web Configuration Via Karaf Console
    * [KARAF-800] - karaf does not start when using java7
    * [KARAF-811] - Combination of wrap+mvn and instructions doesnt work any more
    * [KARAF-812] - Cannot start bundle built with org.osgi.framework v. 4.3.0
    * [KARAF-815] - Generic the Karaf manual link
    * [KARAF-816] - Wrapper feature doesn't load security libraries
    * [KARAF-820] - Karaf client.bat swallows commands to be passed to the Karaf instance
    * [KARAF-824] - Web demo folder in 2.2.2 release is missing content and README.txt has bugs
    * [KARAF-826] - KarArtifactInstaller should look for "features" classifier in place of "feature"
    * [KARAF-827] - Karaf Web deployer (Pax-Web) always tries to deploy the deploy/README file
    * [KARAF-867] - Inconsistent deployment behavior between bundle installer and feature installer
    * [KARAF-875] - Unable to define escape the event designator '!' using '\!'
    * [KARAF-883] - NPE in features-maven-plugin
    * [KARAF-889] - dev:framework commands incorrect workflow
    * [KARAF-891] - Problem with $ charact in wrap:mvn URL
    * [KARAF-892] - EventAdmin events from Gogo not being sent from Karaf's console bundle
    * [KARAF-893] - Wrong URL in release notes [1]
    * [KARAF-894] - Kar deployment failed
    * [KARAF-895] - NPE during webconsole startup
    * [KARAF-896] - Karaf webconsole exports wrong version of Felix webconsole package
    * [KARAF-902] - Jaas: Properties backing engine doesn't remove users
    * [KARAF-904] - add jetty.port=8181 to jetty.xml so that configuration for jetty connector could take effect
    * [KARAF-905] - propdel() method in the ConfigMBean didn't work
    * [KARAF-910] - Race between FeatureService and ConfigAdmin for resolving mvn: URLs?
    * [KARAF-913] - Omitted @Command on Gogo plugin is hard to debug because of NPE
    * [KARAF-915] - KAR deployment failed in the features XML is not the first entry of the KAR archive
    * [KARAF-917] - warn instead of info when failing to install a feature
    * [KARAF-918] - pax-url prerequisites for a feature are not respected
    * [KARAF-919] - Kar redeployment failed
    * [KARAF-920] - Feature autoinstall from kar failed
    * [KARAF-921] - maven eclipse plugin 2.8 does not work correctly with karaf
    * [KARAF-922] - features-maven-plugin ignores repository tags in feature files
    * [KARAF-923] - features-maven-plugin#AddFeaturesToRepoMojo does not handle spaces in repository urls well
    * [KARAF-926] - JAAS: Properties backing engine doesn't respect encryptor prefix and suffix
    * [KARAF-932] - ConfigMBean raise a NPE when dictionnary is null
    * [KARAF-935] - Deployer bundles do not start
    * [KARAF-937] - Karaf maven plugin generates feature configuration with dublicate entries
    * [KARAF-939] - the realm set for JAASLoginService in jetty.xml should be karaf but not the default
    * [KARAF-951] - dev:create-dump raises a NullPointerException
    * [KARAF-952] - config:propdel doesn't delete the property in the cfg file
    * [KARAF-954] - Double quotes missing in generated karaf-wrapper.conf
    * [KARAF-964] - admin feature is no more available in Karaf
    * [KARAF-982] - Utils.fromMaven cant deal with both classifier and extension
    * [KARAF-985] - LDAPLoginModule generates a large number of DirContext objects
    * [KARAF-1000] - Karaf distributions shouldn't include data and local-repo folders
    * [KARAF-1008] - WebConsole raise NCDF on service page
    * [KARAF-1015] - ConfigMBean should use a different config pid than the config shell
    * [KARAF-1020] - BundleWatcher should look for SNAPSHOT
    * [KARAF-1024] - Bug generating feature.xml when dependency has no manifest
    * [KARAF-1030] - Grep command breaks existing line formating
    * [KARAF-1031] - Performance issue in the features jaxb support
    * [KARAF-1033] - Set the Features validation optional
    * [KARAF-1036] - Some MBeans don't provide attribute correctly
    * [KARAF-1040] - Commands should not catch exceptions but should rethrow them
    * [KARAF-1050] - "osgi:start xxx" doesn't print anything
    * [KARAF-1051] - addcommand / removecommand / eval should be in the shell scope
    * [KARAF-1064] - BootstrapLogManager does not reuse the instantiated Handler
    * [KARAF-1065] - TextDumpProvider.createDump(DumpDestination) does not flush OutputStreamWriter
    * [KARAF-1066] - make features xml parser more forgiving
    * [KARAF-1067] - JDK7 compile issues with OsgiCommandSupport
    * [KARAF-1068] - Multiple blueprint plans using command namespace result in multiple converter registrations
    * [KARAF-1071] - Cursor keys do not work in Karaf shell on windows
    * [KARAF-1090] - deployers feature for fileinstall deployers that used to be in full profile
    * [KARAF-1101] - Completion does not work when quiesce manager is deployed
    * [KARAF-1106] - Jetty feature should use ServiceMix Spec for activation
    * [KARAF-1110] - Archetypes don't work
    * [KARAF-1111] - Add documentation about archetypes
    * [KARAF-1114] - osgi shell blueprint bundle shouldn't use lazy default-activation
    * [KARAF-1116] - Scripts fail at resolving java jdk.
    * [KARAF-1122] - Feature <configfile/> creates an empty file if the file URL is not resolved
    * [KARAF-1124] - karaf does not work properly with closing brace in the working directory path
    * [KARAF-1126] - features-maven-plugin:validate goal raises a NPE if karafConfig configuration is not set
    * [KARAF-1127] - Boot features failed to startup when karaf started from directory with closing brace; logs also unavailable
    * [KARAF-1131] - Remove PackageMBean and move operation to BundleMBean
    * [KARAF-1133] - Error executing command 'start' when starting a child instance
    * [KARAF-1139] - Redeploy kar cause installing old feature
    * [KARAF-1140] - config:list has NPE since it uses a service after ungetting the service reference
    * [KARAF-1143] - Karaf (Config Mbean) can not recognize the features when Karaf installation path containing blank space
    * [KARAF-1144] - When running a single remote command through SSH, the SCOPE variable isn't set
    * [KARAF-1149] - Karaf MBeanServer is not usable behind firewall
    * [KARAF-1150] - admin:create command creates broken org.ops4j.pax.url.mvn.cfg file
    * [KARAF-1158] - Karaf trunk fails to build on a clean repo
    * [KARAF-1161] - The shell:new action does not support the creation of arrays
    * [KARAF-1162] - A command that can not be loaded breaks the whole completion
    * [KARAF-1174] - war feature cannot be installed after the cxf
    * [KARAF-1175] - Duplicate key exception should be handle locally to avoid to affect the whole MBean
    * [KARAF-1178] - OBR feature doesn't work
    * [KARAF-1179] - "dev:watch *" doesn't notice new bundles added to the container
    * [KARAF-1188] - Console bundle depends on aries blueprint 0.3.x but imports [0.4.0,1)
    * [KARAF-1198] - Add Maven repository metadata in the system repository
    * [KARAF-1199] - dev:watch command issues "[WATCH]" announcements only to the issuing shell
    * [KARAF-1206] - Child instance doesn't start
    * [KARAF-1207] - Karaf tooling exam regression tests failing on NoSuchMethodError com.google.common.io.Files.deleteRecursively
    * [KARAF-1209] - ServiceRecipe blueprint exception in the log
    * [KARAF-1212] - NPE during update of the FeatureFinder
    * [KARAF-1215] - Shell scripts are incompatible with /bin/sh on Solaris
    * [KARAF-1216] - add-features-to-repo goal does not reclaim file handles fast enough
    * [KARAF-1219] - Assemblies ignore some resources
    * [KARAF-1220] - o.p.karaf.management bundles must stop when its configured keystore is not available
    * [KARAF-1222] - System shell hangs after karaf integration tests had been run
    * [KARAF-1225] - Manual build fails
    * [KARAF-1226] - Karaf Client cannot run a script
    * [KARAF-1228] - application-without-isolation enterprise feature doesn't install
    * [KARAF-1241] - admin script does not pass on JAVA_OPTS to instance
    * [KARAF-1242] - org.apache.karaf.scr.command format error
    * [KARAF-1243] - Karaf JMX Config MBean behaves in unpredictable ways
    * [KARAF-1244] - Deployer Transformers Supports Manifest Element without A Supporting Schema
    * [KARAF-1247] - maven-metadata-local.xml is not generated for bundles from a boot feature
    * [KARAF-1250] - Cleanup karaf-maven-plugin
    * [KARAF-1252] - Features core bundle should not depend to shell and management bundles
    * [KARAF-1253] - No completion on some commands with scope *
    * [KARAF-1256] - Archetypes should use dynamic variables
    * [KARAF-1257] - Configuration completers should avoid using getConfiguration method of config admin
    * [KARAF-1262] - Reintroduce package:* modules
    * [KARAF-1265] - Add AIX, HP-UX, Solaris, and "custom" support in the service wrapper
    * [KARAF-1267] - Align Pax-web features with std. features
    * [KARAF-1269] - aries-annotation feature doesn't install
    * [KARAF-1270] - Allow multiple commands in karaf 3.0.x bin/karaf script
    * [KARAF-1277] - Features deployer is not in the startup.properties
    * [KARAF-1278] - Comands: History does not work, can not edit current comand
    * [KARAF-1285] - Karaf 3.x - Karaf bundle archetype maven bundle plugin configuration is missing "instructions" tags.
    * [KARAF-1287] - Check documentation consistent
    * [KARAF-1293] - feature level start-level not completely finished....
    * [KARAF-1298] - dev:watch does not work in some cases
    * [KARAF-1304] - Quick help text for features:info command is erroneous
    * [KARAF-1305] - Error with Basic HTTP Authentication when using karaf realm
    * [KARAF-1318] - User bundles are treated as system bundles
    * [KARAF-1327] - Client: can't execute alias command
    * [KARAF-1331] - Source distribution is missing
    * [KARAF-1343] - Features repo points to the old pax-wicket app
    * [KARAF-1354] - SSH Log-In failes with "Authentication failed" with valid credentials
    * [KARAF-1359] - instance:create fails with Error executing command: Unable to find resource etc/config.properties
    * [KARAF-1360] - Configration update doesn't work
    * [KARAF-1362] - Karaf web console does not work on tabs features, http and  instance
    * [KARAF-1363] - Upgrade Jetty when bugfix for the Loggging to stderr bug is available
    * [KARAF-1367] - Remove line number logging from default logging config
    * [KARAF-1369] - Shell history does not log all commands
    * [KARAF-1370] - Loading snapshots from local repository does not work and the system dir should be read only
    * [KARAF-1374] - Fileinstaller logging by default is not enabled.
    * [KARAF-1388] - SSHD authorized key provider should log in DEBUG
    * [KARAF-1389] - SSH doesn't correctly use the karaf.base variable
    * [KARAF-1391] - Top-level build is missing obr module
    * [KARAF-1392] - Removing a KAR should uninstall the shipped features
    * [KARAF-1394] - Custom login modules not seen with Equinox
    * [KARAF-1395] - Instance commands are not started at bootstrap
    * [KARAF-1402] - Order in test framework generated features.xml is wrong
    * [KARAF-1406] - scanFeatures is incompatible with editing the etc/org.apache.karaf.features.cfg file
    * [KARAF-1407] - Use useDeployFolder(false) together with scan features fail
    * [KARAF-1411] - Spec activator doesn't start correctly
    * [KARAF-1416] - Blueprint archetype instructions is missing
    * [KARAF-1418] - Instance command imports an internal package from instance core
    * [KARAF-1430] - Default child instance config is not the same as the root instance
    * [KARAF-1439] - Re-add demos to Karaf 3.0 kits
    * [KARAF-1447] - Make the three big (cxf, amq, camel) play nicely with Karaf 3 without change
    * [KARAF-1450] - System bundles could be started without problems; all other bundles need to be forced
    * [KARAF-1452] - karaf-maven-plugin does not compile using java7
    * [KARAF-1455] - PAX Url (obr & war), Felix and Karaf (trunk) fight with each other resulting in an m_bundleLock
    * [KARAF-1459] - Problem with the OBR Resolver and Pax Web
    * [KARAF-1472] - Karaf manual references wrong artifacts
    * [KARAF-1482] - NullPointerException when deploying a feature without specified "install"-attribute
    * [KARAF-1483] - Help generation does not work for commands without noargs constructor
    * [KARAF-1485] - Use ShellTable in bundle:list
    * [KARAF-1487] - Bundles in deploy are deployed before startup process had been  finished
    * [KARAF-1491] - Admin service not able to start child instances when the JDK path contains a space on OS X
    * [KARAF-1496] - Bad login when using sufficient modules but when the first fail
    * [KARAF-1510] - Deployer kar demo Jenkins build issue
    * [KARAF-1513] - SSH keystore incompatible if generated with IBM JDK
    * [KARAF-1515] - features-generate-descriptor does not set the version in generated features
    * [KARAF-1528] - Web:List command not working anymore
    * [KARAF-1529] - command-watch messes the output when used with commands that take longer than the interval
    * [KARAF-1539] - kar feature should a boot one
    * [KARAF-1540] - featuresRepositories URL are not correct
    * [KARAF-1541] - jaas:realm-manage raises a NullPointerException
    * [KARAF-1544] - Several bugs in main around locking
    * [KARAF-1547] - NullpointerException when running commands on jdk 6 update 33 or jdk 7 update 5
    * [KARAF-1549] - Child instance features cfg file looks weird
    * [KARAF-1553] - Command service references should be AUTO_EXPORT_INTERFACES
    * [KARAF-1556] - standard-feature refers to non-existing "commands"-artifacts
    * [KARAF-1560] - config:update throws ClassCastException when used on a Configuration with boolean fields created in the web console
    * [KARAF-1561] - Restart Framework from Web Console's System Information tab results in Karaf dying
    * [KARAF-1564] - karaf feature validate plugin should support to load the exports packages from dependency features
    * [KARAF-1566] - instance:clone set the source instance in error
    * [KARAF-1571] - InstallKarsMojo fails to compile with jdk-7
    * [KARAF-1573] - Potential ZipFile leak at KarArtifactInstaller.install()
    * [KARAF-1585] - Installing using wrap protocol fails when specifying bundle version
    * [KARAF-1587] - When executing a command through the client, no error is printed in the console in case of errors
    * [KARAF-1591] - Upgrade to XBean 3.11.1
    * [KARAF-1596] - Karaf pom still refers geronimo-spec 1.0 whereas 1.1 is in use
    * [KARAF-1609] - command-watch info does not work
    * [KARAF-1617] - Blueprint deployer in combination with maven URL deployer creates wrong OSGi/blueprint/ file
    * [KARAF-1618] - Exception when restarting Karaf with shutdown -r . Can not delete jansi.dll
    * [KARAF-1624] - Rat checks fail
    * [KARAF-1635] - config.properties should be filtered
    * [KARAF-1655] - ManagementCfg configuratoinPointers in tooling-exam are incorrect
    * [KARAF-1666] - Default configuration for jetty.xml could create problems
    * [KARAF-1675] - Wrapper service requires a shell
    * [KARAF-1682] - Custom distribution section of dev guide is outdates
    * [KARAF-1683] - "no matching cipher found" error connecting via SSH to wrapper Karaf service - on Ubuntu
    * [KARAF-1695] - startup fails on Windows with only JRE installed
    * [KARAF-1699] - MBeans should support the same flags as the commands
    * [KARAF-1702] - Stopping the console bundle should not shutdown the osgi framework
    * [KARAF-1705] - Sync features between 2.3 and trunk
    * [KARAF-1713] - Build failure at manual module
    * [KARAF-1715] - Occasional freeze on feature:install webconsole
    * [KARAF-1723] - Provide meaningful thread names for karaf console
    * [KARAF-1734] - When logging into karaf with ssh as user karaf the prompt shows admin@root
    * [KARAF-1736] - Feature spring-struts can't be installed
    * [KARAF-1738] - features-generate-descriptor should support "install" attribute
    * [KARAF-1742] - Add command to show list of threads and stack traces
    * [KARAF-1746] - karaf github contributions rules
    * [KARAF-1751] - Spring feature dependencies specified too tightly
    * [KARAF-1754] - updating features.xml in auto deploy folder results in duplication
    * [KARAF-1756] - No SSH connection possible on Debian 6.0.5
    * [KARAF-1759] - No Way To Start obr Dependencies By Default
    * [KARAF-1765] - The obr Shell Deploy And Start Commands Always Deploy Optional Dependencies
    * [KARAF-1797] - NPE thrown from OsgiConfiguration.unregister
    * [KARAF-1803] - Servlets attribute doesn't work on HttpMBean
    * [KARAF-1804] - SystemMBean should support name attribute
    * [KARAF-1809] - Feature spring-web-portlet can't be installed
    * [KARAF-1814] - Cursor keys do not work when using bin/client on windows
    * [KARAF-1815] - When ssh'ing from a windows box into a unix box, arrow keys are not correctly interpreted
    * [KARAF-1824] - tooling-exam contains reference to wrong commons-io artifact
    * [KARAF-1827] - Build the manual within specific profiles
    * [KARAF-1835] - NPE in jaas:realm-manage command when multiple realm with the same name are present and not login module name is provided.
    * [KARAF-1838] - PackageMBean should return List<String> and support operation with bundleId
    * [KARAF-1839] - system bundle also should export javax.xml.ws.spi.http package
    * [KARAF-1840] - should also endorse saaj-api
    * [KARAF-1843] - SystemMBean reboot(time, cleanup) operation always cleanup
    * [KARAF-1845] - Minimal distribution doesn't start
    * [KARAF-1846] - jre.properties is corrupt in 3.0.0-SNAPSHOT
    * [KARAF-1851] - inconsistent FeaturesNamespaces versions
    * [KARAF-1853] - Attached kar deploys to a different snapshot build number than the main artifact
    * [KARAF-1861] - Test failure in exam regression tests : KarafWithBundleTest
    * [KARAF-1887] - Make integration tests more reliable by making sure the boot is finished
    * [KARAF-1900] - create project for private compendium build for java 7
    * [KARAF-1905] - ASM4 causes the Proxy/Weaving of Xerces, but that then causes validation factories to fail.
    * [KARAF-1914] - SSH client authentication randomly fails
    * [KARAF-1936] - LDAPLoginModule not working in 2.3.0 due to missing import of javax.net.SocketFactory
    * [KARAF-1938] - Lock logic should wait for start level change to occur
    * [KARAF-1963] - incorrect statement in developers-guide/branding-console.html
    * [KARAF-1978] - if use script to start a child instance then using karaf console admin:list can't get the instance correct status
    * [KARAF-1986] - instance.properties file doesn't get updated if karaf.name is changed
    * [KARAF-1992] - PropertiesLoginModule handles usernames with backslash not correct
    * [KARAF-2007] - features without start-level in features.xml are always started first
    * [KARAF-2008] - respectStartLvlDuringFeatureStartup does not respect feature-start-levels (only bundles)
    * [KARAF-2009] - Error on visualize Licences page
    * [KARAF-2011] - dev:watch looks in an incorrect local maven repository
    * [KARAF-2014] - karaf-maven-plugin uses null for karafVersion by default
    * [KARAF-2016] - Hudson paths hard coded in assembled zip and tar.gz distributions
    * [KARAF-2019] - Wrapper doesn't display all Linux statements
    * [KARAF-2026] - Two broken links on remote console manual page
    * [KARAF-2027] - invalid password option for admin:connect command in documenation
    * [KARAF-2029] - delete.user option missing from JDBCLoginModule
    * [KARAF-2035] - Not able to clone the root instance
    * [KARAF-2037] - karaf 3.0 with gemini blueprint
    * [KARAF-2051] - Duplicate definition of org.ops4j.pax.url.mvn.localRepository in org.ops4j.pax.url.mvn.cfg
    * [KARAF-2052] - Progress bar doesn't display properly on 80 char consoles
    * [KARAF-2057] - NOTICE and LICENSE files are not correct
    * [KARAF-2058] - ensure find the root instance entry when update root karaf instance name in instances.properties
    * [KARAF-2067] - instance-script terminates with NoClassDefFoundError
    * [KARAF-2074] - ensure admin service always load storage file instance.properties before each operation
    * [KARAF-2095] - Camel Route (JMS Polling) not working when installing feature "jndi"
    * [KARAF-2096] - Upgrade to Pax Exam 2.6.0
    * [KARAF-2115] - Sync weaving behavior between root and child instances
    * [KARAF-2117] - LDAP login module is broken
    * [KARAF-2133] - Generated title contain unresolved placeholder
    * [KARAF-2134] - Features deployer does not support mvn urls
    * [KARAF-2135] - Issue with jledit addition
    * [KARAF-2136] - ServiceMix Spec property mispelled in etc/system.properties
    * [KARAF-2143] - Remove Jetty JUL logger configuration
    * [KARAF-2144] - MainStartTest test fails when methods are executed in reverse order
    * [KARAF-2152] - wrong version for pax-jetty
    * [KARAF-2154] - Entering an empty command removes previous command in history
    * [KARAF-2155] - Wrapper/service does not start for karaf 3
    * [KARAF-2158] - Test InstanceServiceImplTest#testToSimulateRenameInstanceByExternalProcess fails when run isolated
    * [KARAF-2167] - org.apache.karaf.tooling.exam.container.internal.adaptions.KarafManipulatorFactory creates invalid version qualifier
    * [KARAF-2171] - Start Karaf as service shows 'Activator' error in wrapper.log
    * [KARAF-2178] - remove karaf-org.osgi.core.jar
    * [KARAF-2181] - jpa feature can't be installed "out of the box"
    * [KARAF-2188] - JPA bundle error out at shutdown
    * [KARAF-2189] - blueprint disable service too soon at shutdown
    * [KARAF-2191] - Karaf 3.0.x CLONE - Karaf startup fails with NullPointerException when logfile can't be written
    * [KARAF-2193] - Upgrade to Pax URL 1.5.2
    * [KARAF-2194] - Karaf regression test fails on BootClasspathLibraryOptionTest
    * [KARAF-2209] - Allow overriding system properties
    * [KARAF-2215] - <packaging>kar</packaging> fails to attach artifact
    * [KARAF-2220] - spring-jms feature shouldn't depend on spring-web
    * [KARAF-2221] - The admin service is not safe when used to create / start agents quickly
    * [KARAF-2225] - jaas PropertiesLoginModule does not complain when users.properties is not found but fails later
    * [KARAF-2226] - Properties with pathname are not correct on windows in jaas PropertiesLoginModule

** Dependency upgrade
    * [KARAF-449] - Upgrade to PAX-WEB 1.1.0 (SNAPSHOT right now)
    * [KARAF-529] - Upgrade to Pax URL 1.3.2
    * [KARAF-582] - Upgrade Apache Mina to 2.0.3
    * [KARAF-590] - Upgrade to pax-logging 1.6.2
    * [KARAF-591] - Upgrade aopalliance ServiceMix bundle to 1.0_5
    * [KARAF-592] - Upgrade asm ServiceMix bundle to 3.3_2
    * [KARAF-593] - Upgrade cglib ServiceMix bundle to 2.1_3_7
    * [KARAF-594] - Upgrade commons-codec ServiceMix bundle to 1.3_4
    * [KARAF-595] - Upgrade commons-collections ServiceMix bundle to 3.2.1_2
    * [KARAF-596] - Upgrade commons-lang ServiceMix bundle to 2.4_5
    * [KARAF-597] - Upgrade jasypt ServiceMix bundle to 1.7_3
    * [KARAF-598] - Upgrade junit ServiceMix bundle to 4.7_3
    * [KARAF-607] - Upgrade felix-framework to 3.2.1
    * [KARAF-613] - Upgrade to Blueprint 0.3.1
    * [KARAF-672] - Upgrade to felix event admin 1.2.12
    * [KARAF-679] - Update jansi to version 1.6
    * [KARAF-681] - Upgrade to Pax URL 1.3.4
    * [KARAF-682] - upgrade to jetty 7.4.2.v20110526
    * [KARAF-757] - upgrade to jetty 7.4.4.v20110707
    * [KARAF-767] - Upgrade to Felix Framework 3.2.2
    * [KARAF-768] - Upgrade to Eclipse Equinox 3.6.2.R36x_v20110210
    * [KARAF-770] - Upgrade to Eclipse Equinox 3.7.1
    * [KARAF-789] - Upgrade jetty to 7.4.5.v20110725
    * [KARAF-791] - Upgrade paxurl to 1.3.5
    * [KARAF-793] - Upgrade paxrunner to 1.7.5
    * [KARAF-797] - Upgrade to Pax Web 1.1.1
    * [KARAF-834] - Upgrade to Spring 3.0.6 - in std. features.xml
    * [KARAF-854] - Upgrade to Felix Framework 4.0.1
    * [KARAF-855] - Add support for OSGi R4.3
    * [KARAF-903] - Upgrade to Pax Web 1.1.2
    * [KARAF-928] - Support of Gemini Blueprint
    * [KARAF-961] - Update Mina SSHD to version 0.6.0
    * [KARAF-962] - Update easymock to version 2.5.2
    * [KARAF-966] - Update xbean to 3.8
    * [KARAF-989] - Upgrade to Aries Application 0.4
    * [KARAF-990] - Upgrade to Aries JMX 0.4
    * [KARAF-991] - Upgrade to Aries JPA 0.4
    * [KARAF-992] - Upgrade to Aries JNDI 0.4
    * [KARAF-993] - Upgrade to Aries Proxy 0.4
    * [KARAF-994] - Upgrade to Aries Transaction 0.4
    * [KARAF-995] - Upgrade to Aries Util 0.4
    * [KARAF-998] - upgrade to jetty 7.5.4.v20111024
    * [KARAF-1028] - Upgrade to Felix Framework 4.0.2
    * [KARAF-1042] - Upgrade to jline 2.6
    * [KARAF-1092] - Upgrade to Jasypt 1.8
    * [KARAF-1107] - Karaf should use directly commons-* bundles
    * [KARAF-1120] - Upgrade to Spring 3.1.0.RELEASE
    * [KARAF-1135] - Upgrade pax exam to 2.4.0
    * [KARAF-1154] - Upgrade to eventadmin 1.2.14
    * [KARAF-1155] - Upgrade to Apache POM 10
    * [KARAF-1163] - Upgrade to Guava 11.0.1
    * [KARAF-1172] - Upgrade to Aries JNDI API 1.0.0
    * [KARAF-1177] - Upgrade to standalone tinybundle 1.0.0
    * [KARAF-1183] - Upgrade to slf4j 1.6.4
    * [KARAF-1184] - Upgrade to JUnit 4.10
    * [KARAF-1185] - Upgrade to Pax Logging 1.6.5
    * [KARAF-1192] - Upgrade to pax-web 2.0.0
    * [KARAF-1193] - Upgrade to pax-url 1.4.0.RC1
    * [KARAF-1201] - Update jline groupid in main pom and shell/console/pom
    * [KARAF-1205] - Upgrade to maven-bundle-plugin 2.3.7
    * [KARAF-1224] - Upgrade to Spring 3.1.1.RELEASE
    * [KARAF-1229] - Upgrade to jansi 1.8
    * [KARAF-1230] - Upgrade to jansi 1.8
    * [KARAF-1231] - Upgrade to EasyMock 3.1
    * [KARAF-1232] - Upgrade to Jasypt 1.9.0
    * [KARAF-1233] - Upgrade to asm 3.3.1
    * [KARAF-1258] - Upgrade to Jetty 8.1.4
    * [KARAF-1259] - Upgrade to pax-url 1.4.0
    * [KARAF-1272] - Upgrade to fileinstall 3.2.0
    * [KARAF-1346] - Upgrade to Mina 2.0.4
    * [KARAF-1378] - Upgrade to fileinstall 3.2.2
    * [KARAF-1456] - Upgrade to blueprint 1.0.0
    * [KARAF-1458] - Upgrade to ServiceMix Specs 2.0
    * [KARAF-1490] - upgrade to pax-logging 1.6.7
    * [KARAF-1517] - Upgrade to OSGi Compendium 4.3.0
    * [KARAF-1518] - Avoid to depend to OSGi Compendium
    * [KARAF-1520] - Upgrade to Jansi 1.9
    * [KARAF-1526] - Upgrade to pax-url 1.4.2
    * [KARAF-1531] - Upgrade to Felix ConfigAdmin 1.4.0
    * [KARAF-1534] - Upgrade to JLine 2.7
    * [KARAF-1535] - Upgrade to Felix Utils 1.2.0
    * [KARAF-1536] - Upgrade to Felix FileInstall 3.2.4
    * [KARAF-1567] - Upgrade to pax-web 2.0.1
    * [KARAF-1568] - Upgrade to sshd 0.7.0
    * [KARAF-1570] - Upgrade maven-external-dependency-plugin to 0.5
    * [KARAF-1577] - Upgrade to slf4j 1.6.6
    * [KARAF-1578] - Upgrade to pax-logging 1.6.9
    * [KARAF-1579] - Upgrade to commons-compress 1.4.1
    * [KARAF-1581] - Upgrade to commons-jexl 2.1.1
    * [KARAF-1582] - Upgrade to Felix BundleRepository 1.6.6
    * [KARAF-1592] - Upgrade to quiesce api 1.0.1-SNAPSHOT
    * [KARAF-1597] - Upgrade to geronimo-jaspic 1.1
    * [KARAF-1598] - Upgrade to pax-runner 1.7.6
    * [KARAF-1599] - Upgrade to pax-swissbox 1.5.1
    * [KARAF-1601] - Upgrade to maven-antrun-plugin 1.7
    * [KARAF-1603] - Upgrade to maven-surefire-plugin 2.12
    * [KARAF-1604] - Upgrade to maven-assembly-plugin 2.3
    * [KARAF-1606] - Upgrade to maven-compiler-plugin 2.5.1
    * [KARAF-1608] - Upgrade to maven-dependency-plugin 2.4
    * [KARAF-1610] - Upgrade to maven-eclipse-plugin 2.9
    * [KARAF-1611] - Upgrade to maven-enforcer-plugin 1.1
    * [KARAF-1612] - Upgrade to maven-enforcer-plugin 1.1
    * [KARAF-1613] - Upgrade to maven-jar-plugin 2.4
    * [KARAF-1615] - Upgrade to maven-javadoc-plugin 2.8.1
    * [KARAF-1616] - Upgrade to maven-release-plugin 2.3.2
    * [KARAF-1619] - Upgrade to maven-remote-resources-plugin 1.3
    * [KARAF-1620] - Upgrade to maven-shade-plugin 1.7
    * [KARAF-1621] - Upgrade to maven-site-plugin 3.1
    * [KARAF-1622] - Upgrade to maven-war-plugin 2.2
    * [KARAF-1623] - Upgrade to apache-rat-plugin 0.8
    * [KARAF-1630] - Upgrade to Aries Util 1.0.0
    * [KARAF-1631] - Upgrade to Aries Blueprint API 1.0.0
    * [KARAF-1632] - Upgrade to Aries JMX API 1.0.0
    * [KARAF-1634] - Upgrade to Felix Framework 4.0.3
    * [KARAF-1636] - Upgrade to Equinox 3.8
    * [KARAF-1638] - Upgrade to Pax Web 2.0.1
    * [KARAF-1642] - Upgrade to exec-maven-plugin 1.2.1
    * [KARAF-1643] - Upgrade to jaxb2-maven-plugin 1.3.1
    * [KARAF-1644] - Upgrade to Aries JNDI API 1.0.0
    * [KARAF-1645] - Upgrade to Aries Quiesce Manager 1.0.0
    * [KARAF-1646] - Upgrade to Pax Web 2.0.2
    * [KARAF-1649] - Upgrade to Aries JPA API 1.0.0
    * [KARAF-1650] - Upgrade to Aries Blueprint Annotation API 1.0.0
    * [KARAF-1651] - Upgrade to Aries JMX Blueprint API 1.0.0
    * [KARAF-1652] - Upgrade to Aries JMX Core 1.0.0
    * [KARAF-1653] - Upgrade to Aries JNDI Core 1.0.0
    * [KARAF-1654] - Upgrade to Aries Proxy API 1.0.0
    * [KARAF-1656] - use quiesce API 1.0.0 final instead of 1.0.1-SNAPSHOT
    * [KARAF-1658] - Upgrade to Aries JMX 1.0.0
    * [KARAF-1660] - Upgrade Aries Application API to 1.0.0
    * [KARAF-1661] - Upgrade Aries Application Utils to 1.0.0
    * [KARAF-1662] - Upgrade Aries Proxy Impl to 1.0.0
    * [KARAF-1663] - Upgrade Aries transaction manager to 1.0.0
    * [KARAF-1664] - Upgrade Aries JNDI legacy support to 1.0.0
    * [KARAF-1665] - Upgrade Aries JNDI rmi to 1.0.0
    * [KARAF-1668] - Upgrade blueprint core to 1.0.0
    * [KARAF-1669] - Upgrade Aries Application to 1.0.0
    * [KARAF-1670] - Uprade Aries Application Management to 1.0.0
    * [KARAF-1671] - Uprade Aries Application Modeller to 1.0.0
    * [KARAF-1672] - Upgrade Aries Application Deployment 1.0.0
    * [KARAF-1673] - Upgrade to Aries JPA Blueprint 1.0.0
    * [KARAF-1685] - Upgrade to Aries Blueprint Annotation Impl 1.0.0
    * [KARAF-1686] - Upgrade to Aries Blueprint CM 1.0.0
    * [KARAF-1687] - Upgrade to Aries Blueprint Core Compatibility 1.0.0
    * [KARAF-1688] - Upgrade to Aries Blueprint JEXL Evaluator 1.0.0
    * [KARAF-1689] - Upgrade to Aries JNDI URL 1.0.0
    * [KARAF-1690] - Upgrade to Aries Transaction Wrappers 1.0.0
    * [KARAF-1691] - Remove Aries Quiesce dependencies
    * [KARAF-1696] - Upgrade to Spring 3.1.2.RELEASE
    * [KARAF-1704] - Upgrade to Aries Transaction Blueprint 1.0.0
    * [KARAF-1711] - Upgrade to pax-web 2.1.0
    * [KARAF-1719] - Upgrade to javax.mail 1.4.5
    * [KARAF-1722] - Upgrade to Aries JMX Blueprint Core 1.0.1
    * [KARAF-1732] - Upgrade to ServiceMix Ant bundle 1.8.4_1
    * [KARAF-1733] - Upgrade to ServiceMix aopalliance bundle  1.0_6
    * [KARAF-1737] - Upgrade to ServiceMix cglib bundle 2.2.2_1
    * [KARAF-1739] - Upgrade to Jetty 8.1.5.v20120716
    * [KARAF-1744] - Upgrade to guava 13.0
    * [KARAF-1745] - Upgrade to Felix WebConsole 4.0.0
    * [KARAF-1747] - Update to jline 2.8
    * [KARAF-1769] - Upgrade to pax-logging 1.6.10
    * [KARAF-1773] - Upgrade to pax-logging 1.6.10
    * [KARAF-1774] - Upgrade to pax-url 1.5.0
    * [KARAF-1779] - Upgrade to guava 13.0.1
    * [KARAF-1781] - Upgrade to Mina 2.0.5
    * [KARAF-1787] - Upgrade to commons-fileupload 1.2.2
    * [KARAF-1788] - Upgrade to commons-io 2.4
    * [KARAF-1801] - slf4j 1.7.0
    * [KARAF-1816] - Upgrade to jline 2.9
    * [KARAF-1817] - Upgrade to sshd 0.8.0
    * [KARAF-1819] - Upgrade to Mina 2.0.5
    * [KARAF-1859] - Upgrade to ServiceMix Specs 2.1
    * [KARAF-1862] - Upgrade to Felix FileInstall 3.2.6
    * [KARAF-1863] - Upgrade to sshd 0.8.0
    * [KARAF-1865] - Upgrade to paxlogging 1.7.0
    * [KARAF-1866] - Upgrade to felix config admin 1.4.0
    * [KARAF-1867] - Upgrade to felix event admin 1.3.0
    * [KARAF-1868] - Upgrade aries bundles to 1.0.1 (blueprint-core, jmx-core, transaction-manager, jpa-container-context)
    * [KARAF-1884] - Upgrade exam to Pax Exam 2.6.0
    * [KARAF-1893] - Upgrade to Jetty 8.1.7.v20120910
    * [KARAF-1904] - Upgrade to Mina 2.0.7
    * [KARAF-1908] - Upgrade to XBean 3.12
    * [KARAF-1948] - Upgrade to Apache POM 11
    * [KARAF-1955] - Upgrade to ServiceMix Specs 2.2.0
    * [KARAF-1966] - Upgrade to Pax Web 3.0
    * [KARAF-1977] - Upgrade to OSGi 4.3.1
    * [KARAF-1981] - Upgrade to Felix ConfigAdmin 1.6.0
    * [KARAF-2012] - Upgrade to Pax Web 3.0.0.M1
    * [KARAF-2055] - Upgrade to Apache POM 12
    * [KARAF-2061] - Upgrade to commons-codec 1.7
    * [KARAF-2063] - Upgrade to Felix EventAdmin 1.3.2
    * [KARAF-2064] - Upgrade to Felix Metatype 1.0.6
    * [KARAF-2065] - Upgrade to Felix SCR 1.6.2
    * [KARAF-2068] - Upgrade to ASM 4.1
    * [KARAF-2080] - Upgrade to slf4j 1.7.2
    * [KARAF-2081] - Upgrade to JUnit 4.11
    * [KARAF-2084] - Upgrade to Jetty 8.1.8.v20121106
    * [KARAF-2085] - Upgrade to Jetty 8.1.8.v20121106
    * [KARAF-2086] - Upgrade to Spring 3.1.3.RELEASE
    * [KARAF-2147] - Upgrade to Aries JMX 1.1.1
    * [KARAF-2148] - Upgrade to Aries Proxy 1.0.1
    * [KARAF-2149] - Upgrade to Aries Blueprint Core 1.1.0
    * [KARAF-2150] - Upgrade to Aries Blueprint CM 1.0.1
    * [KARAF-2157] - Upgrade to Aries Util 1.1.0
    * [KARAF-2176] - Upgrade to Pax URL 1.5.1
    * [KARAF-2177] - Upgrade to Felix Framework 4.2.0
    * [KARAF-2184] - Upgrade to Spring 3.1.4.RELEASE
    * [KARAF-2197] - Upgrade to JLine 2.10
    * [KARAF-2208] - Upgrade to Aries JPA Blueprint 1.0.1
    * [KARAF-2227] - Upgrade to Pax-Web 3.0.0.M3 and Jetty 8.1.9.v20130131
    * [KARAF-2232] - Upgrade to Aries Blueprint Core 1.1.1

** Improvement
    * [KARAF-216] - Create an admin:clone command
    * [KARAF-338] - Upgrade Karaf to version 1.0.0 of pax-web
    * [KARAF-362] - Add documentation how to build a custom karaf distribution including branding
    * [KARAF-366] - Remove sax parser code from features core
    * [KARAF-402] - Gather features and cmdhelp maven plugins into a generic karaf maven plugin
    * [KARAF-403] - Improve Bundle-Description header display
    * [KARAF-404] - Upgrade to felix maven-bundle-plugin 2.3.4
    * [KARAF-412] - Documentation: Add notes on how to make multiple configuration files available to the bundle context.
    * [KARAF-422] - If no version was found, features-maven-plugin try to create an artifact with a null version
    * [KARAF-445] - Add completion for shell aliases
    * [KARAF-447] - Add JDBC lock implementation for PostgreSQL
    * [KARAF-460] - Add commands to manipulate kar archives
    * [KARAF-461] - dev:create-dump command should generate a cleaner zip file name
    * [KARAF-465] - Merge http with war feature
    * [KARAF-469] - Remove duplicate code
    * [KARAF-470] - Move Main variables management in util
    * [KARAF-471] - would be nice for a "already exists" call to features:addurl to trigger a refresh
    * [KARAF-476] - The admin-command should be extended to handle RMI-server-port settings
    * [KARAF-483] - pax-web jetty.xml configfile should contain default security realm
    * [KARAF-484] - Upgrade to Felix Framework 3.0.9
    * [KARAF-487] - Improve --help information for obr:list
    * [KARAF-488] - obr:list should also include the bundle-symbolic-name of the packages it lists as this is used to execute other OBR commands
    * [KARAF-495] - Add a Tutorials section to the website.
    * [KARAF-513] - The ssh:ssh and admin:connect command do not allow passing a command to execute
    * [KARAF-514] - When starting a child instance, there's no way to wait until it's started
    * [KARAF-517] - Upgrade to pax-runner 1.6.1
    * [KARAF-530] - Rename org.apache.karaf.assemblies/apache-karaf to org.apache.karaf/apache-karaf
    * [KARAF-533] - Improve depdencny handling to manual
    * [KARAF-539] - Document configfile xml tag of features
    * [KARAF-540] - Add IdentificationUtils in Karaf utils
    * [KARAF-542] - Support of next line with '>' character
    * [KARAF-544] - Documentation on how to use the JMX console
    * [KARAF-551] - Implement the shell:source command
    * [KARAF-554] - Add karaf version in system properties and display in shell:info command output
    * [KARAF-560] - Modify all console log commands to receive a "logger" argument.
    * [KARAF-561] - Make obr:list output similar to osgi:list
    * [KARAF-563] - Adjustable PermSize and MaxPermSize in karaf script
    * [KARAF-564] - Allow configuring features OBR resolver to resolve optional imports as well
    * [KARAF-573] - Print out that karaf has to be restarted if using framework with new framework
    * [KARAF-574] - Re-introduce export version in packages:exports command
    * [KARAF-576] - introduce start-level attribute for feature element in features.xml
    * [KARAF-588] - Some fixes to Karaf Site
    * [KARAF-606] - JAAS: Allow LDAPLoginModule to supply role "DN" from LDAP group search
    * [KARAF-608] - Allow for multi-stage boot features installation
    * [KARAF-614] - Add warning to osgi:shutdown to avoid inadvertently shutting down the container
    * [KARAF-618] - Align Cellar major version with the Karaf one
    * [KARAF-623] - Create a shell completer for jaas realms
    * [KARAF-638] - Use the same naming convention in commands
    * [KARAF-640] - The Cellar's Hazelcast instance should be configured via Configuration Admin.
    * [KARAF-645] - Add a flag to suppress --help Option output on
    * [KARAF-651] - features-maven-plugin should "embed" the Karaf features descriptor
    * [KARAF-654] - Merge jetty feature with jetty-jaas feature
    * [KARAF-659] - correct manuall about http-whiteboard feature
    * [KARAF-661] - Typing ^D should behave as on Unix
    * [KARAF-662] - Clarify relationship of config.properties and custom.properties
    * [KARAF-663] - features-maven-plugin add-features-to-repo should embed Karaf core features descriptor
    * [KARAF-664] - Use Wiki syntax in bundle.info instead of Ansi control sequences
    * [KARAF-665] - Rename karaf-maven-plugin goals
    * [KARAF-668] - The karaf web console doesn't list web contexts
    * [KARAF-693] - features:addurl raises "Premature end of file" when network is not available
    * [KARAF-698] - Technical edits to User's Guide
    * [KARAF-699] - Grammar fixes to source code files
    * [KARAF-700] - Updates to developer's guide
    * [KARAF-705] - Upgrade demos/web to use jdk 1.6 on the trunk.
    * [KARAF-713] - Refactor karaf main
    * [KARAF-720] - Make 3.0.x source JDK7 compliant for type handling.
    * [KARAF-725] - Read-only commands shouldn't ask for system bundle confirmation
    * [KARAF-729] - Karaf Maven Plugin source code cleanup
    * [KARAF-733] - Doc fixes to the quick start guide and overview page
    * [KARAF-737] - The Karaf WebConsole should not only list Http contexts but also web contexts as in web:list
    * [KARAF-752] - Editorial fixes to the assemblies/ configuration files
    * [KARAF-755] - Recommended improvements to help commands
    * [KARAF-756] - Add ability to have KeyStoreManager to wait for SSL keystore to be fully initialize by other bundle through timeout
    * [KARAF-762] - dev:watch should support multiple bundle IDs
    * [KARAF-764] - Correct links to ops4j in documentation
    * [KARAF-772] - Cleanup Karaf assemblies
    * [KARAF-783] - Improve security docs wrt role policies
    * [KARAF-784] - Add date in the default Karaf log
    * [KARAF-786] - Add more MBeans
    * [KARAF-795] - Kar builder uses a different version for easymock then the rest of the project
    * [KARAF-802] - Upgrade mail bundle version to 1.4.4.
    * [KARAF-807] - Add a features name to the karaf-cellar features.xml
    * [KARAF-808] - Remove author attribute tags from Karaf source code
    * [KARAF-813] - Install Pax URL OBR with the OBR feature
    * [KARAF-817] - Allow to set Karaf window name via parameter
    * [KARAF-818] - Allow JAVA_MAX_MEM, JAVA_PERM_MEM, JAVA_MIN_MEM, JAVA_MAX_PERM_MEM the same way as for linux startup file
    * [KARAF-819] - Rename Karaf features name (and sub-projects features name) to use full qualified name
    * [KARAF-829] - Support of Java 7
    * [KARAF-832] - build html manual by default, use a profile for pdf generation
    * [KARAF-840] - specify javax.annotation packages version to 1.1.0 for jre-1.6 as Annotation 1.1 Spec is used for Java 6
    * [KARAF-847] - Provide Karaf features covering all Spring bundles
    * [KARAF-851] - Upgrade Maven plugins in use
    * [KARAF-864] - obr:deploy command should provide a start option
    * [KARAF-881] - Make aliases to osgi:* commands to be more clear for the users
    * [KARAF-885] - StartBundle doesn't deploy all bundles if one failed
    * [KARAF-886] - Document security properties in the relevant configuration files
    * [KARAF-888] - Add a Karaf Config Service
    * [KARAF-897] - Fixing text in bundle.info files
    * [KARAF-898] - Config delete operation should remove the pid.cfg file
    * [KARAF-899] - Upgrade to Apache Felix Gogo version 0.10.0
    * [KARAF-900] - Shutdown command should display the instance name
    * [KARAF-907] - Include 64 bits wrapper library
    * [KARAF-916] - use org.apache.aries.jmx.core instead of org.apache.aries.jmx
    * [KARAF-925] - Karaf config.properties doesn't define J2SE-1.6 and J2SE-1.7 execution environment
    * [KARAF-930] - Bundles MBean should mimic the BundleSelector like osgi:* commands
    * [KARAF-931] - Add includeTransitiveDependencies option to features-generate-descriptor Maven goal
    * [KARAF-936] - Features info command should display the start level of a bundle if available.
    * [KARAF-940] - Align various bat and sh scripts
    * [KARAF-942] - Expose Karaf RMI registry as a service
    * [KARAF-945] - Use singular for shell commands
    * [KARAF-946] - MBeans should be renamed in singular
    * [KARAF-947] - Rename admin service to instance service
    * [KARAF-948] - Apply normalized shell command format
    * [KARAF-956] - jaas module should throw generic FailedLoginException
    * [KARAF-963] - Refactoring of the modules
    * [KARAF-965] - Allow features-maven-plugin to handle multiple versions of the same feature
    * [KARAF-968] - Features file should require name attribute on features element
    * [KARAF-970] - feature <config/> tag doesn't create the cfg file
    * [KARAF-981] - Set kar as a boot feature
    * [KARAF-999] - local-repo folder shouldn't be used
    * [KARAF-1001] - Consistency between command annotation and blueprint
    * [KARAF-1002] - Switch the blueprint extender to synchronous mode
    * [KARAF-1005] - Port current karaf integration tests to new test framework
    * [KARAF-1010] - Add 64Bit ServiceWrapper to karaf
    * [KARAF-1013] - Less verbose in log when mistyped commands at INFO level
    * [KARAF-1014] - Make files specified by ${includes} optional
    * [KARAF-1017] - Use the Pax Web features.xml for Pax Web 2.0 and further
    * [KARAF-1019] - Set java memory options only when required
    * [KARAF-1021] - karaf-maven-plugin does not prefix non-bundles with the wrap: prefix when generating a feature.xml
    * [KARAF-1022] - java.io.tmpdir system property should use $KARAF_DATA/tmp in place of $KARAF_BASE/tmp
    * [KARAF-1023] - Add karaf activators for jars in the lib folder
    * [KARAF-1032] - Text improvements to Features XSD
    * [KARAF-1035] - Allow Karaf config commands to accept the pid as an option
    * [KARAF-1039] - Rename the org.apache.felix.gogo.commands package to org.apache.karaf.shell.commands
    * [KARAF-1041] - create-kar goal should handle configfile
    * [KARAF-1045] - Improved help system
    * [KARAF-1048] - make pom.xml eclipse 3.7 m2e friendly
    * [KARAF-1057] - Update the list of supported execution environments
    * [KARAF-1069] - create a ServerInfo service that Main sets up that exposes karaf home, base, data, instances, and the command line arguments
    * [KARAF-1072] - Provide man command as an alias to help
    * [KARAF-1073] - Add -r (reboot) and -h (halt) options to the system:shutdown command
    * [KARAF-1077] - New service:list command focused on services instead of bundles
    * [KARAF-1080] - Spring feature repo for spring related features
    * [KARAF-1087] - kar archetype
    * [KARAF-1088] - assembly archetype
    * [KARAF-1091] - Upgrade maven bundle plugin to 2.3.6
    * [KARAF-1093] - Make org.apache.karaf.util a bundle
    * [KARAF-1112] - shell:sleep should be in seconds
    * [KARAF-1115] - Add a jre.properties.cxf with all changes required to run cxf
    * [KARAF-1118] - Enable install of CXF into karaf with a simple command
    * [KARAF-1119] - expose rmiregistry port as a service property
    * [KARAF-1129] - Allow configuring rmi Registry host as well as port
    * [KARAF-1142] - Get rid of the code using StartLevel and PackageAdmin has they are now deprecated
    * [KARAF-1145] - Upgrade to pax-logging 1.6.4
    * [KARAF-1167] - No SCR implementation supplied with Karaf
    * [KARAF-1181] - Add tab completer to the help command
    * [KARAF-1186] - Provide a migration/update section in the manual
    * [KARAF-1191] - Switch back to millis per default on shell:sleep and introduce -s option
    * [KARAF-1197] - AdminService - Allow to provide a PrintStream so you can capture or control activity on the console
    * [KARAF-1208] - Rename features to feature
    * [KARAF-1214] - Improvement in Karaf log4j appender docs
    * [KARAF-1245] - blueprint deployer and spring deployer should get started before features.core bundle
    * [KARAF-1261] - Jaas commands should allow you to distinguish between to realms that have the same name
    * [KARAF-1271] - Feature service should log in DEBUG instead of INFO
    * [KARAF-1273] - Combine the commands and mbeans for osgi framework related stuff into one module set
    * [KARAF-1276] - Add activation="eager" to springListener bean in shell/osgi/src/main/resources/OSGI-INF/blueprint/shell-osgi.xml
    * [KARAF-1281] - New table support for shell
    * [KARAF-1282] - Remove osgi sources from karaf main
    * [KARAF-1289] - Move the standard feature definition to the feature.xml
    * [KARAF-1290] - Kar deployer should move into the kar module
    * [KARAF-1291] - Features deployer should be in the features module
    * [KARAF-1295] - serviceUrl in org.apache.karaf.management.cfg should use 0.0.0.0 but not localhost
    * [KARAF-1296] - Karaf startup without startup.properties
    * [KARAF-1299] - Make sure that all karaf archetype contain a description
    * [KARAF-1300] - features managment should be more robust if customer features descriptor file has duplicated feature name
    * [KARAF-1302] - Replace MBeanRegistrer with aries jmx whiteboard and remove .management modules
    * [KARAF-1307] - Refactor http command and mbean to new module layout and change to use jmx whiteboard
    * [KARAF-1328] - jclouds feature repo url has been changed after version 1.0
    * [KARAF-1351] - Improvements to features-generate-descriptor
    * [KARAF-1383] - Fix warning messages during bundle build
    * [KARAF-1385] - Be able to disable the default PropertiesLoginModule
    * [KARAF-1390] - Embedded features should have POM dependencies on the projects they represent
    * [KARAF-1396] - config:list command description should be enhanced
    * [KARAF-1410] - Error in stop script if KARAF_DEBUG is enabled
    * [KARAF-1427] - Split shell console into API and impl
    * [KARAF-1438] - Simplify imports in bundle plugin for deployers
    * [KARAF-1444] - Rename shell.shell to shell.commands.impl and make packages private
    * [KARAF-1446] - Move help system and table out of console into separate modules
    * [KARAF-1448] - diag command should print the full stacktrace instead of the messages only
    * [KARAF-1449] - The InstallKarMojo fails with a nullpointer if an artifact could not be retrieved
    * [KARAF-1462] - Improvements to shell tables
    * [KARAF-1468] - Use the geronimo servlet spec instead of jetty' since it's backward compatible
    * [KARAF-1470] - Cleanup: Remove no longer required org.apache.karaf.tooling.testing project
    * [KARAF-1471] - Use project.version instead of direct version in manual
    * [KARAF-1489] - Add an itest showing how to correctly use tinybundles with provision in paxexam-karaf
    * [KARAF-1499] - InfoAction shell command should sort the properties from InfoProvider instances
    * [KARAF-1500] - Forgot a space between hours and minutes in InfoAction.java
AF-1574] - When two karaf containers are started locally, an exception is displayed at startup.  A nicer message would be better.
    * [KARAF-1575] - Features provided by karaf do not have any description
    * [KARAF-1580] - Demo should exclude Eclipse and IntelliJ IDEA files
    * [KARAF-1586] - wrapper:install command should be usable outside OSGi too
    * [KARAF-1600] - Avoid duplicate feature and bundle resolution when installing cascading features
    * [KARAF-1607] - Move dev commands and services to bundle, system and shell
    * [KARAF-1628] - Make client indepenent of console
    * [KARAF-1629] - Command completer should complete only on first scope level
    * [KARAF-1640] - Make sure the local console is fully working before the user can type commands
    * [KARAF-1641] - Avoid embedding jline in the console
    * [KARAF-1657] - org.ops4j.pax.url.mvn.proxySupport=false
    * [KARAF-1659] - Use dependencyManagement in features assemblies
    * [KARAF-1667] - Improve wait startup message
    * [KARAF-1676] - OBR URL's in Karaf have no simple identifier
    * [KARAF-1678] - WebConsole still use "admin" instead of "instance"
    * [KARAF-1693] - Rename command-watch to watch
    * [KARAF-1700] - update manual to reflect JDBC Lock updates
    * [KARAF-1710] - Remove @version headers from source
    * [KARAF-1712] - Use Pax-Web Features
    * [KARAF-1752] - hard coded features uri in features deployer feature discovery
    * [KARAF-1757] - Welcome message incorrect during ssh session or using bin/client.
    * [KARAF-1798] - Use exam framework for our itests and increase tests coverage
    * [KARAF-1811] - Remove section about console colors from manual
    * [KARAF-1818] - Improve user guide
    * [KARAF-1828] - Build src distributions within specific profiles
    * [KARAF-1834] - Make KarafTestSupport available externally
    * [KARAF-1836] - Provide a login module class name completer.
    * [KARAF-1850] - feature:list should use alphabetical order
    * [KARAF-1878] - Feature bundle start up order by startLvl
    * [KARAF-1889] - Change logging in FeaturesServiceImpl
    * [KARAF-1903] - Refactore osgicore and osgicompendium modules
    * [KARAF-1933] - Add id for Maven repository
    * [KARAF-1940] - admin/instance should be provided as a feature
    * [KARAF-1951] - Remove workaround for KARAF-1117
    * [KARAF-1952] - Allow Karaf monitoring using host:port
    * [KARAF-1989] - Add CXF DOSGi feature uri to org.apache.karaf.features.repos.cfg
    * [KARAF-1990] - Add Cellar feature URI in org.apache.karaf.features.repos.cfg
    * [KARAF-2003] - Interrupt a running command in shell
    * [KARAF-2017] - Service wrapper should use and populate JAVA_HOME in conf file
    * [KARAF-2043] - Document caveats of Pax Url Wrap when used in Karaf Shell
    * [KARAF-2049] - Instructions in welcome screen is a bit misleading with hit
    * [KARAF-2053] - HTTP feature should install a default etc/org.ops4j.pax.web.cfg file
    * [KARAF-2072] - Spelling correction
    * [KARAF-2017] - Service wrapper should use and populate JAVA_HOME in conf file
    * [KARAF-2094] - Include howto add additional jvm configurations (if using the wrapper) to the documentation
    * [KARAF-2097] - endorse stax-api spec jar
    * [KARAF-2104] - Add wildcard support in features:refreshurl
    * [KARAF-2119] - upgrade pax.base to 1.4.0
    * [KARAF-2138] - Add a status check script and karaf script argument
    * [KARAF-2160] - add options to only create tar.gz or zip archive in CreateArchiveMojo
    * [KARAF-2163] - Add a jre-1.8 to jre.properties
    * [KARAF-2175] - Add the sonatype standard snapshot repository to the karaf repositories
    * [KARAF-2219] - Add option to jaas LoginModules to skip checking the credentials

** New Feature
    * [KARAF-32] - Support ssh public key authentication and agent forwarding
    * [KARAF-222] - mvn karaf:run plugin, like jetty:run
    * [KARAF-376] - State replication between Karaf instances
    * [KARAF-401] - Provide kar goal in the karaf maven plugin
    * [KARAF-407] - Extend features:info command to display features description and details
    * [KARAF-408] - Add osgi:services related commands
    * [KARAF-426] - Manage Karaf shell.name by branding
    * [KARAF-463] - Add chapter for Pax Web and the OSGi HttpService
    * [KARAF-473] - Support version resolving in FeatureService#getFeatures(name/version)
    * [KARAF-477] - Karaf console should gracefully handle errors due to the history file being read only.
    * [KARAF-478] - Subclasses of Console should be able to change the history file.
    * [KARAF-523] - Allow maven style names in startup.properties
    * [KARAF-541] - Support JMX SSL via etc/org.apache.karaf.management.cfg
    * [KARAF-572] - Command to show all registered servlets and their contexts
    * [KARAF-581] - Also make rmiRegistryHost configurable
    * [KARAF-605] - Add param to Gogo Argument and Option to override default value with specific value
    * [KARAF-647] - Support of sub-shell
    * [KARAF-657] - kar deployer should start the feature
    * [KARAF-696] - Add a macro allowing users to identify the contents of a specific config file.
    * [KARAF-798] - Support for relocating karaf.history file
    * [KARAF-835] - Provide a spring-jms feature
    * [KARAF-845] - Add a jasypt based property placeholder to support encrypted values
    * [KARAF-866] - New dev:wait-for-service command to wait for a given osgi service
    * [KARAF-908] - Provide a way to access system properties easily in the shell
    * [KARAF-934] - Provide a way to select which features are to be installed when dropping a descriptor to the deploy folder.
    * [KARAF-977] - config propset, propappend & propdel could use some autocompletion
    * [KARAF-980] - Add demo for extending Karaf's console commands
    * [KARAF-984] - Add Kar deployer demo using karaf-maven-plugin
    * [KARAF-987] - Add scp support
    * [KARAF-1004] - Introduce paxexam-karaf into karaf tooling
    * [KARAF-1007] - Include paxexam-karaf testframework documentation into the manual
    * [KARAF-1029] - Add completer support on option values
    * [KARAF-1055] - New bundle:capabilities and bundle:requirements commands
    * [KARAF-1059] - Karaf command features:status to indicate feature loaded or not
    * [KARAF-1109] - Provide archetypes for bundle, bundle-blueprint, web-bundle, war
    * [KARAF-1196] - implement a 'watch' command so we can watch the output of a karaf command like the unix 'watch' mechanism
    * [KARAF-1203] - Make invoker in karaf testcontainer configurable
    * [KARAF-1213] - Add option to configure BundleStartLvl of automatically installed base bundles
    * [KARAF-1254] - Jasypt config admin property with reload strategy.
    * [KARAF-1334] - Use the new servicemix spec to allow the use of both the JRE implementations and implementations from bundles
    * [KARAF-1379] - Provide exit alias and improve shell:logout command
    * [KARAF-1380] - Add a command to easily name an instance
    * [KARAF-1475] - Support SSH agent forwarding and use the agent authentication when connecting to other instances
    * [KARAF-1512] - enhancement: add self to generated feature in "features-generate-descriptor" goal
    * [KARAF-1519] - Support to download features for later offline usage
    * [KARAF-1546] - Add -i/--install-all option to feature:add-url
    * [KARAF-1762] - command to list bundles with the requested class
    * [KARAF-1806] - Add version attribute in the SystemMBean
    * [KARAF-1886] - Create transaction-jdbc and transaction-jms enterprise features
    * [KARAF-2044] - Provide the ability to edit text resources from the Karaf shell
    * [KARAF-2050] - Ability to configure ssh session idle timeout - currently hardcode as 5 minutes
    * [KARAF-2069] - Provide less command
    * [KARAF-2070] - Add support of !$ to recall the last command argument
    * [KARAF-2078] - Create the shell:date command
    * [KARAF-2159] - add option to resolve transitive feature-dependencies in InstallKarsMojo
    * [KARAF-2164] - Create shell:wc command
    * [KARAF-2185] - Provide Spring 3.2.x support

** Task
    * [KARAF-328] - Drop support for JDK 1.5
    * [KARAF-431] - Add documentation around remote management via JMX
    * [KARAF-432] - Remove spring2 support from karaf features
    * [KARAF-433] - Add documentation about KAR archive format and deployer
    * [KARAF-434] - Add wrap deployer description in the deployer section of the Karaf user guide
    * [KARAF-435] - Add diagnostic documentation (dev:create-dump, etc) in the Karaf User Guide
    * [KARAF-437] - Document jre.properties tuning
    * [KARAF-439] - Provide documentation about the Karaf wrapper
    * [KARAF-444] - Upgrade to latest version of pax-url
    * [KARAF-454] - Upgrade Karaf to version 1.0.1 of pax-web
    * [KARAF-489] - Upgrade pax-logging to 1.6.1
    * [KARAF-500] - Upgrade to Jetty 7.3.1
    * [KARAF-501] - Upgrade to PAX Exam 1.2.4
    * [KARAF-516] - Upgrade to felix eventadmin 1.2.10
    * [KARAF-543] - Add manual section around log custom appenders
    * [KARAF-553] - Get place of jetty config with mvn url in sync
    * [KARAF-566] - Build: Remove duplicate entries from build artefacts.
    * [KARAF-567] - org.apache.karaf.jaas.config.impl accidentally exported?
    * [KARAF-584] - Upgrade Karaf build environment
    * [KARAF-619] - Add Cellar manual
    * [KARAF-620] - Cellar should use the parent Karaf POM
    * [KARAF-646] - Upgrade to Jetty 7.4.1.v20110513
    * [KARAF-694] - Upgrade to Pax-Logging 1.6.3
    * [KARAF-887] - Refer PrinceXML website in the manual
    * [KARAF-909] - Delete the copy of the felix gogo Closure class
    * [KARAF-1053] - Removed unused folders/code from Assemblies
    * [KARAF-1054] - Setup eclipse targets now deprecated assembly folder.
    * [KARAF-1086] - Create Kar for Karaf demos
    * [KARAF-1094] - Refactor Karaf Demos to new assemblies format
    * [KARAF-1097] - Update Kar documentation
    * [KARAF-1136] - Rationalize Karaf 3.0 minimal distribution
    * [KARAF-1274] - Please set svn:ignore to all eclipse's project files
    * [KARAF-1357] - Document features-generator
    * [KARAF-1393] - Rename commands module to command
    * [KARAF-1440] - Port deployer wrap demo to Karaf 3.0
    * [KARAF-1441] - Port deployer feature demo to Karaf 3.0
    * [KARAF-1442] - Port deployer bundle demo to Karaf 3.0
    * [KARAF-1445] - more svn:ignore are needed
    * [KARAF-2124] - Adapt the chapter about extending the console to changes made by KARAF-1001
    * [KARAF-2161] - Incorrect LGPL license info in Notices file
    * [KARAF-2222] - Add hawtio to features.repos

** Test
    * [KARAF-1530] - Create integration tests for karaf-maven-plugin
    * [KARAF-1537] - Additional integration tests for karaf-maven-plugin
    * [KARAF-1870] - Add assertion to EquinoxFrameworkTest
    * [KARAF-1871] - KeepRuntimeFolderTest is named wrong and does not assert anything
    * [KARAF-1872] - Backward224Test should check for the karaf version
    * [KARAF-1873] - BaseKarafDefaultFrameworkTest should test for felix framework
    * [KARAF-1874] - Add assertion to FrameworkWithShellOffTest
    * [KARAF-1875] - Improvement of test for keeping or deleting the pax exam folder
    * [KARAF-1876] - Improve StandardFeaturesTest, EnterpriseFeaturesTest and SpringFeaturesTest using feature service
    * [KARAF-1877] - itests fail on jenkins
    * [KARAF-1896] - itests.EnterpriseFeaturesTest.installApplicationWithoutIsolationFeature fails with NotSerializableException
    * [KARAF-1897] - Use dynamic port allocation of integration tests
    * [KARAF-1916] - Make tests faster by using EagerSingleStagedReactorFactory
    * [KARAF-2087] - add a testcase to cover the scenario that the AdminService can always load latest instance status which changed by external process

                    Apache Karaf 2.0.0
                    ==================

  Overview
  --------

 The Apache Karaf 2.0.0 is the first release since the move of Apache Felix Karaf to Apache Karaf.
 This release brings new features, improvements and bug fixes. The changelog below contains the whole
 list of changes.

  Changelog
  ---------

 The following list shows the bug fixes and enhancements included in this release:

** New Feature
    * [KARAF-31] - Use OBR if available to compute the transitive closure of karaf features
    * [KARAF-110] - Provide a placeholder for overriding the configuration properties
    * [KARAF-111] - Allow includes of additional configuration files through a custom property when loading the main configuration files

** Improvement
    * [KARAF-45] - Improve war deployer in order to provide the WebApp-context
    * [KARAF-54] - Minimum default properties
    * [KARAF-59] - Introduce a ${karaf.data} system property to be able to easily move the data directory to a different location
    * [KARAF-67] - Change the webconsole config in the features descriptor to specifiy the realm and not the username/password which aren't used anymore
    * [KARAF-95] - Upgrade Spring to 3.x
    * [KARAF-96] - Enhance the features to support the start level
    * [KARAF-97] - Upgrade to Felix framework 3.x
    * [KARAF-98] - Upgrade to equinox 3.6.0
    * [KARAF-103] - add a spring-dm feature which use spring 2.5.6 inside
    * [KARAF-105] - Remove dependencies on the preference service
    * [KARAF-107] - Improve default log configuration with a rolling file appender
    * [KARAF-108] - Change 'storage.location' system property to 'karaf.instances' for better homogeneity
    * [KARAF-109] - Split the JVM packages from the main config.properties file for easier maintenance
    * [KARAF-112] - Free the org.osgi.framework.system.packages.extra property for users
    * [KARAF-117] - refactor tooling/testing/Helper to accomodate recent changes in config.properties
    * [KARAF-118] - Update Pax Url Wrap to version 1.1.3
    * [KARAF-120] - Some jars are not included in our system repository
    * [KARAF-121] - Better exception handling in JaasSecurityProvider
    * [KARAF-127] - Enahnce features mechanism to allow to stop/start bundle

** Bug
    * [KARAF-4] - [Karaf] If features:refreshUrl reads an incorrect <features> definition, it deletes the old version
    * [KARAF-16] - The JRE provided ciphers are not used on ubuntu server
    * [KARAF-65] - NPE in StandardEmitterMBean on JDK 6
    * [KARAF-99] - new spring 3.0.3.RELEASE feature miss some bundles
    * [KARAF-100] - The list of OBR repositories is not persisted
    * [KARAF-101] - features:refreshUrl doesn't auto complete!
    * [KARAF-102] - The client jar does not work when given a command to execute on the command line
    * [KARAF-122] - Webconsole login doesn't work with karaf.framework set to equinox
    * [KARAF-123] - File jre.properties is not copied and so it is not possible to start a second karaf instance
    * [KARAF-124] - Karaf start script doesn't correctly include jre/lib/ext directory
    * [KARAF-126] - Password: Error executing command: Failed to get the session.
    * [KARAF-128] - java.lang.IndexOutOfBoundsException during generation of User Guide pdf blocking release build.

** Task
    * [KARAF-113] - Change the namespace of the two blueprint schemas

** Sub-task
    * [KARAF-115] - Document Karaf Release Guide
    * [KARAF-119] - Establish KEYS file.


                    Apache Felix Karaf 1.6.0
                    ========================

  Changelog
  ---------

 The following list shows the bug fixes and enhancements included in this release:

** Bug
    * [FELIX-2129] - [Karaf] Possible hang with slave instances of Karaf when using Oracle JDBC lock.
    * [FELIX-2130] - [Karaf] Failover Clustering Mechanism - Database shutdown / loss results in all Karaf instances becoming Active on restart of that DB
    * [FELIX-2169] - Improve dev:show-tree performance and avoid NPE for installed bundle
    * [FELIX-2191] - Drop-in deployment of feature descriptor with spring-dm bundles fails
    * [FELIX-2196] - Karaf uses old version of Aries artifacts
    * [FELIX-2270] - Don't install jaas.boot bundle, its in the startup classpath
    * [FELIX-2295] - Referenced service throws UndeclaredThrowableException instead of real one
    * [FELIX-2311] - Remove the Bootstrap class which is not needed anymore
    * [FELIX-2319] - The order of the list of boot features is not used when installing the features
    * [FELIX-2326] - NullPointerException thrown from PropertiesLoginModule if a user doesn't exist in the properties file
    * [FELIX-2343] - Features maven plugin does not honor local and remote repository overrides
    * [FELIX-2347] - Configurations on features should not override existing configurations

** Improvement
    * [FELIX-1921] - Provide a way to configure the host used for karaf ssh server
    * [FELIX-2058] - The Oracle, MySql and default jdbc lock classes should inherit from a common base class
    * [FELIX-2109] - OBR should support matching resources for a given requirement
    * [FELIX-2110] - The resolver should be able to resolve for some requirements in addition to resources
    * [FELIX-2113] - Add obr:find and obr:resolve to find matching resources and show the resolution output
    * [FELIX-2193] - add-features-to-repo goal of features-maven-plugin should be able to download dependencies if necessary
    * [FELIX-2237] - ^C should interrupt the thread
    * [FELIX-2239] - features-maven-plugin validate goal should be able to use configurable config.properties
    * [FELIX-2278] - refactor features-maven-plugin to use Parser/Clause/VersionRange from utils
    * [FELIX-2280] - To much code duplication in DefaultJDBCLock, OracleJDBCLock and MySQLJDBCLock
    * [FELIX-2293] - features-maven-plugin validate should support  specify the feature repositories from the maven plugin configure
    * [FELIX-2297] - features-maven-plugin validate goal should be able to use configurable jre version
    * [FELIX-2312] - Support for ext and endorsed directories
    * [FELIX-2314] - Improve logging support
    * [FELIX-2315] - Upgrade to felix web console 3.0.0
    * [FELIX-2320] - Override default Karaf shell prompt
    * [FELIX-2327] - Disable and delay Jline terminal initialization
    * [FELIX-2329] - Improve the URL handling in features-maven-plugin regarding the add-features-to-repo goal
    * [FELIX-2330] - Uninstall, refresh, and resolve osgi shell commands do not support multiple bundle ids

** Task
    * [FELIX-1990] - Use aries blueprint / jmx


                    Apache Felix Karaf 1.4.0
                    ========================

  Changelog
  ---------

 The following list shows the bug fixes and enhancements included in this release:


** Bug
    * [FELIX-1768] - should catch exception for FeaturesServiceImpl.internalAddRepository per uri
    * [FELIX-1843] - Karaf shell doens't work properly under windows
    * [FELIX-1932] - Possible NullPointerException when itest fails
    * [FELIX-1939] - [karaf] Ssh client out put is poorly formatted.
    * [FELIX-1964] - Unable to choose the framework using system properties
    * [FELIX-1970] - The stop script should always work even if the default user / password / host has been changed
    * [FELIX-1994] - Web Console admin,features and gogo plugins do not work with Equinox
    * [FELIX-1995] - Spring status does not show properly after osgi:list command
    * [FELIX-2012] - NullPointerException when some links clicked if karaf.framework=equinox
    * [FELIX-2025] - grep -v doesn't filter linefeed on Windows
    * [FELIX-2026] - Remove org.ops4j.pax.logging.DefaultServiceLog.level from system.properties
    * [FELIX-2027] - The custom deployers leveraging url handlers must not be registered before the url handler is actually registered in the osgi framework
    * [FELIX-2032] - file host.key is not correctly written for a new instance(s)
    * [FELIX-2043] - When launching Karaf with equinox, the osgi framework state is not written until 30s after the boot
    * [FELIX-2044] - System bundles are started out of order if the karaf.lock.level is > 1
    * [FELIX-2045] - Restarting the framework from the web console (or using update on the system bundle) does not work
    * [FELIX-2053] - Completion does not reprint previous characters in some circumstances
    * [FELIX-2054] - Logo is garbled when connecting using putty
    * [FELIX-2063] - [karaf] hardcoding org.ops4j.pax.exam.rbc.rmi.port property in raw pax runner --vmOptions is problematic when 1099 is not the next free port
    * [FELIX-2065] - BootstrapLogManager doesn't load etc/org.ops4j.pax.logging.cfg file
    * [FELIX-2072] - [Karaf]  OracleJDBCLock filling UNDO segment.
    * [FELIX-2074] - Bring back the history command

** Improvement
    * [FELIX-1914] - Add a development subshell to ease troubleshooting classloading/resolution issues
    * [FELIX-1947] - [Karaf] Remove import java.util.* from karaf.main.StringMap and replace with proper import list.
    * [FELIX-2001] - Add more info to log and console when feature bundles fail to resolve
    * [FELIX-2018] - features-maven-plugin add-features-to-repo should suport the bundle start with wrap: in features.xml
    * [FELIX-2028] - Upgrade to preferences services 1.0.4
    * [FELIX-2046] - Upgrade web bundles to their latest version (jetty, pax-web, felix console)
    * [FELIX-2049] - extend org.apache.felix.karaf.testing.Helper to emit a karaf-specific execution environment file for pax-runner
    * [FELIX-2055] - Use a nicer shutdown mechanism when stopping a managed instance
    * [FELIX-2061] - [karaf] use waitForFrameworkStartup pax-exam option in the integration tests
    * [FELIX-2070] - Upgrade to felix framework 2.0.3
    * [FELIX-2075] - Add a "new" command to create java objects from the command line
    * [FELIX-2084] - Make the display of exception stack traces available through a variable in the shell
    * [FELIX-2182] - An improved "list" command implementation that correctly displays Spring column status

** New Feature
    * [FELIX-1815] - Introduce 'shell:logout' command to close the current shell
    * [FELIX-1975] - [Karaf] Add oracle database support to Karaf jdbc locking feature.
    * [FELIX-2033] - Provide an easy to use layer for writing pax-exam test for Karaf
    * [FELIX-2047] - Support for WAR files

** Task
    * [FELIX-1902] - [karaf] sanitize web demo README of references to FUSE SNAPSHOT version
    * [FELIX-1915] - [karaf] allow overridding of etc/system.properties via environment


                    Apache Felix Karaf 1.2.0
                    ========================

  Overview
  --------

 This release is mostly a bug fix release and contains a lot of bug fixes and improvements in the console,
 commands, features service, instance administration.  The binary distribution now also includes the user's
 manual in pdf and html formats.

  Changelog
  ---------

 The following list shows the bug fixes and enhancements included in this release:

** Sub-task
    * [FELIX-1701] - Aggregate all the Karaf related pages in one single Confluence page using the include macro

** Bug
    * [FELIX-1620] - Script for running the created Karaf instances with a console
    * [FELIX-1626] - Configuration loaded from the etc/ directory are only available after a delay
    * [FELIX-1638] - [karaf] The branding properties load can't find the external branding file
    * [FELIX-1642] - osgi:shutdown just hang when use karaf-client.jar
    * [FELIX-1660] - karaf should not hardcode the "system" location of its maven-like repository
    * [FELIX-1681] - Bundles of webconsole feature are not assembled into distribution packages
    * [FELIX-1705] - [Karaf] Hot undeploy does not work after a Karaf restart
    * [FELIX-1715] - osgi:update on xml deployments will cause ZIPExceptions
    * [FELIX-1717] - osgi:list column for spring is sometimes filled and sometimes not
    * [FELIX-1723] - [Karaf] Slave instances on same host as Master instance does not properly lock.
    * [FELIX-1728] - Karaf itest fail on IBM JDK due to Pax Exam annotations not found
    * [FELIX-1730] - When displaying help for commands, arguments are not ordered correctly
    * [FELIX-1745] - Unable to alter/unset a log level after it has been set from the console
    * [FELIX-1751] - [karaf] admin:start silently fails to launch new instance
    * [FELIX-1766] - Refactor and enable AdminServiceMBean
    * [FELIX-1768] - should catch exception for FeaturesServiceImpl.internalAddRepository per uri
    * [FELIX-1771] - Feature deployer is broken on windows
    * [FELIX-1777] - Hitting backspace beyond last character causes LOUD BEEP
    * [FELIX-1778] - instances/myinst/bin/karaf.bat leaks environment variables to shell
    * [FELIX-1779] - The port for the jmx server needs to be configured at two locations
    * [FELIX-1784] - install one feature failed in org.apache.felix.karaf.features.cfg featuresBoot list shouldn't block install other features in this list
    * [FELIX-1786] - The features deployment listener tacks installed bundles and force their resolution
    * [FELIX-1793] - ensure launch karaf java process from KARAF_BASE folder
    * [FELIX-1799] - Hot-deployment does not work on admin:create'd instances
    * [FELIX-1801] - Case insensitive grep outputs all uppercase in match results
    * [FELIX-1802] - Grep command line prefix (-n) not working properly
    * [FELIX-1803] - Unable to edit or backspace on multiline commands
    * [FELIX-1805] - Upgrade equinox to 3.5.1
    * [FELIX-1817] - Backspace does not work anymore when connecting from the karaf-client
    * [FELIX-1818] - Ctrl-C kills the karaf-client, but it should be sent to the server
    * [FELIX-1855] - exec command eats first keystroke of subsequent commands
    * [FELIX-1857] - Backspace not working when using admin:connect
    * [FELIX-1858] - Remote commands via ssh only work once per restart
    * [FELIX-1869] - Need better UI feedback when features commands fail
    * [FELIX-1877] - karaf.main.BootstrapLogManager possible resource leak and ignored exception in open method.
    * [FELIX-1878] - karaf.main.Main possible resource leaks and ignored exceptions from mkdirs().
    * [FELIX-1887] - The stop script can't be used if the user or password has been changed
    * [FELIX-1888] - The karaf client hangs if the authentication fails
    * [FELIX-1899] - Karaf itest (CoreTest) fails on slower CI machines

** Improvement
    * [FELIX-1064] - New goal for the features-maven-plugin: validate a features xml file
    * [FELIX-1207] - [PATCH] Ignore files generated by mvn:eclipse
    * [FELIX-1643] - Improvements / Fixes for Karaf commands and their helps
    * [FELIX-1655] - Provide an additional argument to the Karaf admin:create command that specifies the featuresBoot
    * [FELIX-1675] - karaf web demo README references old servicemix-client.jar
    * [FELIX-1682] - The newly installed bundles for a feature should be uninstalled when feature install failed
    * [FELIX-1689] - When deploying a feature, we need to refresh some bundles to cope with newly resolved optional dependencies
    * [FELIX-1693] - [karaf][shell] Make "system bundles" start level configurable via properties
    * [FELIX-1694] - [karaf][shell] Do not print stack traces on exceptions
    * [FELIX-1700] - Create quality PDF manual for Karaf
    * [FELIX-1706] - Highlight grep matches
    * [FELIX-1707] - Add OSGi framework information to InfoAction
    * [FELIX-1718] - karaf shell config:update command should persist / override configurations from the etc/ folder
    * [FELIX-1729] - The if / each commands are not available in the console
    * [FELIX-1737] - Upgrade to fileinstall 2.0.4
    * [FELIX-1744] - Add a -C/--context option to shell:grep
    * [FELIX-1748] - Make the command history persistent across restarts
    * [FELIX-1749] - Improve log:set command - add auto-completion for log levels and support lower case level
    * [FELIX-1752] - [Karaf] Extend DefaultJDBCLock to support MySQL out of the box.
    * [FELIX-1755] - Provide a script file that would be loaded when starting a new shell (to create closures, etc...)
    * [FELIX-1757] - Completer for session scopes
    * [FELIX-1759] - Upgrade to latest webconsole
    * [FELIX-1772] - Upgrade to felix framework 2.0.1
    * [FELIX-1791] - Update to the karaf web demo readme.
    * [FELIX-1810] - Improvements to Main startup class
    * [FELIX-1882] - [karaf] karaf-client should have the option to retry connection establishment

** New Feature
    * [FELIX-1656] - new Shell command: shell:clear

** Task
    * [FELIX-1091] - Re-enable gshell integration tests on windows
    * [FELIX-1761] - Include felix as a platform for the karaf integration tests
    * [FELIX-1762] - Upgrade to pax-web 0.7.1
    * [FELIX-1763] - Upgrade to latest pax-url
    * [FELIX-1848] - Include instance name in the JMX ObjectName for AdminService and FeaturesService MBeans
    * [FELIX-1849] - Provide Instance details for root instance via AdminServiceMBean.getInstances() attribute
    * [FELIX-1850] - Expose additional isRoot attribute on AdminServiceMBean
    * [FELIX-1892] - Upgrade to sshd-0.3.0, mina-2.0.0-RC1, gogo-0.2.2, jansi-1.1



                    Apache Felix Karaf 1.0.0
                    ========================

  Overview
  --------

 The Apache Felix Karaf 1.0.0 release is the first release since the move of ServiceMix Kernel to Apache Felix.
 This release brings a lot of new features:
  * Switch from Spring-DM to Blueprint for the default Dependency Injection container (Spring-DM is still
       fully supported and easy to install through the features service)
  * Switch from Geronimo GShell to Felix Gogo
      This changes is a bit disruptive for the command line syntax, but offers much more features such
      as closures
  * Integration with the Felix Web Console (easily installed using the features service).
  * Built-in support for Equinox
  * Upgrade to OSGi 4.2 frameworks (both Felix and Equinox)
 This release also contains a lot of small improvements and bug fixes.  The changelog below contains the whole
 list of changes.


  Changelog
  ---------

 The following list shows the bug fixes and enhancements included in this release:

 ** Bug
     * [FELIX-1087] - Unable to log into ServiceMix Kernel using Windows putty SSH client
     * [FELIX-1097] - ServiceMix -> Karaf in base directory notices
     * [FELIX-1100] - Cat Command fails to display ?wsdl files
     * [FELIX-1125] - "features/list -i" returns "ERROR CommandLineExecutionFailed: org.apache.geronimo.gshell.command.CommandException: java.lang.ArrayStoreException: org.apache.servicemix.kernel.gshell.features.internal.FeatureImpl"
     * [FELIX-1128] - Features installed via the deploy directory aren't listed by the "features/list" command
     * [FELIX-1152] - wrapper scripts fail to start Karaf
     * [FELIX-1153] - change parent artifact id from kernel to karaf in some modules to make the build pass from clean local maven repo
     * [FELIX-1161] - Stange classloading issues when using compendium services
     * [FELIX-1192] - KARAF: Locking error in DefaultJDBCLock, also contains an eventual OutOfMemory error on locked processes.
     * [FELIX-1199] - Karaf: closing IO stream, removal of minor file descriptor leak.
     * [FELIX-1212] - Possible infinit loop when a remote ssh connection is closed
     * [FELIX-1218] - Existing configurations are not retrieved when installing a feature
     * [FELIX-1222] - [features-maven-plugin:add-features-to-repo] Incorrect parsing of pax mvn url string
     * [FELIX-1243] - Change the default port for the OSGI HTTP Service from 8080 to 8181
     * [FELIX-1253] - Cursor is blocked when the correct syntax is not displaed
     * [FELIX-1265] - The command refreshUrl does not work if the features.xml file is embedded in a Jar. The JVM caches jar entries
     * [FELIX-1274] - Spring deployer fails when bean class is from java.* packages
     * [FELIX-1315] - Karaf console is garbled on Windows
     * [FELIX-1320] - Authentication failed connecting via ssh on Windows
     * [FELIX-1361] - Issue with import/export version of the package : org.osgi.util.tracker in Apache Felix Karaf
     * [FELIX-1373] - featuresBoot in etc/org.apache.felix.karaf.featues no longer works
     * [FELIX-1375] - [Karaf] There's no 'help' command
     * [FELIX-1378] - Optional branding does not work in new gogo console
     * [FELIX-1391] - Unable to create new ConfigAdmin PID through karaf console
     * [FELIX-1423] - karaf fails to start in cygwin bash
     * [FELIX-1431] - Add a web console plugin to have access to the gogo shell
     * [FELIX-1449] - Tab completion doesn't work on Windows
     * [FELIX-1454] - install --help throws exception
     * [FELIX-1458] - 'servicemix server' and servicemix client' not working properly on windows
     * [FELIX-1459] - bin/karaf may fail to start when CDPATH is set (on POSIX shells)
     * [FELIX-1465] - Make symbolic names of Karaf webconsole bundles consistent with other bundles
     * [FELIX-1466] - org.apache.felix.karaf.features.FeaturesServiceTest fails
     * [FELIX-1468] - wrapper:install and admin:create prints old ansi output that need to be converted to real ansi
     * [FELIX-1472] - Better handling of configurations from the deployer and feature service
     * [FELIX-1515] - Entering an illegal command has an unusual effect
     * [FELIX-1517] - Manually deleting an instance breaks admin:list
     * [FELIX-1519] - Karaf Failover does not work with PostgreSQL and Oracle
     * [FELIX-1529] - The console does not work anymore when connecting to another karaf instance
     * [FELIX-1564] - Authentication failed when using admin:connect to connect to a newly created instance
     * [FELIX-1566] - Possible NPE when uninstalling a feature
     * [FELIX-1567] - When dropping an empty xml file (i.e. just an empty file with an xml extension) in the deploy folder, errors are printed to the console
     * [FELIX-1575] - The JMX connector can not be registered because of a clash in the name in the RMI registry
     * [FELIX-1576] - The features service should do a PackageAdmin.refresh() after uninstalling a feature
     * [FELIX-1602] - Unable to configure boot features on admin:create-d instance
     * [FELIX-1618] - in spring-dm feature, optional imports in spring-context won't get resolved

 ** Improvement
     * [FELIX-1062] - Upgrade to latest Felix Runtime
     * [FELIX-1063] - Upgrade to latest Felix Bundle Repository
     * [FELIX-1092] - The client jar / ssh deamon should support direct commands
     * [FELIX-1102] - Make gshell-core really independant of the MainService
     * [FELIX-1104] - Allow osgi/stop command to specify more than one bundle per command entry.
     * [FELIX-1107] - Make org.apache.servicemix.kernel.gshell.features dependency on org.apache.servicemix.kernel.filemonitor optional
     * [FELIX-1110] - Refactor filemonitor / deployers inside a deployer sub module
     * [FELIX-1112] - [PATCH] Allow osgi/start command to specify more than one bundle per command entry
     * [FELIX-1115] - Use better version ranges for imports
     * [FELIX-1121] - Add feature for installing Felix Web Console
     * [FELIX-1126] - No errors are generated for a bad URL passed to the "features/addUrl", "features/refreshUrl", or "features/list" commands.
     * [FELIX-1127] - Add a name for a repository
     * [FELIX-1133] - Allow usage of fragments in Karaf features
     * [FELIX-1149] - Describe ConfigAdmin configurations using metatype
     * [FELIX-1150] - Upgrade to SpringDM and SpringFramework
     * [FELIX-1172] - Rebrand Karaf locking mechanism.
     * [FELIX-1180] - Improve Karaf DefaultJDBCLock to use proper logging mechanism instead of System err prints.
     * [FELIX-1196] - Felix Web Console can't list Karaf features
     * [FELIX-1204] - Fix the karaf client to allow direct execution of commands
     * [FELIX-1220] - Remove unnecssary parts of a filter
     * [FELIX-1276] - There is no way to get all the Feature information from the FeaturesService
     * [FELIX-1303] - add an osgi/imports and osgi/exports to show a pretty-printed output of the imports/exports packages for a bundle
     * [FELIX-1450] - Karaf branding and plugins for Felix webconsole
     * [FELIX-1455] - OSGi Storage is hardcoded to be data/cache
     * [FELIX-1457] - Externalize and refactory management layer for FeatureService to be more scalable and more consistent with the OSGi management (using open mbeans)
     * [FELIX-1463] - Switch to Felix Fileinstall instead of our own file deployer
     * [FELIX-1467] - Add Karaf to top-level build files
     * [FELIX-1469] - Add svn:ignore property to a few Karaf projects
     * [FELIX-1528] - [karaf] Use a defined location for storing the list of managed instances create by the admin service
     * [FELIX-1555] - The osgi:list command should print spring-dm bundle state if spring-dm has been deployed
     * [FELIX-1558] - use com.sun.* instead of com.sun.management* for boot delegation
     * [FELIX-1594] - include blueprint bundle in karaf kit system folder

 ** New Feature
     * [FELIX-1109] - Deployer for blueprint applications
     * [FELIX-1111] - Ability to run Karaf on Equinox
     * [FELIX-1206] - [PATCH] config/propappend
     * [FELIX-1261] - Install/Uninstall Karaf Features from Felix WebConsole
     * [FELIX-1485] - Admin commands support in Karaf webconsole
     * [FELIX-1524] - Implement a better tac command
     * [FELIX-1547] - OS shell level admin commands for Karaf

 ** Task
     * [FELIX-1098] - Switch from spring-dm to blueprint
     * [FELIX-1099] - Switch from spring-dm integration tests to pax-exam
     * [FELIX-1116] - Rename to Apache Felix Karaf
     * [FELIX-1200] - Move features-maven-plugin into Karaf
     * [FELIX-1312] - Switch from gshell to gogo
     * [FELIX-1523] - Fix Karaf version to 0.9.0-SNAPSHOT as next release will be 1.0.0

 ** Sub-task
     * [FELIX-1117] - Update branding
     * [FELIX-1118] - Update shell scripts
     * [FELIX-1132] - Get rid of the JMX spring stuff in gshell-features




                    Apache ServiceMix Kernel 1.1.0
                    ==============================

  Overview
  --------

 The Apache ServiceMix Kernel 1.1.0 release brings a lot of new features enhancements and bug fixes:
  * remote connection using SSH protocol
  * provisioning enhancements: versioning / hot deployment of features
  * new commands, including OSGi related commands for the Configuration Admin and Package Admin services
  * improved spring integration: upgrade to spring 2.5.6 and spring-dm 1.2.0-m2, the osgi/list command
       now displays spring applications status
  * container level locking for master / slave deployments
  * support for JAXP 1.4 on all platforms
  * improved JMX support for managing the OSGi framework and features
 Note that the commands syntax has changed due to the upgrade to the latest gshell version.

  Known issues
  ============

     * [SMX4KNL-141] - The config/edit command changes does not takes precedence over configuration files in the etc folder at restart
     * [SMX4KNL-183] - features/uninstall behaves different in version selection than features/install
     * [SMX4KNL-189] - Shell completion works only in the root shell
     * [SMX4KNL-200] - The client jar / ssh daemon should support direct commands
     * [SMX4KNL-227] - Full support of fragment bundles
     * [SMX4KNL-228] - Warning messages when using OpenSSH 5.1 to connect to ServiceMix Kernel
     * [SMX4KNL-231] - Unable to log into ServiceMix Kernel using OpenSolaris SSH client
     * [SMX4KNL-232] - Unable to log into ServiceMix Kernel using Windows putty SSH client

  Changelog
  ---------

  The following list shows the bug fixes and enhancements included in this release:

 ** Bug
     * [SMX4KNL-72] - If there is no etc/startup.properties, the kernel hangs without displaying any error
     * [SMX4KNL-79] - When starting the kernel, a log entry states "Can not install feature ''"
     * [SMX4KNL-86] - When running integration tests, the container classpath contains all the test bundles which may cause problems
     * [SMX4KNL-87] - Problems with batch files on windows
     * [SMX4KNL-95] - kernel build failed in testing/itests
     * [SMX4KNL-96] - package missing for felix.config.properties
     * [SMX4KNL-97] - Dissociate the name and the location of ServiceMix Kernel instances managed by the admin shell
     * [SMX4KNL-100] - The client does not close when running "osgi shutdown" command
     * [SMX4KNL-102] - The file monitor should use ${servicemix.base} for default polling locations
     * [SMX4KNL-104] - When using a remote connection, errors are not reported correctly
     * [SMX4KNL-105] - Features are reinstalled on restart of servicemix
     * [SMX4KNL-112] - gshell pom needs to include gshell-config and gshell-packages modules
     * [SMX4KNL-115] - config.properties for SMX-Kernel needs to be updated
     * [SMX4KNL-117] - The Smx testing platform should take into account the boot delegation packages specified in the configuration file
     * [SMX4KNL-118] - The configuration file for felix comes from 3 different places in the svn tree, only one copy should be used
     * [SMX4KNL-122] - When using the client and trying to connect to another instance using the "admin connect" command, the console hangs
     * [SMX4KNL-123] - XML parsing does not work on non Sun JVMs and Sun's SAAJ bundle requires Sun's JAXP implementation
     * [SMX4KNL-124] - Issuing command "log d" fails with NullPointerException on AIX.
     * [SMX4KNL-126] - The user is no more authenticated with the new gshell integration
     * [SMX4KNL-128] - Remove OBR support from default distribution
     * [SMX4KNL-132] - osgi/list command should display the spring application state
     * [SMX4KNL-133] - jaxp-ri bundle miss javax.xml.datatype.DatatypeFactory factoryId under META-INF/services
     * [SMX4KNL-134] - XPathFactoryFinder in jaxp api should use factoryId to load the spi class in osgi enviroment
     * [SMX4KNL-135] - Remote shell missing help resources
     * [SMX4KNL-138] - No command history with Shell console
     * [SMX4KNL-140] - Shell commands references not cleaned up when bundle uninstalled
     * [SMX4KNL-142] - Starting a new instance that was created with admin on windows fails to start
     * [SMX4KNL-145] - java.lang.IllegalStateException: Streams not registered for thread
     * [SMX4KNL-148] - OPS4J maven repo missing form default search list
     * [SMX4KNL-149] - Build failure due to new sshd snapshot
     * [SMX4KNL-150] - Shell group name variable doesn't resolve
     * [SMX4KNL-151] - Update displayed version in Shell to be 1.1.0-SNAPSHOT for trunk
     * [SMX4KNL-153] - Stopping one of the "core" bundles of the servicemix engine block the server
     * [SMX4KNL-155] - Error changing manifest while bundle is deployed
     * [SMX4KNL-162] - The default jaas realm uses the config admin to store clear password
     * [SMX4KNL-164] - features/removeUrl does not remove the repository
     * [SMX4KNL-165] - Initial provisioning using features is very slow especially when using snapshots
     * [SMX4KNL-170] - Unknown protoc
