/*
 * 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 2.4.4
                    ==================

  Overview
  --------
 
  This is an update patch for Apache Karaf 2.4.x, containing many bug fixes, dependency updates, and improvements. 

  WARNING: Karaf 2.4.4 is the last release on the karaf-2.x branch. The karaf-2.x is now in "Non Active" mode. We encourage all users to upgrade to more recent Karaf versions.

  Changelog
  ---------

** Bug
    * [KARAF-969] - Feature installer should not accept different features with equal names
    * [KARAF-2522] - Boot feature bundle failure forces other bundles to start regardless 'start' flag
    * [KARAF-3303] - "keyStoreAvailabilityTimeout" is treated as boolean in JMX configuration
    * [KARAF-3448] - Feature conditions doesn't work when version is provided
    * [KARAF-3885] - Memory leak when use interactive client shell
    * [KARAF-3886] - should escape specify characters in ROLE names
    * [KARAF-3892] - System properties missing when logging in remotely
    * [KARAF-3899] - PID file for child instances not getting written when dir has spaces
    * [KARAF-3945] - Don't try and set permgen settings in Java 8
    * [KARAF-3946] - LDAP role mapping too sensitive to extra whitespace
    * [KARAF-3956] - should also add xalan into the endorse folder of distributions
    * [KARAF-3965] - Calling Ctrl+D in Karaf console, when karaf asks if it is necessary to dispay all console commands, causes console not responding forever
    * [KARAF-3996] - bin/karaf does not set ulimit if MAX_FD_LIMIT="unlimited"
    * [KARAF-4024] - role.policy "group" ceased to function
    * [KARAF-4026] - Karaf wrapper:install produces a SPARC32 binary on Solaris x86_64
    * [KARAF-4062] - Karaf client does now work after installing BouncyCastle
    * [KARAF-4066] - Features command bundle should recover if FeatureService unavailable initially
    * [KARAF-4094] - Multiple shutdown ports opened on 2.4.x when using file lock
    * [KARAF-4123] - Provide a more dynamic default for serviceUrl configuration
    * [KARAF-4150] - bin/status fails if KARAF_DEBUG is set
    * [KARAF-4267] - Remove derby config from windows karaf.bat

** Dependency upgrade
    * [KARAF-3914] - Upgrade to Spring 4.1.7.RELEASE
    * [KARAF-3915] - Upgrade to Spring 3.2.14.RELEASE
    * [KARAF-4023] - Upgrade to Pax Logging 1.8.4

** Improvement
    * [KARAF-3860] - fix [KARAF-3373] Log lower level root cause exception in LDAPLoginModule.doLogin()
    * [KARAF-3959] - make jdbc:create work better with MS SQL Server
    * [KARAF-3962] - Client can't use properties defined in custom.properties
    * [KARAF-3978] - enable specify different shell.init.script env for remote shell in "exec" and "shell" mode

** New Feature
    * [KARAF-1047] - feature:uninstall command may provide -r option


                    Apache Karaf 2.4.3
                    ==================

  Overview
  --------
 
  This is an update patch for Apache Karaf 2.4.x, containing many bug fixes, dependency updates, and improvements. New feature highlights include: Support for Karaf 4 feature repositories in degraded mode, support for Pax-web 4.x, and updates to Felix FileInstall 3.5.0 and Felix ConfigAdmin 1.8.4. 
  It is recommended that users update their deployment after reviewing the changelog below.
  

  Changelog
  ---------

** Bug
    * [KARAF-1823] - Memory leak on windows in SSHD ServerSession
    * [KARAF-3648] - should zero out instance pid in instance.properties when we shutdown an instance from shell
    * [KARAF-3683] - Improve message when feature is not found
    * [KARAF-3704] - Command jaas:groupadd allows adding duplicite groups
    * [KARAF-3711] - LDAP login module doesn't handle case where CN, OU, DC case doesn't match
    * [KARAF-3713] - JDBC generic datasource doesn't use the correct username property
    * [KARAF-3737] - ActiveMQ Broker disappears after Karaf restart
    * [KARAF-3747] - jndi:alias prefix a name with a /
    * [KARAF-3767] - Generic JDBC datasource should use 1 instead of WHEN_EXHAUSTED_BLOCK
    * [KARAF-3785] - jledit doesn't deal with comment, blocking the loader

** Dependency upgrade
    * [KARAF-3689] - Upgrade to Felix FileInstall 3.5.0
    * [KARAF-3699] - Upgrade to Felix ConfigAdmin 1.8.4
    * [KARAF-3724] - Upgrade to Pax Web 3.2.3
    * [KARAF-3731] - Upgrade to Spring 4.1.6_RELEASE
    * [KARAF-3735] - Upgrade to Pax Logging 1.8.3
    * [KARAF-3800] - Upgrade to Pax Web 3.2.4

** Improvement
    * [KARAF-2698] - Add -l (level) option to log:display/log:tail in order to filter messages only for a given log level (and higher)
    * [KARAF-3693] - only update the instances.properties when the "read" operation detect instance pid changes
    * [KARAF-3705] - put all bundles before FeaturesService available as startup feature
    * [KARAF-3776] - Support Karaf 4 feature repositories in a degraded mode
    * [KARAF-3780] - Support for pax-web 4.x
    * [KARAF-3790] - Add comment with karaf.lock.dir property in etc/system.properties
    * [KARAF-3823] - introduce karaf.secured.command.compulsory.roles system property


                    Apache Karaf 2.4.2
                    ==================

  Overview
  --------

This is an update patch for Apache Karaf 2.4.x, containing many bug fixes, dependency updates, and improvements. New feature highlights include: jaas commands to create and list groups, and bundles in etc/startup.properties should not be uninstalled through feature service (protecting essential features from accidental removal). It is recommended that users update their deployment after reviewing the changelog below.

  Changelog
  ---------

** Bug
 * [KARAF-2456|https://issues.apache.org/jira/browse/KARAF-2456] - Shutdown is stuck after wrapper:install
 * [KARAF-2678|https://issues.apache.org/jira/browse/KARAF-2678] - txlog files locked during admin clone on windows
 * [KARAF-3105|https://issues.apache.org/jira/browse/KARAF-3105] - Cannot use LDAPLoginModule with ActiveDirectory
 * [KARAF-3136|https://issues.apache.org/jira/browse/KARAF-3136] - Karaf can't start if you have whitespaces in brackets in JAVA_OPTS
 * [KARAF-3239|https://issues.apache.org/jira/browse/KARAF-3239] - Add fileinstall dependency in the features-maven-plugin
 * [KARAF-3414|https://issues.apache.org/jira/browse/KARAF-3414] - SshCommandTestBase uses some deprecated sshd APIs
 * [KARAF-3428|https://issues.apache.org/jira/browse/KARAF-3428] - Upgrade to Pax CDI 0.10.0
 * [KARAF-3430|https://issues.apache.org/jira/browse/KARAF-3430] - User name/password missing in connection factory created with jms:create
 * [KARAF-3441|https://issues.apache.org/jira/browse/KARAF-3441] - The admin:stop Command Does Not Zero Out Root Container PID
 * [KARAF-3465|https://issues.apache.org/jira/browse/KARAF-3465] - Add pax-* projects URLs in the etc/org.apache.karaf.features.repos.cfg
 * [KARAF-3471|https://issues.apache.org/jira/browse/KARAF-3471] - Karaf can't start if etc/config.properties is not writable
 * [KARAF-3494|https://issues.apache.org/jira/browse/KARAF-3494] - client should not fail if it can't read etc/org.apache.karaf.shell.cfg file
 * [KARAF-3499|https://issues.apache.org/jira/browse/KARAF-3499] - Missing properties on the eventadmin events for jaas
 * [KARAF-3507|https://issues.apache.org/jira/browse/KARAF-3507] - jms:create url and username options share the same -u alias
 * [KARAF-3527|https://issues.apache.org/jira/browse/KARAF-3527] - Appending config from feature doesn't work
 * [KARAF-3535|https://issues.apache.org/jira/browse/KARAF-3535] - Wrapper does not include classpath and JVM options for making JMX ACLs work
 * [KARAF-3536|https://issues.apache.org/jira/browse/KARAF-3536] - Diagnostic module won't compile with IBM JDK
 * [KARAF-3562|https://issues.apache.org/jira/browse/KARAF-3562] - DefaultJDBCLock case sensitive issue
 * [KARAF-3564|https://issues.apache.org/jira/browse/KARAF-3564] - bin/stop fails for slave in case of Lock strategies
 * [KARAF-3578|https://issues.apache.org/jira/browse/KARAF-3578] - restore web:list command
 * [KARAF-3625|https://issues.apache.org/jira/browse/KARAF-3625] - Password encryption doesn't work
 * [KARAF-3632|https://issues.apache.org/jira/browse/KARAF-3632] - Change transaction parameter in features
 * [KARAF-3642|https://issues.apache.org/jira/browse/KARAF-3642] - bundles mistaken got unstalled even though it has a depending feature with it.
 * [KARAF-3648|https://issues.apache.org/jira/browse/KARAF-3648] - should zero out instance pid in instance.properties when we shutdown an instance from shell
 * [KARAF-3651|https://issues.apache.org/jira/browse/KARAF-3651] - The karaf client can cause a NPE in org.apache.sshd.common.util.Buffer.putString(Buffer.java:434)
 * [KARAF-3656|https://issues.apache.org/jira/browse/KARAF-3656] - SSH message channel closed too early
 * [KARAF-3659|https://issues.apache.org/jira/browse/KARAF-3659] - shutdown of karaf throws NullPointerException if jmx ssl keystore is not configured properly
 * [KARAF-3660|https://issues.apache.org/jira/browse/KARAF-3660] - Setting JMX SSL causes StringIndexOutOfBoundsException when setting keyPasswords without = symbol

** Dependency upgrade
 * [KARAF-3470|https://issues.apache.org/jira/browse/KARAF-3470] - Upgrade to Pax Exam 4.4.0
 * [KARAF-3510|https://issues.apache.org/jira/browse/KARAF-3510] - Upgrade to pax-web 3.1.4
 * [KARAF-3548|https://issues.apache.org/jira/browse/KARAF-3548] - Upgrade to bndlib 2.4.0
 * [KARAF-3549|https://issues.apache.org/jira/browse/KARAF-3549] - Upgrade to commons-codec 1.10
 * [KARAF-3552|https://issues.apache.org/jira/browse/KARAF-3552] - Upgrade to Aries Blueprint CM 1.0.6
 * [KARAF-3553|https://issues.apache.org/jira/browse/KARAF-3553] - Upgrade to Aries Blueprint Core 1.4.3
 * [KARAF-3554|https://issues.apache.org/jira/browse/KARAF-3554] - Upgrade to Aries JNDI Core 1.0.2
 * [KARAF-3556|https://issues.apache.org/jira/browse/KARAF-3556] - Upgrade to Aries Transaction Blueprint 1.0.2
 * [KARAF-3558|https://issues.apache.org/jira/browse/KARAF-3558] - Upgrade to sshd-core 0.13.0
 * [KARAF-3563|https://issues.apache.org/jira/browse/KARAF-3563] - Upgrade to Pax-URL-Aether 2.4.0
 * [KARAF-3586|https://issues.apache.org/jira/browse/KARAF-3586] - Upgrade to pax-logging 1.8.2
 * [KARAF-3587|https://issues.apache.org/jira/browse/KARAF-3587] - Upgrade to pax-url 2.4.0
 * [KARAF-3591|https://issues.apache.org/jira/browse/KARAF-3591] - Upgrade to pax-web 3.2.0
 * [KARAF-3594|https://issues.apache.org/jira/browse/KARAF-3594] - Upgrade to Aries JMX Core 1.1.3
 * [KARAF-3595|https://issues.apache.org/jira/browse/KARAF-3595] - Upgrade to Aries Transaction JDBC 2.1.1
 * [KARAF-3598|https://issues.apache.org/jira/browse/KARAF-3598] - Upgrade to bundlerepository 2.0.4
 * [KARAF-3599|https://issues.apache.org/jira/browse/KARAF-3599] - Upgrade to configadmin 1.8.2
 * [KARAF-3600|https://issues.apache.org/jira/browse/KARAF-3600] - Upgrade to felix utils 1.8.0
 * [KARAF-3657|https://issues.apache.org/jira/browse/KARAF-3657] - Upgrade to ServiceMix Specs 2.5.0
 * [KARAF-3667|https://issues.apache.org/jira/browse/KARAF-3667] - Upgrade to sshd 0.14.0
 * [KARAF-3678|https://issues.apache.org/jira/browse/KARAF-3678] - Upgrade to Pax Web 3.2.2
 * [KARAF-3685|https://issues.apache.org/jira/browse/KARAF-3685] - Upgrade to Aries JNDI URL 1.1.0
 * [KARAF-3686|https://issues.apache.org/jira/browse/KARAF-3686] - Upgrade to Pax Exam 4.5.0
 * [KARAF-3688|https://issues.apache.org/jira/browse/KARAF-3688] - Upgrade to Pax URL 2.4.1
 * [KARAF-3691|https://issues.apache.org/jira/browse/KARAF-3691] - Upgrade to Felix Metatype 1.0.12
 * [KARAF-3692|https://issues.apache.org/jira/browse/KARAF-3692] - Upgrade to Felix WebConsole 4.2.8

** Documentation
 * [KARAF-3439|https://issues.apache.org/jira/browse/KARAF-3439] - [Docs] karaf.lock.delay in example is set to very low number.

** Improvement
 * [KARAF-3373|https://issues.apache.org/jira/browse/KARAF-3373] - Log lower level root cause exception in LDAPLoginModule.doLogin()
 * [KARAF-3433|https://issues.apache.org/jira/browse/KARAF-3433] - when OBR resolver to resolve the bundles in a given feature, it should also take the dependency feature bundles into account
 * [KARAF-3446|https://issues.apache.org/jira/browse/KARAF-3446] - avoid Karaf client script "logout" command throwing an exception
 * [KARAF-3452|https://issues.apache.org/jira/browse/KARAF-3452] - Upgrade to maven-release-plugin 2.5.1
 * [KARAF-3461|https://issues.apache.org/jira/browse/KARAF-3461] - bin/karaf doesn't use the provided KARAF_HOME
 * [KARAF-3500|https://issues.apache.org/jira/browse/KARAF-3500] - NPE throws when executing "bin/client shutdown"
 * [KARAF-3513|https://issues.apache.org/jira/browse/KARAF-3513] - JMXConnectorServer should be able to pick up the new KeystoreInstance available in container
 * [KARAF-3575|https://issues.apache.org/jira/browse/KARAF-3575] - Enhance diagnostic core to allow "external" dump providers
 * [KARAF-3576|https://issues.apache.org/jira/browse/KARAF-3576] - Optimize GuardProxyCatalog#getServiceInvocationRoles
 * [KARAF-3577|https://issues.apache.org/jira/browse/KARAF-3577] - Optimize SecuredCommandConfigTransformer#generateServiceGuardConfig
 * [KARAF-3583|https://issues.apache.org/jira/browse/KARAF-3583] - Add option to configure log level in the client script
 * [KARAF-3673|https://issues.apache.org/jira/browse/KARAF-3673] - Align classmate version between hibernate and hibernate-validator features

** New Feature
 * [KARAF-3579|https://issues.apache.org/jira/browse/KARAF-3579] - bundles in etc/startup.properties shouldn't be uninstalled through feature service
 * [KARAF-3592|https://issues.apache.org/jira/browse/KARAF-3592] - Add jaas commands to create group and list group

** Task
 * [KARAF-3464|https://issues.apache.org/jira/browse/KARAF-3464] - Upgrade to Pax CDI 0.11.0

** Wish
 * [KARAF-3444|https://issues.apache.org/jira/browse/KARAF-3444] - ExecuteAction - consider log level INFO changing to DEBUG


                    Apache Karaf 2.4.1
                    ==================

  Overview
  --------

This is an update patch for Apache Karaf 2.4.x, containing many bug fixes, dependency updates, and improvements. New features highlights include: Regex support in features commands, added an option to uninstall transitive features, and renamed jpa feature as jpa/jpa20 and jpa21. It is recommended that users update their deployment after reviewing the changelog below.

  Changelog
  ---------

** Bug
 * [KARAF-1701|https://issues.apache.org/jira/browse/KARAF-1701] - Parsing of config for a field with cardinality > 1 is incorrectlyprocessed and displayed on Admin Console
 * [KARAF-2890|https://issues.apache.org/jira/browse/KARAF-2890] - The env variables can't be read while running karaf as a Linux service
 * [KARAF-3023|https://issues.apache.org/jira/browse/KARAF-3023] - Wrong repositories for features after "features:list -o" command in 2.3.x
 * [KARAF-3085|https://issues.apache.org/jira/browse/KARAF-3085] - features:chooseurl/feature:repo-add should support "real" version range
 * [KARAF-3093|https://issues.apache.org/jira/browse/KARAF-3093] - ops4j repositories (release/snapshot) break pax-url resolution
 * [KARAF-3103|https://issues.apache.org/jira/browse/KARAF-3103] - config:edit does not correctly handle configuration visibility for --factory calls.
 * [KARAF-3239|https://issues.apache.org/jira/browse/KARAF-3239] - Add fileinstall dependency in the features-maven-plugin
 * [KARAF-3240|https://issues.apache.org/jira/browse/KARAF-3240] - BundleWatcher should not depend to pax-url-mvn
 * [KARAF-3250|https://issues.apache.org/jira/browse/KARAF-3250] - JVM options ignored on Windows
 * [KARAF-3254|https://issues.apache.org/jira/browse/KARAF-3254] - Very high memory consumption with the watch command
 * [KARAF-3257|https://issues.apache.org/jira/browse/KARAF-3257] - NullPointerException on Karaf osgi shell commands
 * [KARAF-3261|https://issues.apache.org/jira/browse/KARAF-3261] - jdbc command (using JdbcConnector.java) does not honour service ranking and throws IllegalArgumentException instead
 * [KARAF-3269|https://issues.apache.org/jira/browse/KARAF-3269] - ssh into karaf as user with no roles throws exception and user shell stays frozen
 * [KARAF-3284|https://issues.apache.org/jira/browse/KARAF-3284] - The shell-log bundle should not import org.apache.log4j.* package
 * [KARAF-3288|https://issues.apache.org/jira/browse/KARAF-3288] - karaf script doesn't start on Solaris if JAVA_HOME is not set
 * [KARAF-3325|https://issues.apache.org/jira/browse/KARAF-3325] - Karaf throws SocketTimeoutException and exits after 49 days
 * [KARAF-3327|https://issues.apache.org/jira/browse/KARAF-3327] - Incorrect LC_CTYPE parsing
 * [KARAF-3335|https://issues.apache.org/jira/browse/KARAF-3335] - Endorsed org.apache.karaf.exception-3.0.2 jar causes issues with Java 8 Nashorn scripts
 * [KARAF-3346|https://issues.apache.org/jira/browse/KARAF-3346] - Stopping Karaf 2.4.0 prints ugly ERRORS in the log
 * [KARAF-3350|https://issues.apache.org/jira/browse/KARAF-3350] - The log:display command fails with CNFE if the pax-logging-service bundle has been refreshed
 * [KARAF-3377|https://issues.apache.org/jira/browse/KARAF-3377] - Starting Karaf on Windows changes console title
 * [KARAF-3379|https://issues.apache.org/jira/browse/KARAF-3379] - jpa feature incompatible to hibernate 4.3 feature
 * [KARAF-3397|https://issues.apache.org/jira/browse/KARAF-3397] - FeaturesServiceMBeanImpl throws an Exception when listening the features
 * [KARAF-3412|https://issues.apache.org/jira/browse/KARAF-3412] - should add javax.management.builder.initial flag for Karaf child instance
 * [KARAF-3413|https://issues.apache.org/jira/browse/KARAF-3413] - should also associate the role to run executeScript
 * [KARAF-3415|https://issues.apache.org/jira/browse/KARAF-3415] - memory leak when run ssh client
 * [KARAF-3420|https://issues.apache.org/jira/browse/KARAF-3420] - Java Debug options are Pre Java 5.0

** Dependency upgrade
 * [KARAF-3226|https://issues.apache.org/jira/browse/KARAF-3226] - Upgrade to Spring 4.0.7.RELEASE
 * [KARAF-3227|https://issues.apache.org/jira/browse/KARAF-3227] - Upgrade to Spring 3.2.11.RELEASE
 * [KARAF-3229|https://issues.apache.org/jira/browse/KARAF-3229] - Upgrade to Felix EventAdmin 1.4.2
 * [KARAF-3233|https://issues.apache.org/jira/browse/KARAF-3233] - Upgrade to Pax Exam 4.2.0
 * [KARAF-3243|https://issues.apache.org/jira/browse/KARAF-3243] - Upgrade to Pax URL 2.2.0
 * [KARAF-3265|https://issues.apache.org/jira/browse/KARAF-3265] - Upgrade to Aries Blueprint CM 1.0.5
 * [KARAF-3281|https://issues.apache.org/jira/browse/KARAF-3281] - Upgrade to Pax Logging 1.8.0 (log4j v2 support)
 * [KARAF-3291|https://issues.apache.org/jira/browse/KARAF-3291] - Upgrade to Pax Exam 4.3.0
 * [KARAF-3305|https://issues.apache.org/jira/browse/KARAF-3305] - Upgrade to Aries Blueprint Core 1.4.2
 * [KARAF-3306|https://issues.apache.org/jira/browse/KARAF-3306] - Upgrade to Aries JNDI API 1.1.0
 * [KARAF-3307|https://issues.apache.org/jira/browse/KARAF-3307] - Upgrade to Aries JPA API 1.0.2/JPA Container 1.0.2/JPA Blueprint Aries 1.0.4/JPA Container Context 1.0.4
 * [KARAF-3308|https://issues.apache.org/jira/browse/KARAF-3308] - Upgade to Aries Proxy Impl 1.0.4
 * [KARAF-3309|https://issues.apache.org/jira/browse/KARAF-3309] - Upgrade to Felix Maven Bundle Plugin 2.5.3
 * [KARAF-3312|https://issues.apache.org/jira/browse/KARAF-3312] - Upgrade to maven-assembly-plugin 2.4.1
 * [KARAF-3313|https://issues.apache.org/jira/browse/KARAF-3313] - Upgrade to maven-compiler-plugin 3.2
 * [KARAF-3314|https://issues.apache.org/jira/browse/KARAF-3314] - Upgrade to maven-dependency-plugin 2.9
 * [KARAF-3315|https://issues.apache.org/jira/browse/KARAF-3315] - Upgrade to maven-jar-plugin 2.5
 * [KARAF-3316|https://issues.apache.org/jira/browse/KARAF-3316] - Upgrade to maven-site-plugin 3.4
 * [KARAF-3317|https://issues.apache.org/jira/browse/KARAF-3317] - Upgrade to maven-source-plugin 2.4
 * [KARAF-3318|https://issues.apache.org/jira/browse/KARAF-3318] - Upgrade to maven-surefire-plugin 2.17
 * [KARAF-3319|https://issues.apache.org/jira/browse/KARAF-3319] - Upgrade to maven-war-plugin 2.5
 * [KARAF-3320|https://issues.apache.org/jira/browse/KARAF-3320] - Upgrade to apache-rat-plugin 0.11
 * [KARAF-3321|https://issues.apache.org/jira/browse/KARAF-3321] - Upgrade to build-helper-maven-plugin 1.9.1
 * [KARAF-3322|https://issues.apache.org/jira/browse/KARAF-3322] - Upgrade to exec-maven-plugin 1.3.2
 * [KARAF-3331|https://issues.apache.org/jira/browse/KARAF-3331] - Upgrade to Aries Transaction Manager 1.1.1
 * [KARAF-3338|https://issues.apache.org/jira/browse/KARAF-3338] - Upgrade to Apache POM 15
 * [KARAF-3353|https://issues.apache.org/jira/browse/KARAF-3353] - Upgrade jandex in hibernate feature to avoid wrapping
 * [KARAF-3396|https://issues.apache.org/jira/browse/KARAF-3396] - Upgrade to pax-logging 1.8.1

** Improvement
 * [KARAF-2104|https://issues.apache.org/jira/browse/KARAF-2104] - Add regex support in features:* commands
 * [KARAF-2809|https://issues.apache.org/jira/browse/KARAF-2809] - Add an option to uninstall transitive features
 * [KARAF-2984|https://issues.apache.org/jira/browse/KARAF-2984] - Improve setenv script to include placeholder for extra java options
 * [KARAF-3016|https://issues.apache.org/jira/browse/KARAF-3016] - Be able to redirect child instance std out in a file
 * [KARAF-3246|https://issues.apache.org/jira/browse/KARAF-3246] - Rename jpa features as jpa/jpa20 and jpa21
 * [KARAF-3255|https://issues.apache.org/jira/browse/KARAF-3255] - Document jasypt property placeholder
 * [KARAF-3268|https://issues.apache.org/jira/browse/KARAF-3268] - remove karaf.admin.role
 * [KARAF-3293|https://issues.apache.org/jira/browse/KARAF-3293] - more fine-grained way to specify the jmx.acl.whitelist.cfg
 * [KARAF-3367|https://issues.apache.org/jira/browse/KARAF-3367] - add additional configuration options when use wrapper:install
 * [KARAF-3368|https://issues.apache.org/jira/browse/KARAF-3368] - Support reference:file:xxx urls in startup.properties
 * [KARAF-3372|https://issues.apache.org/jira/browse/KARAF-3372] - only register HUP signal handler for non-windows platform
 * [KARAF-3382|https://issues.apache.org/jira/browse/KARAF-3382] - Support configuration for custom LDAP group to JAAS role mapping
 * [KARAF-3393|https://issues.apache.org/jira/browse/KARAF-3393] - Provide ready to use jpa20 and jpa21 features
 * [KARAF-3403|https://issues.apache.org/jira/browse/KARAF-3403] - bin/client Utility Throws ArrayIndexOutOfBoundsException
 * [KARAF-3411|https://issues.apache.org/jira/browse/KARAF-3411] - windows startup scripts don't handle setenv.bat correctly
 * [KARAF-3421|https://issues.apache.org/jira/browse/KARAF-3421] - Add a variable for the debug port number.

** New Feature
 * [KARAF-3228|https://issues.apache.org/jira/browse/KARAF-3228] - Add Spring 4.1.2.RELEASE_1 features

** Task
 * [KARAF-3245|https://issues.apache.org/jira/browse/KARAF-3245] - Upgrade spring from 3.2.9 to 3.2.11
 * [KARAF-3401|https://issues.apache.org/jira/browse/KARAF-3401] - Typo in users.properties
 * [KARAF-3422|https://issues.apache.org/jira/browse/KARAF-3422] - Upgrade pax-url dependency to 2.3.0

** Test
 * [KARAF-3339|https://issues.apache.org/jira/browse/KARAF-3339] - itests execution is very long

                    Apache Karaf 2.4.0
                    ==================

  Overview
  --------

This release represents a new branch of Apache Karaf development. It includes the latest Aries and Pax libraries, Apache Pom 14, add support for role-based JMX authorization, includes heap dumps when we create debugging data from create dump command, blueprint-web feature, support for JAAS groups, and includes Pax CDI feature. There are several hundred items currently in this RC's release notes, so you'll want to spend some time discovering all the hidden gems.

  Changelog
  ---------

** Sub-task
 * [KARAF-2228|https://issues.apache.org/jira/browse/KARAF-2228] - Karaf.webconsole uses wrong version in export-package header
 * [KARAF-2229|https://issues.apache.org/jira/browse/KARAF-2229] - Adapt karaf.webconsole package-imports/exports to felix.webconsole all-in-one bundle

** Bug
 * [KARAF-911|https://issues.apache.org/jira/browse/KARAF-911] - features-maven-plugin:add-features-to-repo doesn't use maven proxy setting
 * [KARAF-1074|https://issues.apache.org/jira/browse/KARAF-1074] - features-maven-plugin collects wrong artifacts
 * [KARAF-1146|https://issues.apache.org/jira/browse/KARAF-1146] - features-maven-plugin collects wrong artifacts
 * [KARAF-1367|https://issues.apache.org/jira/browse/KARAF-1367] - Remove line number logging from default logging config
 * [KARAF-1487|https://issues.apache.org/jira/browse/KARAF-1487] - Bundles in deploy are deployed before startup process had been  finished
 * [KARAF-1545|https://issues.apache.org/jira/browse/KARAF-1545] - Jar files in lib directory require "karaf-" prefix in order to be loaded
 * [KARAF-1553|https://issues.apache.org/jira/browse/KARAF-1553] - Command service references should be AUTO_EXPORT_INTERFACES
 * [KARAF-1560|https://issues.apache.org/jira/browse/KARAF-1560] - config:update throws ClassCastException when used on a Configuration with boolean fields created in the web console
 * [KARAF-1561|https://issues.apache.org/jira/browse/KARAF-1561] - Restart Framework from Web Console's System Information tab results in Karaf dying
 * [KARAF-1593|https://issues.apache.org/jira/browse/KARAF-1593] - Pressing strg+d during log:tail make everything hang
 * [KARAF-1894|https://issues.apache.org/jira/browse/KARAF-1894] - Framework's active start level is set to org.osgi.framework.startlevel.beginning too early when launching Karaf with empty bundle cache
 * [KARAF-1973|https://issues.apache.org/jira/browse/KARAF-1973] - NullPointerException when performing log:clear then log:tail
 * [KARAF-2020|https://issues.apache.org/jira/browse/KARAF-2020] - log:tail blocks on ^D
 * [KARAF-2095|https://issues.apache.org/jira/browse/KARAF-2095] - Camel Route (JMS Polling) not working when installing feature "jndi"
 * [KARAF-2125|https://issues.apache.org/jira/browse/KARAF-2125] - "Components" tab not shown in WebConsole
 * [KARAF-2137|https://issues.apache.org/jira/browse/KARAF-2137] - Unable to prevent remote JMX access 
 * [KARAF-2188|https://issues.apache.org/jira/browse/KARAF-2188] - JPA bundle error out at shutdown
 * [KARAF-2189|https://issues.apache.org/jira/browse/KARAF-2189] - blueprint disable service too soon at shutdown
 * [KARAF-2191|https://issues.apache.org/jira/browse/KARAF-2191] - Karaf 3.0.x CLONE - Karaf startup fails with NullPointerException when logfile can't be written
 * [KARAF-2201|https://issues.apache.org/jira/browse/KARAF-2201] - http, war, and http-whiteboard feature should use the version of underlying pax-web feature
 * [KARAF-2206|https://issues.apache.org/jira/browse/KARAF-2206] - The container fails to start correctly with IBM Java 6
 * [KARAF-2215|https://issues.apache.org/jira/browse/KARAF-2215] - <packaging>kar</packaging> fails to attach artifact
 * [KARAF-2218|https://issues.apache.org/jira/browse/KARAF-2218] - Fix manual links on website
 * [KARAF-2221|https://issues.apache.org/jira/browse/KARAF-2221] - The admin service is not safe when used to create / start agents quickly
 * [KARAF-2234|https://issues.apache.org/jira/browse/KARAF-2234] - Thrown Exception in shell commands should be logged as ERROR
 * [KARAF-2236|https://issues.apache.org/jira/browse/KARAF-2236] - karaf scripts fail when paths contain spaces
 * [KARAF-2237|https://issues.apache.org/jira/browse/KARAF-2237] - LDAP login module cannot look up keystore and/or truststore
 * [KARAF-2244|https://issues.apache.org/jira/browse/KARAF-2244] - BundleWatcher should wait for refresh to be finished before updating another bundle
 * [KARAF-2248|https://issues.apache.org/jira/browse/KARAF-2248] - Karaf console wraps on Windows 7 when connecting using the client
 * [KARAF-2249|https://issues.apache.org/jira/browse/KARAF-2249] - config:property-append doesn't set a needed comma for seperation
 * [KARAF-2259|https://issues.apache.org/jira/browse/KARAF-2259] - jetty.xml has old RolePrincipal class name
 * [KARAF-2269|https://issues.apache.org/jira/browse/KARAF-2269] - Servicemix Specs Activator/OsgiLocator Broken due to KARAF-2136
 * [KARAF-2270|https://issues.apache.org/jira/browse/KARAF-2270] - Service wrapper assumes java is on system path
 * [KARAF-2285|https://issues.apache.org/jira/browse/KARAF-2285] - Some tabs in WebConsole are blank
 * [KARAF-2297|https://issues.apache.org/jira/browse/KARAF-2297] - WebConsole should export org.json
 * [KARAF-2306|https://issues.apache.org/jira/browse/KARAF-2306] - BootClasspathLibraries should be copied before Karaf classpath settings in pax-exam container
 * [KARAF-2309|https://issues.apache.org/jira/browse/KARAF-2309] - Normal Zip file which put into the deploy folder can't be deleted anymore
 * [KARAF-2313|https://issues.apache.org/jira/browse/KARAF-2313] - The feature:list command does not support multiple versions of the same feature
 * [KARAF-2314|https://issues.apache.org/jira/browse/KARAF-2314] - Remove SNAPSHOT repositories by default in the distribution
 * [KARAF-2315|https://issues.apache.org/jira/browse/KARAF-2315] - The check for jvm.dll happens to early in the bat file
 * [KARAF-2316|https://issues.apache.org/jira/browse/KARAF-2316] - features-maven-plugin ignore proxy settings in maven settings.xml
 * [KARAF-2339|https://issues.apache.org/jira/browse/KARAF-2339] - Do not install boot features asynchronously
 * [KARAF-2346|https://issues.apache.org/jira/browse/KARAF-2346] - WebConsole should export package with version 3.1.2 (and not 4.0.0)
 * [KARAF-2357|https://issues.apache.org/jira/browse/KARAF-2357] - features-create-kar goal of the karaf-maven-plugin ignores bundles listed in the features that have the "dependency" property set to "true"
 * [KARAF-2359|https://issues.apache.org/jira/browse/KARAF-2359] - DirectoryWatcher for "deploy" directory should be configured to wait until framework start level reaches 60
 * [KARAF-2362|https://issues.apache.org/jira/browse/KARAF-2362] - Authentication fail on a child instance
 * [KARAF-2363|https://issues.apache.org/jira/browse/KARAF-2363] - Second feature validation result in an Exception.
 * [KARAF-2365|https://issues.apache.org/jira/browse/KARAF-2365] - jaas:manage selects wrong configuration
 * [KARAF-2366|https://issues.apache.org/jira/browse/KARAF-2366] - Cannot Update Factory Configuration Not Backed By A File With The "config:" Command
 * [KARAF-2368|https://issues.apache.org/jira/browse/KARAF-2368] - Commands with more than one argument have incorrect help string
 * [KARAF-2378|https://issues.apache.org/jira/browse/KARAF-2378] - Shell:exec doesn't show output for commands that execute too quickly
 * [KARAF-2381|https://issues.apache.org/jira/browse/KARAF-2381] - The shell log:set command not as documented
 * [KARAF-2390|https://issues.apache.org/jira/browse/KARAF-2390] - Fix namespace handlers provided service header
 * [KARAF-2391|https://issues.apache.org/jira/browse/KARAF-2391] - Add generic capabilities provided by the framework
 * [KARAF-2400|https://issues.apache.org/jira/browse/KARAF-2400] - config:prop* command's '-b' option not as documented
 * [KARAF-2403|https://issues.apache.org/jira/browse/KARAF-2403] - NPE in log:tail after doing a log:clear
 * [KARAF-2407|https://issues.apache.org/jira/browse/KARAF-2407] - dev:create-dump should generate full stack traces of each thread
 * [KARAF-2416|https://issues.apache.org/jira/browse/KARAF-2416] - OverlappingFileLockException when cloning an instance
 * [KARAF-2417|https://issues.apache.org/jira/browse/KARAF-2417] - Logging doesn't work in cloned instances 
 * [KARAF-2418|https://issues.apache.org/jira/browse/KARAF-2418] - Minimal distro hanging on startup
 * [KARAF-2420|https://issues.apache.org/jira/browse/KARAF-2420] - blueprint deployer: redeploy untouched blueprint xml in deploy folder after restart
 * [KARAF-2421|https://issues.apache.org/jira/browse/KARAF-2421] - FeatureFinder should prevent ArrayIndexOutOfBoundException
 * [KARAF-2423|https://issues.apache.org/jira/browse/KARAF-2423] - Avoid overlapping lock exceptions when multiple threads access the admin service
 * [KARAF-2424|https://issues.apache.org/jira/browse/KARAF-2424] - Wrapper's generated karaf-service does not work on Solaris
 * [KARAF-2429|https://issues.apache.org/jira/browse/KARAF-2429] - It would be nice to have scr:list sort components by id.
 * [KARAF-2437|https://issues.apache.org/jira/browse/KARAF-2437] - Logs still have been printed into console after log:tail and Ctrl + C
 * [KARAF-2445|https://issues.apache.org/jira/browse/KARAF-2445] - "bin\karaf.bat clean" does not work with whitespaces in KARAF_HOME
 * [KARAF-2446|https://issues.apache.org/jira/browse/KARAF-2446] - Fix etc/config.properties for endorsed xercesImpl
 * [KARAF-2447|https://issues.apache.org/jira/browse/KARAF-2447] - Managing child instances does not work with whitespaces in KARAF_HOME
 * [KARAF-2448|https://issues.apache.org/jira/browse/KARAF-2448] - Failures in org.apache.karaf.itests.OsgiTest
 * [KARAF-2452|https://issues.apache.org/jira/browse/KARAF-2452] - The "--force" option is not honored when designate bundle as a system bundle
 * [KARAF-2458|https://issues.apache.org/jira/browse/KARAF-2458] - Update to Spring 3.2.4.RELEASE
 * [KARAF-2471|https://issues.apache.org/jira/browse/KARAF-2471] - Karaf Wrapper doesn't return the correct exit result when using RUN_AS_USER
 * [KARAF-2475|https://issues.apache.org/jira/browse/KARAF-2475] - Config bound to bundle after uninstall
 * [KARAF-2476|https://issues.apache.org/jira/browse/KARAF-2476] - Special characters are dropped when generating the LDAP the user and role filters
 * [KARAF-2479|https://issues.apache.org/jira/browse/KARAF-2479] - ensure we escape \ in LDAP filter  correctly
 * [KARAF-2481|https://issues.apache.org/jira/browse/KARAF-2481] - LogService WebConsole view doesn't work with Equinox
 * [KARAF-2492|https://issues.apache.org/jira/browse/KARAF-2492] - Possible UnsatisfiedLinkError when using dev:restart with native libraries
 * [KARAF-2497|https://issues.apache.org/jira/browse/KARAF-2497] - NPE in PropertiesLoginModule
 * [KARAF-2502|https://issues.apache.org/jira/browse/KARAF-2502] - karaf-service script does not properly set the RUN_AS_GROUP variable if a primary group is not set
 * [KARAF-2515|https://issues.apache.org/jira/browse/KARAF-2515] - Prevent NPE in log:tail
 * [KARAF-2516|https://issues.apache.org/jira/browse/KARAF-2516] - log:tail | grep foo - throws interrupted exception when using ctrl + c
 * [KARAF-2523|https://issues.apache.org/jira/browse/KARAF-2523] - Karaf JDBC lock doesn't work with M$ SQLServer
 * [KARAF-2525|https://issues.apache.org/jira/browse/KARAF-2525] - Karaf 2.4.0-SNAPSHOT doesn't start due to missing startup bundle
 * [KARAF-2528|https://issues.apache.org/jira/browse/KARAF-2528] - don't allow authentication = none if LDAP user or password is provided
 * [KARAF-2529|https://issues.apache.org/jira/browse/KARAF-2529] - Use connection credentials when searching for roles in LDAP
 * [KARAF-2530|https://issues.apache.org/jira/browse/KARAF-2530] - Build failure on Mac....
 * [KARAF-2531|https://issues.apache.org/jira/browse/KARAF-2531] - NPE in log:tail after a log:clear
 * [KARAF-2540|https://issues.apache.org/jira/browse/KARAF-2540] - LDAP authentication defaults to null if not specified
 * [KARAF-2541|https://issues.apache.org/jira/browse/KARAF-2541] - On Mac OS locate the JAVA_HOME
 * [KARAF-2552|https://issues.apache.org/jira/browse/KARAF-2552] - Running log:tail on admin:console causes full CPU usage.
 * [KARAF-2558|https://issues.apache.org/jira/browse/KARAF-2558] - Unit Tests in error when building from trunk  on Windows platform
 * [KARAF-2577|https://issues.apache.org/jira/browse/KARAF-2577] - --help option doesn't work with command through bin/admin or bin/instance script
 * [KARAF-2587|https://issues.apache.org/jira/browse/KARAF-2587] - bin/admin doesn't work due to org.apache.felix.service.command.CommandSession class not found
 * [KARAF-2594|https://issues.apache.org/jira/browse/KARAF-2594] - The use of inheritable thread locals in ThreadIO can cause problems
 * [KARAF-2602|https://issues.apache.org/jira/browse/KARAF-2602] - Support Java 8
 * [KARAF-2605|https://issues.apache.org/jira/browse/KARAF-2605] - When reading user input from console, always delegate to the ConsoleReader
 * [KARAF-2607|https://issues.apache.org/jira/browse/KARAF-2607] - PropertiesBackingEngine allows duplicate roles to be assigned to user
 * [KARAF-2621|https://issues.apache.org/jira/browse/KARAF-2621] - PropertiesLoginModuleTest.testNonExistantPropertiesFile fails on windows
 * [KARAF-2622|https://issues.apache.org/jira/browse/KARAF-2622] - shouldn't encrypt public key for PublickeyLoginModule
 * [KARAF-2624|https://issues.apache.org/jira/browse/KARAF-2624] - Karaf script for AIX should use JVM option: -Xdump:heap instead of IBM_JAVA_HEAPDUMP_TEXT to control production heapdumps
 * [KARAF-2626|https://issues.apache.org/jira/browse/KARAF-2626] - Add load-test and threads commands
 * [KARAF-2627|https://issues.apache.org/jira/browse/KARAF-2627] - The features:list command is slow when doing unnecessary repo validation
 * [KARAF-2628|https://issues.apache.org/jira/browse/KARAF-2628] - Fix synchronization issues in the commands completer
 * [KARAF-2633|https://issues.apache.org/jira/browse/KARAF-2633] - Prevent deadlocks with classloaders on JDK 6
 * [KARAF-2634|https://issues.apache.org/jira/browse/KARAF-2634] - Specify the alias when registering servlets to eliminate warnings
 * [KARAF-2635|https://issues.apache.org/jira/browse/KARAF-2635] - Deployment errors/warnings for bundles within "deploy" directory should be logged
 * [KARAF-2636|https://issues.apache.org/jira/browse/KARAF-2636] - Improve security mechanism
 * [KARAF-2646|https://issues.apache.org/jira/browse/KARAF-2646] - CLONE - Created instances etc folder doesn't contain all mandatory files
 * [KARAF-2673|https://issues.apache.org/jira/browse/KARAF-2673] - Cannot execute single itests
 * [KARAF-2674|https://issues.apache.org/jira/browse/KARAF-2674] - Provide Spring 4.0.2.RELEASE_1 feature
 * [KARAF-2678|https://issues.apache.org/jira/browse/KARAF-2678] - txlog files locked during admin clone on windows
 * [KARAF-2679|https://issues.apache.org/jira/browse/KARAF-2679] - Blueprint and Spring url handlers are not thread safe
 * [KARAF-2683|https://issues.apache.org/jira/browse/KARAF-2683] - Fix OpenJPA features
 * [KARAF-2685|https://issues.apache.org/jira/browse/KARAF-2685] - Set the hibernate bundles start-level greater than the default one
 * [KARAF-2694|https://issues.apache.org/jira/browse/KARAF-2694] - NPE when use osgi:uninstall
 * [KARAF-2727|https://issues.apache.org/jira/browse/KARAF-2727] - Unable to start karaf on Solaris
 * [KARAF-2729|https://issues.apache.org/jira/browse/KARAF-2729] - DerbyXA datasource (from template) is not visible with jdbc:datasources
 * [KARAF-2730|https://issues.apache.org/jira/browse/KARAF-2730] - Provide full exception details when karaf doesn't startup
 * [KARAF-2738|https://issues.apache.org/jira/browse/KARAF-2738] - Wrong groupId for xercesImpl
 * [KARAF-2755|https://issues.apache.org/jira/browse/KARAF-2755] - Encrypt password mechanism pollutes the group
 * [KARAF-2781|https://issues.apache.org/jira/browse/KARAF-2781] - Enable rat profile by default
 * [KARAF-2785|https://issues.apache.org/jira/browse/KARAF-2785] - First line of sorted input not printed in sort command
 * [KARAF-2786|https://issues.apache.org/jira/browse/KARAF-2786] - Comment the default key and document how to change/enable it
 * [KARAF-2787|https://issues.apache.org/jira/browse/KARAF-2787] - Add a way to specify the client key
 * [KARAF-2797|https://issues.apache.org/jira/browse/KARAF-2797] - Allow FeaturesService to specify options during feature uninstallation
 * [KARAF-2798|https://issues.apache.org/jira/browse/KARAF-2798] - jdbc:create -i -t HSQL installs wrong db-engine
 * [KARAF-2806|https://issues.apache.org/jira/browse/KARAF-2806] - The bundle:watch commands fails when updating o.a.k.bundle.core bundle
 * [KARAF-2819|https://issues.apache.org/jira/browse/KARAF-2819] - datasource-xxx.xml contains wrong password after jdbc:create
 * [KARAF-2820|https://issues.apache.org/jira/browse/KARAF-2820] - features-maven-plugin:add-features-to-repo adds wrong transitive feature version
 * [KARAF-2821|https://issues.apache.org/jira/browse/KARAF-2821] - features-maven-plugin:add-features-to-repo is broken in 2.3.5-SNAPSHOT
 * [KARAF-2837|https://issues.apache.org/jira/browse/KARAF-2837] - The config.properties in features-maven-plugin is out-of-data.
 * [KARAF-2838|https://issues.apache.org/jira/browse/KARAF-2838] - features-maven-plugin:add-features-to-repo can't compare SNAPSHOT versions in 2.3.5-SNAPSHOT
 * [KARAF-2840|https://issues.apache.org/jira/browse/KARAF-2840] - Creating child container using admin service should use KARAF_OPTS
 * [KARAF-2878|https://issues.apache.org/jira/browse/KARAF-2878] - The thread reading the system input stream should exit automatically when the console bundle stops
 * [KARAF-2880|https://issues.apache.org/jira/browse/KARAF-2880] - jms:* commands don't consume messages
 * [KARAF-2895|https://issues.apache.org/jira/browse/KARAF-2895] - installation website link produces 404 not found page
 * [KARAF-2898|https://issues.apache.org/jira/browse/KARAF-2898] - Maven feature validation did not accept WAR bundle (WAB) artifacts.
 * [KARAF-2899|https://issues.apache.org/jira/browse/KARAF-2899] - NPE when running features:listUrl
 * [KARAF-2910|https://issues.apache.org/jira/browse/KARAF-2910] - Properties login module seems to leak a PropertiesInstaller reference results in OOM
 * [KARAF-2913|https://issues.apache.org/jira/browse/KARAF-2913] - JAAS JDBCBackingEngine has the wrong condition to iterate results, no users are returned
 * [KARAF-2914|https://issues.apache.org/jira/browse/KARAF-2914] - JAAS JDBCBackingEngineFactory: Wrong query from the configuration
 * [KARAF-2926|https://issues.apache.org/jira/browse/KARAF-2926] - Child instance doesn't start
 * [KARAF-2947|https://issues.apache.org/jira/browse/KARAF-2947] - Karaf master does not build because of rat errors when working with eclipse
 * [KARAF-2957|https://issues.apache.org/jira/browse/KARAF-2957] - LDAP login module cannot handle slashes in CN
 * [KARAF-2977|https://issues.apache.org/jira/browse/KARAF-2977] - JdbcMBean attribute is "unavailable"
 * [KARAF-2980|https://issues.apache.org/jira/browse/KARAF-2980] - strip off tabs/spaces around role|group names
 * [KARAF-2981|https://issues.apache.org/jira/browse/KARAF-2981] - Karaf shutdown hangs in SshServer.stop()
 * [KARAF-2982|https://issues.apache.org/jira/browse/KARAF-2982] - Command history is off by one
 * [KARAF-2991|https://issues.apache.org/jira/browse/KARAF-2991] - Shell Console throws exception when a service contains int[] as value for a property
 * [KARAF-2992|https://issues.apache.org/jira/browse/KARAF-2992] - Generate the shutdown command at first boot
 * [KARAF-2996|https://issues.apache.org/jira/browse/KARAF-2996] - shutdown +n command not work and shutdown hh:mm not been validated
 * [KARAF-3017|https://issues.apache.org/jira/browse/KARAF-3017] - Concurrency issues in FeaturesService related to add/remove/list operations
 * [KARAF-3021|https://issues.apache.org/jira/browse/KARAF-3021] - Keyboard still read after log:tail cancelled
 * [KARAF-3033|https://issues.apache.org/jira/browse/KARAF-3033] - The system bundle should export and boot delegate javax.xml.crypto packages
 * [KARAF-3044|https://issues.apache.org/jira/browse/KARAF-3044] - Can't shutdown karaf via wrapper on AIX
 * [KARAF-3052|https://issues.apache.org/jira/browse/KARAF-3052] - Allow passing through custom ldap properties
 * [KARAF-3054|https://issues.apache.org/jira/browse/KARAF-3054] - client doesn't load using IBM JDK
 * [KARAF-3056|https://issues.apache.org/jira/browse/KARAF-3056] - Upgrade to JLine 2.12
 * [KARAF-3061|https://issues.apache.org/jira/browse/KARAF-3061] - Problems with jaas:realms / jaas:manage commands when using multiple realms of the same name
 * [KARAF-3064|https://issues.apache.org/jira/browse/KARAF-3064] - SSH Console regenerates the SSH key on each restart
 * [KARAF-3072|https://issues.apache.org/jira/browse/KARAF-3072] - Instance etc files are not sync with the root etc files
 * [KARAF-3086|https://issues.apache.org/jira/browse/KARAF-3086] - ensure an user is selected from the etc/users.properties when use bin/client
 * [KARAF-3089|https://issues.apache.org/jira/browse/KARAF-3089] - The features deployer demo doesn't build
 * [KARAF-3092|https://issues.apache.org/jira/browse/KARAF-3092] - Remove ${services-${karaf.framework}} variables from org.osgi.framework.system.capabilities
 * [KARAF-3096|https://issues.apache.org/jira/browse/KARAF-3096] - Karaf doesn't start with Equinox 3.9.1
 * [KARAF-3098|https://issues.apache.org/jira/browse/KARAF-3098] - Check the usage of config.properties in main module
 * [KARAF-3105|https://issues.apache.org/jira/browse/KARAF-3105] - Cannot use LDAPLoginModule with ActiveDirectory
 * [KARAF-3108|https://issues.apache.org/jira/browse/KARAF-3108] - Fix webconsole CSS
 * [KARAF-3115|https://issues.apache.org/jira/browse/KARAF-3115] - add address flag when create a child instance
 * [KARAF-3117|https://issues.apache.org/jira/browse/KARAF-3117] - The console welcome message is garbled when the console is restarted
 * [KARAF-3118|https://issues.apache.org/jira/browse/KARAF-3118] - Avoid possible exceptions when closing the console
 * [KARAF-3128|https://issues.apache.org/jira/browse/KARAF-3128] - Update ops4j/oss sonatype repositories URL
 * [KARAF-3129|https://issues.apache.org/jira/browse/KARAF-3129] - RAT plugin error on ssh key files
 * [KARAF-3135|https://issues.apache.org/jira/browse/KARAF-3135] - Avoid deadlock during boot features installation
 * [KARAF-3138|https://issues.apache.org/jira/browse/KARAF-3138] - Having eventadmin listed as a boot features cause problems in other bundles startup
 * [KARAF-3149|https://issues.apache.org/jira/browse/KARAF-3149] - Karaf chooseurl for jclouds is wrong
 * [KARAF-3154|https://issues.apache.org/jira/browse/KARAF-3154] - Feature repo org.ops4j.pax.cdi-0.7.0 contains broken feature
 * [KARAF-3158|https://issues.apache.org/jira/browse/KARAF-3158] - Incorrect javax.annotation version for java7
 * [KARAF-3169|https://issues.apache.org/jira/browse/KARAF-3169] - blueprint deployer doesn't seem to work
 * [KARAF-3170|https://issues.apache.org/jira/browse/KARAF-3170] - Java8 packages related to JavaFX are missing
 * [KARAF-3175|https://issues.apache.org/jira/browse/KARAF-3175] - diagnostic feature should be a boot feature
 * [KARAF-3176|https://issues.apache.org/jira/browse/KARAF-3176] - sshRole and jmxRole are not functionnal
 * [KARAF-3178|https://issues.apache.org/jira/browse/KARAF-3178] - spring-struts 3.2.9.RELEASE_1 feature doesn't install correctly
 * [KARAF-3180|https://issues.apache.org/jira/browse/KARAF-3180] - openwebbeans feature doesn't install
 * [KARAF-3189|https://issues.apache.org/jira/browse/KARAF-3189] - webconsole feature installation fails
 * [KARAF-3192|https://issues.apache.org/jira/browse/KARAF-3192] - Don't throw IllegalStateException when can't find attribute for a certain bean
 * [KARAF-3196|https://issues.apache.org/jira/browse/KARAF-3196] - Export sun.misc package from the system bundle
 * [KARAF-3197|https://issues.apache.org/jira/browse/KARAF-3197] - Can't type anything in the console on Windows platform
 * [KARAF-3204|https://issues.apache.org/jira/browse/KARAF-3204] - Avoid calls to Configuration#setBundleLocation(null) which are not needed
 * [KARAF-3213|https://issues.apache.org/jira/browse/KARAF-3213] - ConcurrentModification exception in FileInstall/Upgrade to Felix FileInstall 3.4.1
 * [KARAF-3219|https://issues.apache.org/jira/browse/KARAF-3219] - Typo error in the etc/config.properties after append the shutdown command
 * [KARAF-3221|https://issues.apache.org/jira/browse/KARAF-3221] - Wrong scr:list command used causing NPE

** Dependency upgrade
 * [KARAF-2081|https://issues.apache.org/jira/browse/KARAF-2081] - Upgrade to JUnit 4.11
 * [KARAF-2197|https://issues.apache.org/jira/browse/KARAF-2197] - Upgrade to JLine 2.10
 * [KARAF-2232|https://issues.apache.org/jira/browse/KARAF-2232] - Upgrade to Aries Blueprint Core 1.2.0
 * [KARAF-2235|https://issues.apache.org/jira/browse/KARAF-2235] - Upgrade to Pax-Web 2.1.x and Jetty 8
 * [KARAF-2279|https://issues.apache.org/jira/browse/KARAF-2279] - Upgrade to OSGi Core 5.0.0
 * [KARAF-2293|https://issues.apache.org/jira/browse/KARAF-2293] - Upgrade to Pax Web 2.1.3
 * [KARAF-2310|https://issues.apache.org/jira/browse/KARAF-2310] - Upgrade to Spring 3.2.2.RELEASE
 * [KARAF-2327|https://issues.apache.org/jira/browse/KARAF-2327] - Upgrade to commons-codec 1.8
 * [KARAF-2328|https://issues.apache.org/jira/browse/KARAF-2328] - Upgrade to guava 14.0.1
 * [KARAF-2329|https://issues.apache.org/jira/browse/KARAF-2329] - Upgrade to jline 2.11
 * [KARAF-2330|https://issues.apache.org/jira/browse/KARAF-2330] - Upgrade to Aries Transaction Blueprint 1.0.1
 * [KARAF-2331|https://issues.apache.org/jira/browse/KARAF-2331] - Upgrade to XBean 3.13
 * [KARAF-2332|https://issues.apache.org/jira/browse/KARAF-2332] - Upgrade to jansi 1.11
 * [KARAF-2333|https://issues.apache.org/jira/browse/KARAF-2333] - Upgrade to Pax SwissBox 1.6.0
 * [KARAF-2334|https://issues.apache.org/jira/browse/KARAF-2334] - Upgrade to slf4j 1.7.5
 * [KARAF-2335|https://issues.apache.org/jira/browse/KARAF-2335] - Upgrade to Spring 3.2.3.RELEASE
 * [KARAF-2337|https://issues.apache.org/jira/browse/KARAF-2337] - Upgrade to Apache POM 13
 * [KARAF-2350|https://issues.apache.org/jira/browse/KARAF-2350] - Upgrade to Pax Web 2.1.4
 * [KARAF-2383|https://issues.apache.org/jira/browse/KARAF-2383] - Upgrade to XBean 3.14
 * [KARAF-2389|https://issues.apache.org/jira/browse/KARAF-2389] - Upgrade to commons-compress 1.5
 * [KARAF-2393|https://issues.apache.org/jira/browse/KARAF-2393] - Upgrade to Felix Maven Bundle plugin 2.4.0
 * [KARAF-2394|https://issues.apache.org/jira/browse/KARAF-2394] - Upgrade to Felix WebConsole 4.2.0
 * [KARAF-2398|https://issues.apache.org/jira/browse/KARAF-2398] - Upgrade to ServiceMix cglib bundle 3.0_1
 * [KARAF-2405|https://issues.apache.org/jira/browse/KARAF-2405] - Upgrade to maven-assembly-plugin 2.3
 * [KARAF-2422|https://issues.apache.org/jira/browse/KARAF-2422] - Upgrade to Pax Exam 3.2.0
 * [KARAF-2436|https://issues.apache.org/jira/browse/KARAF-2436] - Upgrade to Pax Logging 1.7.1
 * [KARAF-2463|https://issues.apache.org/jira/browse/KARAF-2463] - Upgrade to easymock 3.2
 * [KARAF-2464|https://issues.apache.org/jira/browse/KARAF-2464] - Upgrade to sshd-core 0.9.0
 * [KARAF-2465|https://issues.apache.org/jira/browse/KARAF-2465] - Upgrade to jasypt 1.9.1
 * [KARAF-2510|https://issues.apache.org/jira/browse/KARAF-2510] - Upgrade to Aries Blueprint CM 1.0.2
 * [KARAF-2534|https://issues.apache.org/jira/browse/KARAF-2534] - Upgrade to aries-proxy-impl 1.0.2, blueprint-core 1.3.0 and blueprint-cm 1.0.3
 * [KARAF-2553|https://issues.apache.org/jira/browse/KARAF-2553] - Upgrade to commons-compress 1.6
 * [KARAF-2554|https://issues.apache.org/jira/browse/KARAF-2554] - Upgrade to Felix ConfigAdmin 1.8.0
 * [KARAF-2555|https://issues.apache.org/jira/browse/KARAF-2555] - Upgrade to Felix Metatype 1.0.8
 * [KARAF-2556|https://issues.apache.org/jira/browse/KARAF-2556] - Upgrade to Pax Web 3.0.x
 * [KARAF-2559|https://issues.apache.org/jira/browse/KARAF-2559] - Upgrade to Felix SCR 1.8.0
 * [KARAF-2560|https://issues.apache.org/jira/browse/KARAF-2560] - Upgrade to Felix Utils 1.4.0
 * [KARAF-2564|https://issues.apache.org/jira/browse/KARAF-2564] - Upgrade to Felix WebConsole Event plugin 1.1.0
 * [KARAF-2565|https://issues.apache.org/jira/browse/KARAF-2565] - Upgrade to OSGi Compendium 5.0.0
 * [KARAF-2579|https://issues.apache.org/jira/browse/KARAF-2579] - Upgrade to Pax Exam 3.3.0
 * [KARAF-2580|https://issues.apache.org/jira/browse/KARAF-2580] - Upgrade to XBean 3.15
 * [KARAF-2582|https://issues.apache.org/jira/browse/KARAF-2582] - Upgrade to json 20131018
 * [KARAF-2583|https://issues.apache.org/jira/browse/KARAF-2583] - Upgrade to ServiceMix Specs 2.3.0
 * [KARAF-2584|https://issues.apache.org/jira/browse/KARAF-2584] - Upgrade to XBean 3.16
 * [KARAF-2590|https://issues.apache.org/jira/browse/KARAF-2590] - Upgrade to Pax Exam 3.4.0
 * [KARAF-2608|https://issues.apache.org/jira/browse/KARAF-2608] - Upgrade to Pax Web 3.0.5
 * [KARAF-2643|https://issues.apache.org/jira/browse/KARAF-2643] - Upgrade to Felix FileInstall 3.2.8
 * [KARAF-2644|https://issues.apache.org/jira/browse/KARAF-2644] - Upgrade to Felix Utils 1.4.2
 * [KARAF-2661|https://issues.apache.org/jira/browse/KARAF-2661] - Upgrade to ServiceMix Specs 2.4.0
 * [KARAF-2681|https://issues.apache.org/jira/browse/KARAF-2681] - Upgrade to Pax Web 3.0.6
 * [KARAF-2693|https://issues.apache.org/jira/browse/KARAF-2693] - Upgrade to Pax Logging 1.7.2
 * [KARAF-2695|https://issues.apache.org/jira/browse/KARAF-2695] - Upgrade to commons-codec 1.9
 * [KARAF-2697|https://issues.apache.org/jira/browse/KARAF-2697] - Upgrade to Aries Blueprint Core 1.4.0
 * [KARAF-2702|https://issues.apache.org/jira/browse/KARAF-2702] - Upgrade to bndlib 2.2.0
 * [KARAF-2703|https://issues.apache.org/jira/browse/KARAF-2703] - Upgrade to maven-assembly-plugin 2.4
 * [KARAF-2704|https://issues.apache.org/jira/browse/KARAF-2704] - Upgrade to maven-compiler-plugin 3.1
 * [KARAF-2705|https://issues.apache.org/jira/browse/KARAF-2705] - Upgrade to maven-dependency-plugin 2.8
 * [KARAF-2706|https://issues.apache.org/jira/browse/KARAF-2706] - Upgrade to maven-deploy-plugin 2.8.1
 * [KARAF-2708|https://issues.apache.org/jira/browse/KARAF-2708] - Upgrade to maven-enforcer-plugin 1.3.1
 * [KARAF-2709|https://issues.apache.org/jira/browse/KARAF-2709] - Upgrade to maven-idea-plugin 2.2.1
 * [KARAF-2711|https://issues.apache.org/jira/browse/KARAF-2711] - Upgrade to maven-javadoc-plugin 2.9.1
 * [KARAF-2713|https://issues.apache.org/jira/browse/KARAF-2713] - Upgrade to maven-jxr-plugin 2.4
 * [KARAF-2714|https://issues.apache.org/jira/browse/KARAF-2714] - Upgrade to maven-project-info-reports-plugin 2.7
 * [KARAF-2715|https://issues.apache.org/jira/browse/KARAF-2715] - Upgrade to maven-release-plugin 2.4.2
 * [KARAF-2716|https://issues.apache.org/jira/browse/KARAF-2716] - Upgrade to maven-remote-resources-plugin 1.5
 * [KARAF-2717|https://issues.apache.org/jira/browse/KARAF-2717] - Upgrade to maven-resources-plugin 2.6
 * [KARAF-2718|https://issues.apache.org/jira/browse/KARAF-2718] - Upgrade to maven-shade-plugin 2.2
 * [KARAF-2719|https://issues.apache.org/jira/browse/KARAF-2719] - Upgrade to maven-site-plugin 3.3
 * [KARAF-2720|https://issues.apache.org/jira/browse/KARAF-2720] - Upgrade to maven-source-plugin 2.2.1
 * [KARAF-2721|https://issues.apache.org/jira/browse/KARAF-2721] - Upgrade to maven-surefire-report-plugin 2.16
 * [KARAF-2722|https://issues.apache.org/jira/browse/KARAF-2722] - Upgrade to maven-war-plugin 2.4
 * [KARAF-2723|https://issues.apache.org/jira/browse/KARAF-2723] - Upgrade to maven-rat-plugin 0.10 and fix rat issues
 * [KARAF-2724|https://issues.apache.org/jira/browse/KARAF-2724] - Upgrade to build-helper-maven-plugin 1.8
 * [KARAF-2733|https://issues.apache.org/jira/browse/KARAF-2733] - Upgrade to commons-beanutils 1.9.1
 * [KARAF-2736|https://issues.apache.org/jira/browse/KARAF-2736] - Upgrade to Aries Transaction Manager 1.1.0
 * [KARAF-2737|https://issues.apache.org/jira/browse/KARAF-2737] - Upgrade to Felix SCR 1.8.2
 * [KARAF-2769|https://issues.apache.org/jira/browse/KARAF-2769] - Upgrade to Pax CDI 0.7.0
 * [KARAF-2813|https://issues.apache.org/jira/browse/KARAF-2813] - Use EventAdmin to provide an audit trail of events, but it's lacking the authenticated Subject who performed the action
 * [KARAF-2816|https://issues.apache.org/jira/browse/KARAF-2816] - upgrade to spring 3.2.8.RELEASE
 * [KARAF-2853|https://issues.apache.org/jira/browse/KARAF-2853] - Upgrade to Apache POM 14
 * [KARAF-2860|https://issues.apache.org/jira/browse/KARAF-2860] - Upgrade to Felix Framework 4.4.0/Felix Framework Security 2.4.0
 * [KARAF-2861|https://issues.apache.org/jira/browse/KARAF-2861] - Upgrade to ASM 5.0.3
 * [KARAF-2866|https://issues.apache.org/jira/browse/KARAF-2866] - Upgrade to Pax Web 3.0.7
 * [KARAF-2868|https://issues.apache.org/jira/browse/KARAF-2868] - Upgrade to aries jmx core 1.1.2
 * [KARAF-2869|https://issues.apache.org/jira/browse/KARAF-2869] - Upgrade to Pax CDI 0.7.0
 * [KARAF-2874|https://issues.apache.org/jira/browse/KARAF-2874] - Upgrade to XBean 3.18
 * [KARAF-2889|https://issues.apache.org/jira/browse/KARAF-2889] - Upgrade to Equinox 3.9.1-v20140110-1610
 * [KARAF-2906|https://issues.apache.org/jira/browse/KARAF-2906] - Upgrade to fileinstall 3.4.0
 * [KARAF-2932|https://issues.apache.org/jira/browse/KARAF-2932] - Upgrade to Felix WebConsole 4.2.2
 * [KARAF-2933|https://issues.apache.org/jira/browse/KARAF-2933] - Upgrade to Jasypt 1.9.2
 * [KARAF-2936|https://issues.apache.org/jira/browse/KARAF-2936] - Upgrade to slf4j 1.7.7 / Pax Logging 1.7.3
 * [KARAF-2937|https://issues.apache.org/jira/browse/KARAF-2937] - Upgrade to json 20140107
 * [KARAF-2945|https://issues.apache.org/jira/browse/KARAF-2945] - Upgrade to Aries Proxy 1.0.3 and Aries spifly 1.0.1 in order to support ASM5 and Java8
 * [KARAF-2954|https://issues.apache.org/jira/browse/KARAF-2954] - Upgrade to Pax Exam 3.5.0
 * [KARAF-3028|https://issues.apache.org/jira/browse/KARAF-3028] - Update Pax Web dependency to 3.1.1
 * [KARAF-3046|https://issues.apache.org/jira/browse/KARAF-3046] - Upgrade to gogo runtime 0.12.1
 * [KARAF-3049|https://issues.apache.org/jira/browse/KARAF-3049] - Upgrade to sshd 0.11
 * [KARAF-3101|https://issues.apache.org/jira/browse/KARAF-3101] - Upgrade to Spring 4.0.5.RELEASE
 * [KARAF-3106|https://issues.apache.org/jira/browse/KARAF-3106] - Upgrade to blueprint core 1.4.1
 * [KARAF-3107|https://issues.apache.org/jira/browse/KARAF-3107] - Upgrade to maven-bundle-plugin 2.5.0
 * [KARAF-3109|https://issues.apache.org/jira/browse/KARAF-3109] - Upgrade to Pax Exam 4.0.0
 * [KARAF-3110|https://issues.apache.org/jira/browse/KARAF-3110] - Upgrade to felix utils 1.6.0
 * [KARAF-3116|https://issues.apache.org/jira/browse/KARAF-3116] - Upgrade to Felix Framework 4.4.1
 * [KARAF-3120|https://issues.apache.org/jira/browse/KARAF-3120] - Upgrade to Aries JPA 1.0.2
 * [KARAF-3131|https://issues.apache.org/jira/browse/KARAF-3131] - Upgrade to Hibernate 4.2.15.Final/4.3.6.Final
 * [KARAF-3140|https://issues.apache.org/jira/browse/KARAF-3140] - Upgrade to sshd 0.12.0
 * [KARAF-3156|https://issues.apache.org/jira/browse/KARAF-3156] - Upgrade to Pax CDI 0.8.0
 * [KARAF-3157|https://issues.apache.org/jira/browse/KARAF-3157] - Upgrade to Pax Exam 4.1.0
 * [KARAF-3171|https://issues.apache.org/jira/browse/KARAF-3171] - Upgrade to Aries Blueprint CM 1.0.4
 * [KARAF-3182|https://issues.apache.org/jira/browse/KARAF-3182] - Upgrade to Felix EventAdmin 1.4.0
 * [KARAF-3183|https://issues.apache.org/jira/browse/KARAF-3183] - Upgrade to bndlib 2.3.0
 * [KARAF-3184|https://issues.apache.org/jira/browse/KARAF-3184] - Upgrade to commons-beanutils 1.9.2
 * [KARAF-3185|https://issues.apache.org/jira/browse/KARAF-3185] - Upgrade to Felix BundleRepository 2.0.2
 * [KARAF-3191|https://issues.apache.org/jira/browse/KARAF-3191] - Upgrade to Pax Web 3.1.2
 * [KARAF-3198|https://issues.apache.org/jira/browse/KARAF-3198] - Cleanup Pax Swissbox dependencies
 * [KARAF-3201|https://issues.apache.org/jira/browse/KARAF-3201] - Upgrade to pax-logging 1.7.4
 * [KARAF-3206|https://issues.apache.org/jira/browse/KARAF-3206] - Upgrade to ConfigAdmin 1.8.0

** Documentation
 * [KARAF-2958|https://issues.apache.org/jira/browse/KARAF-2958] - Use of type-converters in Karaf Security Documentation is incorrect
 * [KARAF-3167|https://issues.apache.org/jira/browse/KARAF-3167] - Document the configfile override behaviour

** Improvement
 * [KARAF-448|https://issues.apache.org/jira/browse/KARAF-448] - Make scanning for MANIFEST.MF in jar consistent between osgi:install and feature:install
 * [KARAF-1080|https://issues.apache.org/jira/browse/KARAF-1080] - Spring feature repo for spring related features
 * [KARAF-1563|https://issues.apache.org/jira/browse/KARAF-1563] - Support clean-all & clean-cache directly in karaf main jar
 * [KARAF-1572|https://issues.apache.org/jira/browse/KARAF-1572] - JDBC Lock without using long running transactions
 * [KARAF-1913|https://issues.apache.org/jira/browse/KARAF-1913] - Moving configuration directory
 * [KARAF-1935|https://issues.apache.org/jira/browse/KARAF-1935] - Paxexam-Karaf manual needs to be backported from 3.9
 * [KARAF-1939|https://issues.apache.org/jira/browse/KARAF-1939] - ssh bundles should not be in startup.properties
 * [KARAF-1940|https://issues.apache.org/jira/browse/KARAF-1940] - admin/instance should be provided as a feature
 * [KARAF-1941|https://issues.apache.org/jira/browse/KARAF-1941] - Management bundles should not be in the startup.properties
 * [KARAF-2138|https://issues.apache.org/jira/browse/KARAF-2138] - Add a status check script and karaf script argument
 * [KARAF-2175|https://issues.apache.org/jira/browse/KARAF-2175] - Add the sonatype standard snapshot repository to the karaf repositories
 * [KARAF-2230|https://issues.apache.org/jira/browse/KARAF-2230] - Watch command - Add option to control if the console should clear or not
 * [KARAF-2273|https://issues.apache.org/jira/browse/KARAF-2273] - Turn blueprint as synchronous by default
 * [KARAF-2290|https://issues.apache.org/jira/browse/KARAF-2290] - should also endorse activation-api spec jar
 * [KARAF-2291|https://issues.apache.org/jira/browse/KARAF-2291] - make rmiServerHost configurable
 * [KARAF-2298|https://issues.apache.org/jira/browse/KARAF-2298] - Karaf shell option for a "transient" bundle stop
 * [KARAF-2320|https://issues.apache.org/jira/browse/KARAF-2320] - make kar deployer/service to support NoAutoRefreshBundles option
 * [KARAF-2326|https://issues.apache.org/jira/browse/KARAF-2326] - Backspace stops working after shutdown command
 * [KARAF-2344|https://issues.apache.org/jira/browse/KARAF-2344] - ensure LDAPLoginModule can retrieve multiple roles assigned to a specific user
 * [KARAF-2360|https://issues.apache.org/jira/browse/KARAF-2360] - Add password option to admin:connect and ssh:ssh commands
 * [KARAF-2369|https://issues.apache.org/jira/browse/KARAF-2369] - extend role.filter of LDAPLoginModule to support distinguishedName filter
 * [KARAF-2415|https://issues.apache.org/jira/browse/KARAF-2415] - dev:create-dump: extending with environment information
 * [KARAF-2443|https://issues.apache.org/jira/browse/KARAF-2443] - bundle-level and update commands should take symbolic name as parameter
 * [KARAF-2444|https://issues.apache.org/jira/browse/KARAF-2444] - The featuresRepositories property should support multi-lines input value in the etc/org.apache.karaf.features.cfg
 * [KARAF-2449|https://issues.apache.org/jira/browse/KARAF-2449] - Include heap dump in the zip created by dev:create-dump
 * [KARAF-2450|https://issues.apache.org/jira/browse/KARAF-2450] - Create "service-wrapper" alias to the wrapper feature
 * [KARAF-2451|https://issues.apache.org/jira/browse/KARAF-2451] - can't use backspace to edit osgi shell input if it's a system level bundle 
 * [KARAF-2453|https://issues.apache.org/jira/browse/KARAF-2453] - Using features to extend existing configuration
 * [KARAF-2474|https://issues.apache.org/jira/browse/KARAF-2474] - Provide a command for dumping the System, and OSGi properties
 * [KARAF-2482|https://issues.apache.org/jira/browse/KARAF-2482] - Provide equivalent to features:info in FeaturesMBean
 * [KARAF-2483|https://issues.apache.org/jira/browse/KARAF-2483] - Add -p (--persist) option to the log:set command
 * [KARAF-2499|https://issues.apache.org/jira/browse/KARAF-2499] - Karaf should exit if the data directory is deleted
 * [KARAF-2500|https://issues.apache.org/jira/browse/KARAF-2500] - Karaf should monitor the lock file existence
 * [KARAF-2501|https://issues.apache.org/jira/browse/KARAF-2501] - Break some bundle dependencies in the console
 * [KARAF-2503|https://issues.apache.org/jira/browse/KARAF-2503] - Allow to limit the number of entries the history command remembers
 * [KARAF-2507|https://issues.apache.org/jira/browse/KARAF-2507] - Add alias to display features installed or features uninstalled
 * [KARAF-2512|https://issues.apache.org/jira/browse/KARAF-2512] - features:info should display feature description
 * [KARAF-2517|https://issues.apache.org/jira/browse/KARAF-2517] - Add Spring or Blueprint state in the BundleMBean
 * [KARAF-2521|https://issues.apache.org/jira/browse/KARAF-2521] - The client script should find better default values
 * [KARAF-2535|https://issues.apache.org/jira/browse/KARAF-2535] - Introduce blueprint-web feature
 * [KARAF-2539|https://issues.apache.org/jira/browse/KARAF-2539] - Add --clear option to history command
 * [KARAF-2547|https://issues.apache.org/jira/browse/KARAF-2547] - karaf/stop script should be catching 'Connection refused' and display a message
 * [KARAF-2569|https://issues.apache.org/jira/browse/KARAF-2569] - Introduce KARAF_ETC env variable
 * [KARAF-2575|https://issues.apache.org/jira/browse/KARAF-2575] - Add missing commands in bin/instance
 * [KARAF-2609|https://issues.apache.org/jira/browse/KARAF-2609] - Provides etc/org.apache.karaf.kar.cfg file in the distribution
 * [KARAF-2610|https://issues.apache.org/jira/browse/KARAF-2610] - Update the comments in etc/users.properties (to include changes on groups/roles)
 * [KARAF-2623|https://issues.apache.org/jira/browse/KARAF-2623] - Karaf client script only returns a non zero status if there is exception
 * [KARAF-2637|https://issues.apache.org/jira/browse/KARAF-2637] - Optimize the kar deployer to not read/write the status every time a bundle changes
 * [KARAF-2638|https://issues.apache.org/jira/browse/KARAF-2638] - Speed up karaf startup a bit by setting the specs timeout to 0
 * [KARAF-2639|https://issues.apache.org/jira/browse/KARAF-2639] - Provide a way to configure ciphers and macs and use only the secured one by default
 * [KARAF-2649|https://issues.apache.org/jira/browse/KARAF-2649] - Add Spring Security features
 * [KARAF-2657|https://issues.apache.org/jira/browse/KARAF-2657] - Support version range in feature <repository/>
 * [KARAF-2660|https://issues.apache.org/jira/browse/KARAF-2660] - Upgrade to javax.annotation 1.2.0
 * [KARAF-2666|https://issues.apache.org/jira/browse/KARAF-2666] - Provide hibernate features
 * [KARAF-2691|https://issues.apache.org/jira/browse/KARAF-2691] - Karaf shell info command to display the pid
 * [KARAF-2700|https://issues.apache.org/jira/browse/KARAF-2700] - Upgrade to Felix Metatype 1.0.10
 * [KARAF-2746|https://issues.apache.org/jira/browse/KARAF-2746] - Hibernate feature enhancements
 * [KARAF-2748|https://issues.apache.org/jira/browse/KARAF-2748] - BundleSelector should be more "selective"
 * [KARAF-2749|https://issues.apache.org/jira/browse/KARAF-2749] - BundleSelector should be more "selective"
 * [KARAF-2751|https://issues.apache.org/jira/browse/KARAF-2751] - Add Hibernate-Validator feature
 * [KARAF-2754|https://issues.apache.org/jira/browse/KARAF-2754] - all password should be encrypted when encryption.enabled is true
 * [KARAF-2791|https://issues.apache.org/jira/browse/KARAF-2791] - AddFeaturesToRepoMojo should support read version from dependency features
 * [KARAF-2801|https://issues.apache.org/jira/browse/KARAF-2801] - Fix camel-extras features repository URL
 * [KARAF-2803|https://issues.apache.org/jira/browse/KARAF-2803] - Set org.apache.aries.blueprint.preemptiveShutdown to false by default
 * [KARAF-2808|https://issues.apache.org/jira/browse/KARAF-2808] - Child containers should be able to have additional libs on the classpath
 * [KARAF-2832|https://issues.apache.org/jira/browse/KARAF-2832] - Fix exception when using the features-maven-plugin with non osgi compliant features version
 * [KARAF-2842|https://issues.apache.org/jira/browse/KARAF-2842] - Add an option to feature:install to install the bundles without starting it
 * [KARAF-2855|https://issues.apache.org/jira/browse/KARAF-2855] - The config:list command should sort configurations and properties
 * [KARAF-2857|https://issues.apache.org/jira/browse/KARAF-2857] - Add Solaris x86_64 support to wrapper
 * [KARAF-2883|https://issues.apache.org/jira/browse/KARAF-2883] - Use better version range in Spring features
 * [KARAF-2916|https://issues.apache.org/jira/browse/KARAF-2916] - Add fully qualified DN replacement for role search
 * [KARAF-2918|https://issues.apache.org/jira/browse/KARAF-2918] - Provide ability to set a banner prior to user login via ssh
 * [KARAF-2921|https://issues.apache.org/jira/browse/KARAF-2921] - bin/karaf selecting the wrong Java VM on a computer with Java 8 installed
 * [KARAF-2941|https://issues.apache.org/jira/browse/KARAF-2941] - Let jdbc be more robust against broken data sources
 * [KARAF-2974|https://issues.apache.org/jira/browse/KARAF-2974] - Mentioning of version number delimiter missing in obr:deploy command help
 * [KARAF-2978|https://issues.apache.org/jira/browse/KARAF-2978] - RBAC-- recognize group configuration when use Publickey to Login
 * [KARAF-2984|https://issues.apache.org/jira/browse/KARAF-2984] - Improve setenv script to include placeholder for extra java options
 * [KARAF-2995|https://issues.apache.org/jira/browse/KARAF-2995] - RBAC - the shell command acl configuration modification can't take effect unless we restart the Karaf server
 * [KARAF-3001|https://issues.apache.org/jira/browse/KARAF-3001] - RBAC - MBean Server RBAC guard should support wildcard role 
 * [KARAF-3002|https://issues.apache.org/jira/browse/KARAF-3002] - RBAC-add a jmx.acl.whitelist so that all ObjectName in this list will bypass the RBAC
 * [KARAF-3020|https://issues.apache.org/jira/browse/KARAF-3020] - RBAC-put "type" right after the domain when generate the PID from JMX ObjectName
 * [KARAF-3022|https://issues.apache.org/jira/browse/KARAF-3022] - RBAC - support the JMX operation match starts with a wildcard
 * [KARAF-3024|https://issues.apache.org/jira/browse/KARAF-3024] - RBAC - Support wildcard in jmx.acl.....cfg filename
 * [KARAF-3041|https://issues.apache.org/jira/browse/KARAF-3041] - Provide additional helper methods in OsgiCommandSupport
 * [KARAF-3042|https://issues.apache.org/jira/browse/KARAF-3042] - Add a variable (false by default) to enable redirect to karaf.out
 * [KARAF-3045|https://issues.apache.org/jira/browse/KARAF-3045] - Simplify console branding
 * [KARAF-3073|https://issues.apache.org/jira/browse/KARAF-3073] - Add jvisualvm config in monitoring documentation
 * [KARAF-3111|https://issues.apache.org/jira/browse/KARAF-3111] - Instance/Admin Service should provide more options as part of instance settings 
 * [KARAF-3112|https://issues.apache.org/jira/browse/KARAF-3112] - make stopTimeout of AdminService configurable
 * [KARAF-3119|https://issues.apache.org/jira/browse/KARAF-3119] - Do not allow empty passwords by default for ldap
 * [KARAF-3124|https://issues.apache.org/jira/browse/KARAF-3124] - Provide shell:env command
 * [KARAF-3126|https://issues.apache.org/jira/browse/KARAF-3126] - add more specific completer for admin:start|stop command
 * [KARAF-3130|https://issues.apache.org/jira/browse/KARAF-3130] - add admin:change-ssh-host command
 * [KARAF-3134|https://issues.apache.org/jira/browse/KARAF-3134] - Log executed shell commands at debug level
 * [KARAF-3164|https://issues.apache.org/jira/browse/KARAF-3164] - Document exposing JAAS BackendEngineFactory services for the login module
 * [KARAF-3166|https://issues.apache.org/jira/browse/KARAF-3166] - Add SyncopeLoginModule (including backend)
 * [KARAF-3199|https://issues.apache.org/jira/browse/KARAF-3199] - Tone down system out logging when creating child instances
 * [KARAF-3222|https://issues.apache.org/jira/browse/KARAF-3222] - Command description for osgi:shutdown could be improved

** New Feature
 * [KARAF-2044|https://issues.apache.org/jira/browse/KARAF-2044] - Provide the ability to edit text resources from the Karaf shell
 * [KARAF-2070|https://issues.apache.org/jira/browse/KARAF-2070] - Add support of !$ to recall the last command argument
 * [KARAF-2164|https://issues.apache.org/jira/browse/KARAF-2164] - Create shell:wc command
 * [KARAF-2185|https://issues.apache.org/jira/browse/KARAF-2185] - Provide Spring 3.2.x support
 * [KARAF-2300|https://issues.apache.org/jira/browse/KARAF-2300] - log command to list all the logging levels currently been set
 * [KARAF-2370|https://issues.apache.org/jira/browse/KARAF-2370] - Add alias command
 * [KARAF-2372|https://issues.apache.org/jira/browse/KARAF-2372] - Introduce boot features sync mode property (true|false)
 * [KARAF-2567|https://issues.apache.org/jira/browse/KARAF-2567] - Add support for JAAS groups - backport to 2.x
 * [KARAF-2568|https://issues.apache.org/jira/browse/KARAF-2568] - Add Role-based access to JMX - backport to 2.x
 * [KARAF-2576|https://issues.apache.org/jira/browse/KARAF-2576] - Add instance:status/admin:status command to check the status of an instance
 * [KARAF-2642|https://issues.apache.org/jira/browse/KARAF-2642] - CLONE - Provide additional enterprise features
 * [KARAF-2658|https://issues.apache.org/jira/browse/KARAF-2658] - Include Pax CDI 0.6.0 repository in Karaf enterprise features
 * [KARAF-2760|https://issues.apache.org/jira/browse/KARAF-2760] - Monitor etc/user.properties to automatically encrypt passwords
 * [KARAF-2848|https://issues.apache.org/jira/browse/KARAF-2848] - Add MSSQL datasource type
 * [KARAF-2917|https://issues.apache.org/jira/browse/KARAF-2917] - Command to display bundle id
 * [KARAF-3059|https://issues.apache.org/jira/browse/KARAF-3059] - add a flag to bin/client so that it can read private key from a specified location
 * [KARAF-3104|https://issues.apache.org/jira/browse/KARAF-3104] - Add the connector feature from ServiceMix
 * [KARAF-3205|https://issues.apache.org/jira/browse/KARAF-3205] - Refactor create-dump to be more low level
 * [KARAF-3207|https://issues.apache.org/jira/browse/KARAF-3207] - Provide an audit login module

** Task
 * [KARAF-2062|https://issues.apache.org/jira/browse/KARAF-2062] - Add a spring3.2 feature
 * [KARAF-2222|https://issues.apache.org/jira/browse/KARAF-2222] - Add hawtio to features.repos
 * [KARAF-2336|https://issues.apache.org/jira/browse/KARAF-2336] - Remove karaf-pax-exam and use pax-exam for itests
 * [KARAF-2413|https://issues.apache.org/jira/browse/KARAF-2413] - Add features:chooseurl for camel-extra
 * [KARAF-2662|https://issues.apache.org/jira/browse/KARAF-2662] - Upgrade to pax-url 1.3.7
 * [KARAF-2765|https://issues.apache.org/jira/browse/KARAF-2765] - Upgrade to Spring 3.2.7.RELEASE
 * [KARAF-2767|https://issues.apache.org/jira/browse/KARAF-2767] - Update to commons-fileupload 1.3.1
 * [KARAF-2934|https://issues.apache.org/jira/browse/KARAF-2934] - Role-based security for Shell/Console commands - backport to 2.x branch
 * [KARAF-3068|https://issues.apache.org/jira/browse/KARAF-3068] - Update to Spring 3.2.9.RELEASE_1

** Test
 * [KARAF-2680|https://issues.apache.org/jira/browse/KARAF-2680] - Add new itests

                    Apache Karaf 2.3.1
                    ==================

  Overview
  --------

  In this patch update to the 2.3.x line contains multiple bug fixes, improvements, and dependency updates including; an upgrade to OSGi spec 4.3.1, Spring 3.1.4.RELEASE, Pax Exam 2.6.0, Pax Web 1.1.12, Jetty 7.6.8.v20121106, Aries Blueprint Core 1.1.0, and fixes to the LDAP login module, improved failover lock logic, removes a console shutdown -f hang, and adds a jre-1.8 to jre.properties.
  For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [KARAF-1278] - Comands: History does not work, can not edit current comand
    * [KARAF-1327] - Client: can't execute alias command
    * [KARAF-1386] - feature install war fails if http-whiteboard is already installed
    * [KARAF-1715] - Occasional freeze on feature:install webconsole
    * [KARAF-1748] - Karaf startup fails with NullPointerException when logfile can't be written
    * [KARAF-1770] - Unable to feature:install webconsole under apache-karaf minimal package
    * [KARAF-1914] - SSH client authentication randomly fails
    * [KARAF-1921] - Upgrade to Spring 3.1.x for Karaf 2.3.x
    * [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-1949] - console shutdown -f hang
    * [KARAF-1963] - incorrect statement in developers-guide/branding-console.html
    * [KARAF-1968] - Uninstalling jndi feature leads to hanging Karaf
    * [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-2009] - Error on visualize Licences page
    * [KARAF-2013] - Bug in Karaf 2.3.0 Maven2 Features Plugin Documentation
    * [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-2047] - config:edit -f command doesn't work on Windows platform
    * [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-2071] - Minimal distribution doesn't start
    * [KARAF-2073] - Progress bar sometimes goes backwards
    * [KARAF-2074] - ensure admin service always load storage file instance.properties before each operation
    * [KARAF-2096] - Upgrade to Pax Exam 2.6.0
    * [KARAF-2114] - Update org.ops4j.pax.url.mvn.cfg file in child instance to include the system folder
    * [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-2136] - ServiceMix Spec property mispelled in etc/system.properties
    * [KARAF-2137] - Unable to prevent remote JMX access 
    * [KARAF-2143] - Remove Jetty JUL logger configuration
    * [KARAF-2154] - Entering an empty command removes previous command in history
    * [KARAF-2171] - Start Karaf as service shows 'Activator' error in wrapper.log
    * [KARAF-2190] - Karaf itest fails on fast machine
    * [KARAF-2192] - Karaf obr:listURl and obr:list tests fail on faster boxes
    * [KARAF-2206] - The container fails to start correctly with IBM Java 6
    * [KARAF-2209] - Allow overriding system properties
    * [KARAF-2213] - Missing org.apache.karaf.jaas.authz-2.3.1.jar from the system repo prevents minimal distro startup

** Dependency upgrade
    * [KARAF-1801] - slf4j 1.7.0
    * [KARAF-1884] - Upgrade exam to Pax Exam 2.6.0
    * [KARAF-1930] - Upgrade to Pax Web 1.1.5
    * [KARAF-1948] - Upgrade to Apache POM 11
    * [KARAF-1955] - Upgrade to ServiceMix Specs 2.2.0
    * [KARAF-1977] - Upgrade to OSGi 4.3.1
    * [KARAF-1981] - Upgrade to Felix ConfigAdmin 1.6.0
    * [KARAF-2002] - Upgrade to Pax Web 1.1.6
    * [KARAF-2015] - Upgrade to Pax Web 1.1.7
    * [KARAF-2036] - Upgrade to Pax Web 1.1.9
    * [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-2079] - upgrade to pax web 1.1.10
    * [KARAF-2080] - Upgrade to slf4j 1.7.2
    * [KARAF-2088] - Upgrade to Jetty 7.6.8.v20121106
    * [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-2162] - Upgrade to Pax Web 1.1.12
    * [KARAF-2184] - Upgrade to Spring 3.1.4.RELEASE
    * [KARAF-2208] - Upgrade to Aries JPA Blueprint 1.0.1

** Improvement
    * [KARAF-1129] - Allow configuring rmi Registry host as well as port
    * [KARAF-1924] - Fix the WARN logs from starting a vanilla Karaf 2.3.0
    * [KARAF-1933] - Add id for Maven repository
    * [KARAF-1935] - Paxexam-Karaf manual needs to be backported from 3.9
    * [KARAF-1951] - Remove workaround for KARAF-1117
    * [KARAF-1990] - Add Cellar feature URI in org.apache.karaf.features.repos.cfg
    * [KARAF-2017] - Service wrapper should use and populate JAVA_HOME in conf file
    * [KARAF-2024] - add @id for org.ops4j.pax.url.mvn.repositories urls
    * [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-2072] - Spelling correction
    * [KARAF-2094] - Include howto add additional jvm configurations (if using the wrapper) to the documentation
    * [KARAF-2097] - endorse stax-api spec jar
    * [KARAF-2105] - Karaf features for Spring should all be same name and use version ranges
    * [KARAF-2108] - a feature depend itself will cause stackoverflow error
    * [KARAF-2119] - upgrade pax.base to 1.4.0
    * [KARAF-2163] - Add a jre-1.8 to jre.properties
    * [KARAF-2175] - Add the sonatype standard snapshot repository to the karaf repositories

** New Feature
    * [KARAF-581] - Also make rmiRegistryHost configurable
    * [KARAF-2050] - Ability to configure ssh session idle timeout - currently hardcode as 5 minutes
    * [KARAF-2078] - Create the shell:date command

** Task
    * [KARAF-2083] - Remove icu4j dependency
    * [KARAF-2129] - more svn:ignores setttings
    * [KARAF-2156] - Upgrade aries utils
    * [KARAF-2161] - Incorrect LGPL license info in Notices file

** Test
    * [KARAF-2082] - Jasypt unit tests fail
    * [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.3.0
                    ==================

  Overview
  --------

  This release of Apache Karaf sets the stage for the 3.0.x line, introducing OSGi rev 4.3 
support, new commands, features, improvements, and a mulititude of dependency updates. At 
Karaf's core you'll find Equinox 3.8.0.v20120529-1548 and Apache Felix framework 4.0.3. New 
additions such as Karaf-pax-exam, commands back ported from Karaf 3.x, and command aliases 
to help make migrating betwen 2.3.x and 3.x easier.
  For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [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-643] - KarArtifactInstaller::init has incorrect warning logic
    * [KARAF-1040] - Commands should not catch exceptions but should rethrow them
    * [KARAF-1050] - "osgi:start xxx" doesn't print anything
    * [KARAF-1066] - make features xml parser more forgiving
    * [KARAF-1162] - A command that can not be loaded breaks the whole completion
    * [KARAF-1202] - log:tail spins with debug on
    * [KARAF-1226] - Karaf Client cannot run a script
    * [KARAF-1293] - feature level start-level not completely finished....
    * [KARAF-1305] - Error with Basic HTTP Authentication when using karaf realm
    * [KARAF-1343] - Features repo points to the old pax-wicket app
    * [KARAF-1354] - SSH Log-In failes with "Authentication failed" with valid credentials
    * [KARAF-1360] - Configration update doesn't work
    * [KARAF-1363] - Upgrade Jetty when bugfix for the Loggging to stderr bug is available
    * [KARAF-1373] - features-maven-plugin, unexpected text in stderr
    * [KARAF-1374] - Fileinstaller logging by default is not enabled.
    * [KARAF-1376] - Demo deployer is not sync with Karaf version
    * [KARAF-1387] - Warning to missing a feature repository name even when the name is defined
    * [KARAF-1388] - SSHD authorized key provider should log in DEBUG
    * [KARAF-1389] - SSH doesn't correctly use the karaf.base variable
    * [KARAF-1392] - Removing a KAR should uninstall the shipped features
    * [KARAF-1394] - Custom login modules not seen with Equinox
    * [KARAF-1416] - Blueprint archetype instructions is missing
    * [KARAF-1430] - Default child instance config is not the same as the root instance
    * [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-1513] - SSH keystore incompatible if generated with IBM JDK
    * [KARAF-1529] - command-watch messes the output when used with commands that take longer than the interval
    * [KARAF-1538] - Exceptions when unregistering jmx means during a restart
    * [KARAF-1541] - jaas:realm-manage raises a NullPointerException
    * [KARAF-1547] - NullpointerException when running commands on jdk 6 update 33 or jdk 7 update 5
    * [KARAF-1554] - Integration test failure on FeatureTest around osgi compareTo method
    * [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-1569] - aries.util.version is defined twice in pom.xml
    * [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-1609] - command-watch info does not work
    * [KARAF-1614] - upgrade to aries.proxy 0.3.1
    * [KARAF-1617] - Blueprint deployer in combination with maven URL deployer creates wrong OSGi/blueprint/ file
    * [KARAF-1624] - Rat checks fail
    * [KARAF-1666] - Default configuration for jetty.xml could create problems
    * [KARAF-1675] - Wrapper service requires a shell
    * [KARAF-1680] - org.apache.karaf:apache-karaf:2.2.8:xml:features artifact is not available, for building custom Karaf
    * [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-1697] - Jenkins build fail
    * [KARAF-1699] - MBeans should support the same flags as the commands
    * [KARAF-1702] - Stopping the console bundle should not shutdown the osgi framework
    * [KARAF-1706] - Features bundle versions are not consistent
    * [KARAF-1736] - Feature spring-struts can't be installed
    * [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-1763] - shutdown command doesn't work correctly
    * [KARAF-1765] - The obr Shell Deploy And Start Commands Always Deploy Optional Dependencies
    * [KARAF-1766] - Web Console Missing Metatype Import
    * [KARAF-1791] - Add minimal distribution
    * [KARAF-1796] - Feature Install Sequence Should Be Install/Install/Install...Start/Start/Start
    * [KARAF-1797] - NPE thrown from OsgiConfiguration.unregister
    * [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-1821] - Some etc files are executable whereas it should not be
    * [KARAF-1822] - BundlesMBean should use bundles attribute instead of list() operation
    * [KARAF-1824] - tooling-exam contains reference to wrong commons-io artifact
    * [KARAF-1825] - SystemMBean should provide startLevel attribute
    * [KARAF-1826] - ConfigMBean should use configs attribute instead of list() operation
    * [KARAF-1827] - Build the manual within specific profiles
    * [KARAF-1830] - ObrMBean should use attribute for bundles and URLs instead of list operations
    * [KARAF-1831] - PackagesMBean should use attributes for imported/exported packages instead of operations
    * [KARAF-1832] - ServicesMBean should use attribute instead of list() operation
    * [KARAF-1839] - system bundle also should export javax.xml.ws.spi.http package
    * [KARAF-1840] - should also endorse saaj-api
    * [KARAF-1845] - Minimal distribution doesn't start
    * [KARAF-1852] - Osgi packages are exported with wrong versions
    * [KARAF-1853] - Attached kar deploys to a different snapshot build number than the main artifact
    * [KARAF-1858] - itests look stuck (use 100% CPU)
    * [KARAF-1882] - Provide Level attribute in the LogMBean
    * [KARAF-1888] - Remove aliases by default
    * [KARAF-1905] - ASM4 causes the Proxy/Weaving of Xerces, but that then causes validation factories to fail.   
    * [KARAF-1906] - Compile error using IBM JDK on JAAS module.
    * [KARAF-1907] - Compile error: type ServiceReference does not take parameters on OSGi Shell ListBundleServices using JDK 7
    * [KARAF-1909] - Compile error using IBM JDK on management mbeans SystemMBeanImpl
    * [KARAF-1911] - Wrong version of camel-example-osgi in Getting Started/Quickstart Guide - 2.7.0 doesn't work

** Dependency upgrade
    * [KARAF-681] - Upgrade to Pax URL 1.3.4 (noted here for historical purposes)
    * [KARAF-770] - Upgrade to Eclipse Equinox 3.7.1 (noted here for historical purposes)
    * [KARAF-854] - Upgrade to Felix Framework 4.0.1 (noted here for historical purposes)
    * [KARAF-855] - Add support for OSGi R4.3
    * [KARAF-903] - Upgrade to Pax Web 1.1.2 (noted here for historical purposes)
    * [KARAF-961] - Update Mina SSHD to version 0.6.0 (noted here for historical purposes)
    * [KARAF-966] - Update xbean to 3.8
    * [KARAF-1346] - Upgrade to Mina 2.0.4 (noted here for historical purposes)
    * [KARAF-1378] - Upgrade to fileinstall 3.2.2
    * [KARAF-1425] - Upgrade to pax-web 1.1.3
    * [KARAF-1431] - Upgrade to Pax URL 1.3.5
    * [KARAF-1458] - Upgrade to ServiceMix Specs 2.0
    * [KARAF-1490] - upgrade to pax-logging 1.6.7 (noted here for historical purposes)
    * [KARAF-1498] - Upgrade blueprint, jmx and util bundles to next minor release
    * [KARAF-1517] - Upgrade to OSGi Compendium 4.3.0
    * [KARAF-1520] - Upgrade to Jansi 1.9
    * [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-1568] - Upgrade to sshd 0.7.0 (noted here for historical purposes)
    * [KARAF-1577] - Upgrade to slf4j 1.6.6
    * [KARAF-1578] - Upgrade to pax-logging 1.6.9 (noted here for historical purposes)
    * [KARAF-1579] - Upgrade to commons-compress 1.4.1
    * [KARAF-1582] - Upgrade to Felix BundleRepository 1.6.6
    * [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-1634] - Upgrade to Felix Framework 4.0.3
    * [KARAF-1636] - Upgrade to Equinox 3.8
    * [KARAF-1642] - Upgrade to exec-maven-plugin 1.2.1
    * [KARAF-1670] - Uprade Aries Application Management to 1.0.0
    * [KARAF-1672] - Upgrade Aries Application Deployment 1.0.0
    * [KARAF-1703] - Upgrade to aries 1.0.x
    * [KARAF-1719] - Upgrade to javax.mail 1.4.5
    * [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-1740] - Upgrade to Jetty 7.6.5.v20120716 (noted here for historical purposes)
    * [KARAF-1745] - Upgrade to Felix WebConsole 4.0.0
    * [KARAF-1747] - Update to jline 2.8 (noted here for historical purposes)
    * [KARAF-1769] - Upgrade to pax-logging 1.6.10 (noted here for historical purposes)
    * [KARAF-1773] - Upgrade to pax-logging 1.6.10 (duplicate) 
    * [KARAF-1781] - Upgrade to Mina 2.0.5 (noted here for historical purposes)
    * [KARAF-1787] - Upgrade to commons-fileupload 1.2.2
    * [KARAF-1788] - Upgrade to commons-io 2.4
    * [KARAF-1816] - Upgrade to jline 2.9
    * [KARAF-1817] - Upgrade to sshd 0.8.0
    * [KARAF-1819] - Upgrade to Mina 2.0.5 (duplicate) (noted here for historical purposes)
    * [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 (duplicate)
    * [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-1883] - Upgrade to ASM 4.0
    * [KARAF-1890] - Upgrade to Jetty 7.6.7.v20120910
    * [KARAF-1904] - Upgrade to Mina 2.0.7
    * [KARAF-1908] - Upgrade to XBean 3.12


** Improvement
    * [KARAF-447] - Add JDBC lock implementation for PostgreSQL
    * [KARAF-1023] - Add karaf activators for jars in the lib folder
    * [KARAF-1045] - Improved help system
    * [KARAF-1048] - make pom.xml eclipse 3.7 m2e friendly
    * [KARAF-1118] - Enable install of CXF into karaf with a simple command
    * [KARAF-1181] - Add tab completer to the help command
    * [KARAF-1368] - Make it easy to enable Karaf PropertiesLoginModule via an optional feature
    * [KARAF-1383] - Fix warning messages during bundle build
    * [KARAF-1396] - config:list command description should be enhanced
    * [KARAF-1410] - Error in stop script if KARAF_DEBUG is enabled
    * [KARAF-1499] - InfoAction shell command should sort the properties from InfoProvider instances
    * [KARAF-1500] - Forgot a space between hours and minutes in InfoAction.java
    * [KARAF-1521] - add-features-to-repo goal should define a correct default value for repository
    * [KARAF-1558] - Instance clone should be able to clone the root instance
    * [KARAF-1562] - Improve message displayed when the JAAS login module doesn't have a backing engine
    * [KARAF-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-1586] - wrapper:install command should be usable outside OSGi too
    * [KARAF-1600] - Avoid duplicate feature and bundle resolution when installing cascading features
    * [KARAF-1640] - Make sure the local console is fully working before the user can type commands
    * [KARAF-1657] - org.ops4j.pax.url.mvn.proxySupport=false
    * [KARAF-1676] - OBR URL's in Karaf have no simple identifier
    * [KARAF-1693] - Rename command-watch to watch
    * [KARAF-1700] - update manual to reflect JDBC Lock updates
    * [KARAF-1710] - Remove @version headers from source
    * [KARAF-1749] - The command packages:imports should work on unresolved bundles
    * [KARAF-1752] - hard coded features uri in features deployer feature discovery
    * [KARAF-1753] - Port SCR Components Karaf 2.3
    * [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-1810] - Provide alias for feature:repo-add in Karaf 2.x
    * [KARAF-1811] - Remove section about console colors from manual
    * [KARAF-1812] - Use Felix properties and remove org.apache.karaf.util.Properties
    * [KARAF-1813] - Add osgi:name and name attribute in SystemMBean
    * [KARAF-1828] - Build src distributions within specific profiles
    * [KARAF-1829] - Upgrade to Spring 2.5.6.SEC03
    * [KARAF-1833] - Reintroduce the -p option in the client
    * [KARAF-1834] - Make KarafTestSupport available externally
    * [KARAF-1844] - Add command aliases for migration purpose between 2.3.x and 3.x
    * [KARAF-1850] - feature:list should use alphabetical order
    * [KARAF-1878] - Feature bundle start up order by startLvl

** New Feature
    * [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-1334] - Use the new servicemix spec to allow the use of both the JRE implementations and implementations from bundles
    * [KARAF-1475] - Support SSH agent forwarding and use the agent authentication when connecting to other instances
    * [KARAF-1546] - Add -i/--install-all option to feature:add-url
    * [KARAF-1557] - Merge instance clone command on 2.3.x branch
    * [KARAF-1777] - backport the new command bundle:classes
    * [KARAF-1778] - backport new command bundle:find-class
    * [KARAF-1792] - Add karaf-pax-exam
    * [KARAF-1806] - Add version attribute in the SystemMBean
    * [KARAF-1856] - Merge bundle:diag command
    * [KARAF-1857] - Merge bundle:services command
    * [KARAF-1910] - Provide Spring 3.1.2.RELEASE features

** Task
    * [KARAF-1415] - Support Jetty 7.6
    * [KARAF-1445] - more svn:ignore are needed

** Test
     * [KARAF-1876] - Improve StandardFeaturesTest, EnterpriseFeaturesTest and SpringFeaturesTest using feature service
     * [KARAF-1912] - Test failures in itest.OsgiTest as aries proxy api is not bundle id 10 anymore


                    Apache Karaf 2.2.6
                    ==================

  Overview
  --------

  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
 update to Apache Karaf 2.2.5. It contains bug fixes identified in the prior release,
 and introduces improvements including; improved Windows, AIX, HP-UX, and Solaris support
 in the service wrapper, three new deployer demos showing how to make an OSGi bundle, a
 features file, and how to wrap a third party jar into a bundle, and support for ssh public
 key authentication and agent forwarding. A few new commands also appear in this release
 including; features:status to indicate feature loaded or not, feature:chooseurl to make
 it easy to install well known feature files, and a watch command to allow users to watch
 the output of a karaf command like when using the unix watch mechanism. Several dependencies
 were also updated, bringing Spring to 3.0.7-RELEASE, eventadmin to 1.2.14, Apache Pom
 to version 10, the maven bundle plugin to 2.3.7, and fileinstall to 3.2.0.
  For more detail please see the change log below.

  Changlog
  --------

** Bug
    * [KARAF-610] - Can't input the path string completely via karaf shell
    * [KARAF-669] - Dependency artifacts should be available on the Maven central repo
    * [KARAF-675] - Longer shell commands affect the shell view when using up and down arrows
    * [KARAF-811] - Combination of wrap+mvn and instructions doesnt work any more
    * [KARAF-875] - Unable to define escape the event designator '!' using '\!'
    * [KARAF-891] - Problem with $ charact in wrap:mvn URL
    * [KARAF-913] - Omitted @Command on Gogo plugin is hard to debug because of NPE
    * [KARAF-918] - pax-url prerequisites for a feature are not respected
    * [KARAF-953] - features.xml dropped into deploy BEFORE karaf is started are not recognised
    * [KARAF-1018] - using auto-complete (TAB key) on commands that don't take Arguments/Options throws IndexOutOfBoundsException. 
    * [KARAF-1116] - Scripts fail at resolving java jdk. 
    * [KARAF-1117] - Log messages appear on stdout when the feature http is installed
    * [KARAF-1121] - Error when installing feature camel-cxf : jetty.xml is empty
    * [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-1133] - Error executing command 'start' when starting a child instance
    * [KARAF-1139] - Redeploy kar cause installing old feature
    * [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-1161] - The shell:new action does not support the creation of arrays
    * [KARAF-1164] - Archetypes are not valid
    * [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-1179] - "dev:watch *" doesn't notice new bundles added to the container
    * [KARAF-1182] - Karaf features-maven-plugin always selects lowest version in range
    * [KARAF-1199] - dev:watch command issues "[WATCH]" announcements only to the issuing shell
    * [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-1220] - o.p.karaf.management bundles must stop when its configured keystore is not available
    * [KARAF-1241] - admin script does not pass on JAVA_OPTS to instance
    * [KARAF-1243] - Karaf JMX Config MBean behaves in unpredictable ways
    * [KARAF-1244] - Deployer Transformers Supports Manifest Element without A Supporting Schema
    * [KARAF-1252] - Features core bundle should not depend to shell and management bundles
    * [KARAF-1256] - Archetypes should use dynamic variables
    * [KARAF-1257] - Configuration completers should avoid using getConfiguration method of config admin
    * [KARAF-1260] - Karaf 2.2.x branch - Console doesn't like it when the console window is to small - no line wrapping for commands
    * [KARAF-1264] - Dump demo in Karaf 2.2.x can not resolve package org.apache.karaf.diagnostic.demo package.
    * [KARAF-1265] - Add AIX, HP-UX, Solaris, and "custom" support in the service wrapper
    * [KARAF-1266] - Minimal distribution doesn't start due to missing management bundle
    * [KARAF-1268] - Allow multiple commands in karaf script
    * [KARAF-1279] - IOExceptions used in an incompatible way with Java 5.
    * [KARAF-1284] - Karaf bundle archetype maven bundle plugin configuration is missing "instructions" tags.
    * [KARAF-1298] - dev:watch does not work in some cases
    * [KARAF-1304] - Quick help text for features:info command is erroneous
    * [KARAF-1318] - User bundles are treated as system bundles
    * [KARAF-1323] - Testfailures in source package

** Dependency upgrade
    * [KARAF-1151] - Upgrade to Spring 3.0.7.RELEASE
    * [KARAF-1154] - Upgrade to eventadmin 1.2.14
    * [KARAF-1155] - Upgrade to Apache POM 10
    * [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-1205] - Upgrade to maven-bundle-plugin 2.3.7
    * [KARAF-1231] - Upgrade to EasyMock 3.1
    * [KARAF-1232] - Upgrade to Jasypt 1.9.0
    * [KARAF-1233] - Upgrade to asm 3.3.1
    * [KARAF-1272] - Upgrade to fileinstall 3.2.0

** Improvement
    * [KARAF-693] - features:addurl raises "Premature end of file" when network is not available
    * [KARAF-783] - Improve security docs wrt role policies
    * [KARAF-916] - use org.apache.aries.jmx.core instead of org.apache.aries.jmx
    * [KARAF-970] - feature <config/> tag doesn't create the cfg file
    * [KARAF-999] - local-repo folder shouldn't be used
    * [KARAF-1010] - Add 64Bit ServiceWrapper to karaf
    * [KARAF-1072] - Provide man command as an alias to help
    * [KARAF-1145] - Upgrade to pax-logging 1.6.4
    * [KARAF-1153] - Jetty feature should also install the jetty-websocket bundle
    * [KARAF-1191] - Switch back to millis per default on shell:sleep and introduce -s option
    * [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-1280] - Add wrap third party jar example
    * [KARAF-1283] - Add a simple OSGi bundle demo to deployer examples
    * [KARAF-1292] - Add a feature demo
    * [KARAF-1295] - serviceUrl in org.apache.karaf.management.cfg should use 0.0.0.0 but not localhost
    * [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

** New Feature
    * [KARAF-32] - Support ssh public key authentication and agent forwarding
    * [KARAF-798] - Support for relocating karaf.history file
    * [KARAF-1059] - Karaf command features:status to indicate feature loaded or not
    * [KARAF-1132] - Introduce new command feature:chooseurl to make it easy to install well known feature files
    * [KARAF-1196] - implement a 'watch' command so we can watch the output of a karaf command like the unix 'watch' mechanism

** Question
    * [KARAF-806] - ProxyLoginModule should actually be on the bootclasspath classpath right?

** Task
    * [KARAF-1274] - Please set svn:ignore to all eclipse's project files

** Test
    * [KARAF-1195] - FeaturesServiceImplTest intermittently fails on slower machines


                    Apache Karaf 2.2.5
                    ==================

  Overview
  --------
  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
 update to Apache Karaf 2.2.4. It contains bug fixes identified in the prior release,
 and introduces improvements including; multiple JAAS support improvements, better support 
 for Linux systems with certain versions of libc, SCP support, and demos for extending 
 Karaf's console commands and using Karaf Archives (KARs). Several dependencies were also 
 updated, bringing Pax Web to version 1.0.8, Jetty to 7.5.4.v20111024, and Jasypt to 1.8.
  For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [KARAF-867] - Inconsistent deployment behavior between bundle installer and feature installer 
    * [KARAF-926] - JAAS: Properties backing engine doesn't respect encryptor prefix and suffix
    * [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-959] - features:create-kar goal doesn't create a valid kar
    * [KARAF-985] - LDAPLoginModule generates a large number of DirContext objects
    * [KARAF-1003] - Karaf fails to start on a linux 32 bit system who's libc version is 2.3.4.
    * [KARAF-1015] - ConfigMBean should use a different config pid than the config shell
    * [KARAF-1020] - BundleWatcher should look for SNAPSHOT
    * [KARAF-1030] - Grep command breaks existing line formating
    * [KARAF-1064] - BootstrapLogManager does not reuse the instantiated Handler
    * [KARAF-1065] - TextDumpProvider.createDump(DumpDestination) does not flush OutputStreamWriter
    * [KARAF-1104] - Add plexus-utils dependency to features-maven-plugin to allow it to work with Maven 2.2.x to create KARs
    * [KARAF-1105] - Fix url in Command Demo Readme file.
    * [KARAF-1106] - Jetty feature should use ServiceMix Spec for activation
    * [KARAF-1108] - Features should use correct start-level
    * [KARAF-1110] - Archetypes don't work
    * [KARAF-1111] - Add documentation about archetypes
    * [KARAF-1114] - osgi shell blueprint bundle shouldn't use lazy default-activation

** Dependency upgrade
    * [KARAF-997] - Upgrade to Pax Web 1.0.8
    * [KARAF-998] - upgrade to jetty 7.5.4.v20111024
    * [KARAF-1092] - Upgrade to Jasypt 1.8
    * [KARAF-1107] - Karaf should use directly commons-* bundles

** Improvement
    * [KARAF-606] - JAAS: Allow LDAPLoginModule to supply role "DN" from LDAP group search
    * [KARAF-936] - Features info command should display the start level of a bundle if available.
    * [KARAF-940] - Align various bat and sh scripts
    * [KARAF-945] - Use singular for shell commands
    * [KARAF-956] - jaas module should throw generic FailedLoginException 
    * [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-981] - Set kar as a boot feature
    * [KARAF-1013] - Less verbose in log when mistyped commands at INFO level
    * [KARAF-1014] - Make files specified by ${includes} optional
    * [KARAF-1019] - Set java memory options only when required
    * [KARAF-1022] - java.io.tmpdir system property should use $KARAF_DATA/tmp in place of $KARAF_BASE/tmp
    * [KARAF-1032] - Text improvements to Features XSD
    * [KARAF-1041] - create-kar goal should handle configfile
    * [KARAF-1057] - Update the list of supported execution environments
    * [KARAF-1087] - kar archetype
    * [KARAF-1088] - assembly archetype
    * [KARAF-1091] - Upgrade maven bundle plugin to 2.3.6
    * [KARAF-1112] - shell:sleep should be in seconds
    * [KARAF-1115] - Add a jre.properties.cxf with all changes required to run cxf

** New Feature
    * [KARAF-541] - Support JMX SSL via etc/org.apache.karaf.management.cfg 
    * [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-987] - Add scp support
    * [KARAF-1029] - Add completer support on option values
    * [KARAF-1085] - Add Kar deployer demo using features-maven-plugin
    * [KARAF-1109] - Provide archetypes for bundle, bundle-blueprint, web-bundle, war

** Task
    * [KARAF-976] - Update Apache Karaf 2.2.x documentation for Child Instances


                    Apache karaf 2.2.4
                    ==================

  Overview
  --------
  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
 update to Apache Karaf 2.2.3. It contains bug fixes identified in the prior release,
 and introduces improvements including; significant improvements to KAR support, and new
 MBeans (such as Dev, HTTP, Log, OBR, Bundles, Services and System). Several dependencies
 were also updated, bringing Apache Felix Gogo to version 0.10.0, and Pax Web to 1.0.7.
  For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [KARAF-771] - KAR Deployer doesn't work
    * [KARAF-773] - KAR docu outdated
    * [KARAF-816] - Wrapper feature doesn't load security libraries
    * [KARAF-889] - dev:framework commands incorrect workflow
    * [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-914] - Add ICU4J in Jasypt bundle
    * [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-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-929] - MBean bundles should be seen as system bundles
    * [KARAF-932] - ConfigMBean raise a NPE when dictionnary is null

** Dependency upgrade
    * [KARAF-901] - Upgrade to Pax Web 1.0.7

** Improvement
    * [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-786] - Add more MBeans
    * [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-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-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

** New Feature
    * [KARAF-541] - Support JMX SSL via etc/org.apache.karaf.management.cfg 
    * [KARAF-657] - kar deployer should start the feature
    * [KARAF-845] - Add a jasypt based property placeholder to support encrypted values
    * [KARAF-912] - Add a goal to create a kar file

** Task
    * [KARAF-887] - Refer PrinceXML website in the manual


                    Apache Karaf 2.2.3
                    ==================

  Overview
  --------

  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
 update to Apache Karaf 2.2.2. It contains bug fixes identified in the prior release,
 and introduces improvements including; Optional JDK 7 support, a spring-jms feature, 
 and a macro allowing users to identify the contents of a specific config file. Several
 dependencies were also updated, bringing Jetty to version 7.4.5.v20110725, Eclispe
 Equinox to 4.6.2.R36x_v20110210, and Pax web to 1.0.6. 
  For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [KARAF-281] - History using up arrow does not work on windows
    * [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-760] - MInor time rendering bug
    * [KARAF-766] - Wrong help for features:install
    * [KARAF-769] - Update NOTICE file to mention JSW
    * [KARAF-776] - jclouds features require OSS Sonatype repository
    * [KARAF-796] - Editing Pax Web Configuration Via Karaf Console
    * [KARAF-800] - karaf does not start when using java7
    * [KARAF-809] - MainStartTest fails on WinXP
    * [KARAF-815] - Generic the Karaf manual link
    * [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

** Dependency upgrade
    * [KARAF-757] - upgrade to jetty 7.4.4.v20110707
    * [KARAF-768] - Upgrade to Eclipse Equinox 3.6.2.R36x_v20110210
    * [KARAF-775] - upgrade to pax web 1.0.5
    * [KARAF-789] - Upgrade jetty to 7.4.5.v20110725
    * [KARAF-790] - Upgrade paxurl to 1.2.8
    * [KARAF-792] - Upgrade pax-runner to 1.6.2
    * [KARAF-833] - Upgrade to Pax Web 1.0.6
    * [KARAF-834] - Upgrade to Spring 3.0.6 - in std. features.xml

** Improvement
    * [KARAF-645] - Add a flag to suppress --help Option output on 
    * [KARAF-667] - Improve error message when OBR resolution fails due to invalid URLs
    * [KARAF-698] - Technical edits to User's Guide
    * [KARAF-699] - Grammar fixes to source code files
    * [KARAF-700] - Updates to developer's guide
    * [KARAF-722] - throw more meaningful exception but not NPE when the BUNDLE_SYMBOLICNAME is null
    * [KARAF-729] - Karaf Maven Plugin source code cleanup
    * [KARAF-733] - Doc fixes to the quick start guide and overview page
    * [KARAF-752] - Editorial fixes to the assemblies/ configuration files
    * [KARAF-755] - Recommended improvements to help commands
    * [KARAF-764] - Correct links to ops4j in documentation
    * [KARAF-784] - Add date in the default Karaf log
    * [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-803] - Add JDK7 compile support to 2.2.x source build
    * [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-829] - Support of Java 7
    * [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

** New Feature
    * [KARAF-696] - Add a macro allowing users to identify the contents of a specific config file.
    * [KARAF-835] - Provide a spring-jms feature

** Task
    * [KARAF-673] - Page failover.html contains invalid configuration properties


                    Apache Karaf 2.2.2
                    ==================

  Overview
  --------

  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
 update to Apache Karaf 2.2.1. It contains bug fixes identified in the prior release, 
 and introduces improvements including; improved behavior for the OracleDB locking 
 mechanism and http feature jetty port usage. Several improvements to the shell have 
 been incorporated, such as completion for shell aliases and a warning on osgi:shutdown
 to avoid inadvertently shutting down the container. There has also been a few small 
 dependency upgrades to felix event admin, Pax URL, and jetty.
  For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [KARAF-496] - Karaf prompt displayed twice
    * [KARAF-622] - Jaas Cancel command is not working
    * [KARAF-633] - NOTICE distribution file still refers Apache Felix Karaf
    * [KARAF-634] - README file refers an incorrect contribution URL
    * [KARAF-637] - Update branding-console documentation to include the changes to custom.properties
    * [KARAF-648] - maven-enforcer-plugin configuration not used
    * [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-670] - Missing ${karaf.base}/system cause NullPointerException
    * [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

** Dependency upgrade
    * [KARAF-672] - Upgrade to felix event admin 1.2.12
    * [KARAF-680] - Upgrade to Pax URL 1.2.7
    * [KARAF-682] - upgrade to jetty 7.4.2.v20110526

** Improvement
    * [KARAF-445] - Add completion for shell aliases
    * [KARAF-573] - Print out that karaf has to be restarted if using framework with new framework
    * [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-651] - features-maven-plugin should "embed" the Karaf features descriptor
    * [KARAF-654] - Merge jetty feature with jetty-jaas 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

** Task
    * [KARAF-543] - Add manual section around log custom appenders
    * [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-695] - Upgrade to Pax-Web 1.0.4

** Test
    * [KARAF-683] - use filter ${karaf.version} instead of the hard code one to fix archetypes/itests failure

                    Apache Karaf 2.2.1
                    ==================

  Overview
  --------

  This release of Apache Karaf is based off of the 2.2.x series branch, representing an
 update to Apache Karaf 2.2.0. It contains bug fixes identified in the prior release, 
 and introduces improvements including; updates to pax-logging, pax-runner, pax-web, 
 jetty, and felix versions. The config commands have has been updated, and kar features 
 are now in features-maven-plugin.
  For more detail please see the change log below. 

  Changelog
  ---------

** Bug
    * [KARAF-456] - Artifact versions named in the documentation are not replaced with the version of the current project
    * [KARAF-493] - Various site fixes
    * [KARAF-494] - Include the .kar features in 2.2.1
    * [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-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-537] - admin.bat prints stacktraces to standard out
    * [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-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-577] - Cannot Run WAR From Root Context
    * [KARAF-580] - Kar installer in 2.2 uses feature instead of features as classifier
    * [KARAF-585] - When connected to a remote instance, Ctrl-C closes the connection instead of simply interrupting the command
    * [KARAF-589] - Shell console ExampleSubclassMain unit test is broken
    * [KARAF-599] - Archetypes CommandArchetypeTest unit test fails
    * [KARAF-600] - "Extending the console" documentation still refers to org.osgi.service.command
    * [KARAF-610] - Can't input the path string completely via karaf shell
    * [KARAF-621] - features-maven-plugin:2.2.0:generate-features-xml fails with NullPointerException
    * [KARAF-625] - Missing property 'log4j.appender.out.file' in the file org.ops4j.pax.logging.cfg caused a NPE
    * [KARAF-626] - admin:connect always fails with "Authentication failed"
    * [KARAF-629] - CommandArchetypeTest test case failure, expected START_TAG or END_TAG not TEXT.
    * [KARAF-630] - SpringDeploymentListenerTest fails on IBM JDK builds with No Class Def Found Error
    * [KARAF-632] - Itests failures

** Dependency upgrade
    * [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-613] - Upgrade to Blueprint 0.3.1

** Improvement
    * [KARAF-461] - dev:create-dump command should generate a cleaner zip file name
    * [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-497] - Resolve mvn: urls in <descriptor/> element for features-maven-plugin:add-features-to-repo
    * [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-533] - Improve depdencny handling to manual
    * [KARAF-539] - Document configfile xml tag of features
    * [KARAF-542] - Support of next line with '>' character
    * [KARAF-551] - Implement the shell:source command
    * [KARAF-554] - Add karaf version in system properties and display in shell:info command output
    * [KARAF-563] - Adjustable PermSize and MaxPermSize in karaf script
    * [KARAF-564] - Allow configuring features OBR resolver to resolve optional imports as well
    * [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-603] - Add 'karaf-framework' feature to describe core Karaf bundles
    * [KARAF-606] - JAAS: Allow LDAPLoginModule to supply role "DN" from LDAP group search

** New Feature
    * [KARAF-463] - Add chapter for Pax Web and the OSGi HttpService
    * [KARAF-605] - Add param to Gogo Argument and Option to override default value with specific value

** Task
    * [KARAF-489] - Upgrade pax-logging to 1.6.1
    * [KARAF-492] - Upgrade Karaf to version 1.0.2 of pax-web
    * [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-552] - Upgrade to Pax URL 1.2.6
    * [KARAF-566] - Build: Remove duplicate entries from build artefacts.
    * [KARAF-567] - org.apache.karaf.jaas.config.impl accidentally exported?
    * [KARAF-578] - Upgrade to PAX-WEB 1.0.3 


                    Apache Karaf 2.2.0
                    ==================

  Overview
  --------

  This release of Apache Karaf contains a multitude of new features, improvements, and
bug fixes.  Some highlights include many new or updated commands, a LDAP JAAS module
with login support, an updated feature service, a feature for Aries transaction, JPA &
JNDI modules, expanded documentation, and new versions of most dependencies.  The help
system and manual have also undergone major updates. Please note that if you are using 
pax-exam with scanFeatures that you also have to upgrade pax-exam to the latest version.
  For more detail please see the change log below.

  Changelog
  ---------

** Sub-task
    * [KARAF-272] - Update Release Notes in kit and online. 
    * [KARAF-392] - Ability to use features-maven-plugin:add-features-to-repo without specifying features
    * [KARAF-393] - Ability to use features-maven-plugin:add-features-to-repo with explicitly specified remote maven repositories
    * [KARAF-441] - Add Karaf-2.2.x to Hudson
    * [KARAF-462] - Update SCM section in main pom.xml to reference branch 2.2.x instead of trunk.

** Bug
    * [KARAF-8] - Improve error reporting for features installer
    * [KARAF-17] - ANSI support not properly initialized when creating an Karaf instances from WebConsole or JMX
    * [KARAF-156] - command dev:dynamic-import does not work
    * [KARAF-221] - When starting a bare karaf, a single bundle is displayed when using osgi:list, we should display none
    * [KARAF-230] - 2.1.0 Wrapper doesn't work and if hacked no SSH
    * [KARAF-232] - validate goal of features-maven-plugin should support wrap jar
    * [KARAF-236] - Command Features:info with tree switch displays partial information
    * [KARAF-238] - SLF4J Duplicate bindings warning when using Equinox
    * [KARAF-239] - Equinox Framework Extensions
    * [KARAF-241] - Shell commands are not registered in OSGi
    * [KARAF-244] - features-maven-plugin does not work with maven 3
    * [KARAF-254] - Web configmanager did not list all available configurations
    * [KARAF-261] - Cannot run command admin on cygwin.
    * [KARAF-262] - The command admin create new instance cannot create good script in bash language on cygwin
    * [KARAF-265] - add-features-to-repo goal of features-maven-plugin should support wrap jar with additional instructions
    * [KARAF-268] - When installing a bundle from a feature with blancks before  / after the bundle url, those bundles are not loaded on restart (on felix)
    * [KARAF-270] - karaf-service scripts tries to create "data" directory in wrong location 
    * [KARAF-273] - java.lang.NullPointerException: Inflater has been closed
    * [KARAF-282] - The shell:exec does not always capture the whole output
    * [KARAF-285] - The bin/shell script should not read the input stream when a command is passed
    * [KARAF-286] - When running in the plain shell console (using bin/shell), tab completion prints lots of exceptions
    * [KARAF-288] - Shell history doesn't work anymore (at leas on windows)
    * [KARAF-292] - Maven filtering issue for Windows batch files in kit
    * [KARAF-295] - Webconsole - Configuration Admin, shows multiple entries for FileInstall after restart
    * [KARAF-299] - [patch] miscellaneous cleanups
    * [KARAF-300] - Incorrect behavior of backspace/delete keys in web console Gogo plugin
    * [KARAF-304] - Startup problems: javax.naming.NoInitialContextException: Unable to determine caller'sBundleContext
    * [KARAF-311] - Deploying a sample application in the User's Guide is missing a command
    * [KARAF-313] - feature.xml is not read correct if it contains linebreaks
    * [KARAF-321] - karaf shell script does not work with mingw and whitespaces in path
    * [KARAF-324] - Shell/Console tests fail in windows
    * [KARAF-326] - eclipse:eclipse importing error
    * [KARAF-327] - Graceful shutdown of Windows service, revisited
    * [KARAF-330] - Removal of a JAAS realm service actually remove the wrong reference in the internal storage
    * [KARAF-331] - Failure to execute script against Karaf sshd. 
    * [KARAF-335] - The lib folder should be optional
    * [KARAF-344] - Deploying a new JAAS config requires to restart the framework
    * [KARAF-347] - org.ops4j.pax.url.mvn.cfg contains incorrect comment on last property
    * [KARAF-357] - shell.bat won't start with NoClassDefFoundError and NPE
    * [KARAF-358] - When the feature service calls refresh(), it should wait for the refresh to happen before returning
    * [KARAF-360] - Empty comment in some config files
    * [KARAF-384] - Cannot find some jar in ext directory
    * [KARAF-389] - Remove transitive dependencies from features-maven-plugin
    * [KARAF-398] - Features schema is not correct
    * [KARAF-414] - The apache-karaf-2.1.99-SNAPSHOT-minimal.tar.gz generated contains unresolved dependencies
    * [KARAF-415] - Config commands do not support the use of Managed Service Factories
    * [KARAF-421] - StringCompleter extension cannot return own strings
    * [KARAF-425] - Info command shows duplicated sections
    * [KARAF-428] - obr:addurl/removeurl generate incorrect "obr.repository.url" property
    * [KARAF-429] - Configuration not found warning in wrap deployer
    * [KARAF-436] - Typo mistake in the FeaturesServiceMBean
    * [KARAF-440] - features-maven-plugin throws NullPointerException maven 3.0.2
    * [KARAF-442] - Wrong EventType called in FeaturesService.uninstallFeature
    * [KARAF-453] - Manual war contains two web.xml files - cannot be served by pax-web
    * [KARAF-458] - Fix the karaf shell to look nice within Eclipse console
    * [KARAF-472] - features-maven-plugin: TAB-characters in feature-repository lead to resolution-errors in add-features-to-repo
    * [KARAF-480] - Minor ansi issue with admin:rename command
    * [KARAF-481] - Karaf 2.2.x manuals do not get signature files created
    * [KARAF-485] - Karaf MBeans are not registered

** Improvement
    * [KARAF-5] - [karaf] admin:create should support a -r, --rmi-registry-port option to allow the RMI registry port to be configured 
    * [KARAF-53] - Provide XML Schema for feature descriptors and support it's validation
    * [KARAF-58] - Improve terminal height / width support
    * [KARAF-60] -  Improve history support by using the !
    * [KARAF-197] - The SSH layer should dynamically handle configuration changes
    * [KARAF-202] - Create la alias in shell.init.script
    * [KARAF-214] - Print a nice error when a command is not found
    * [KARAF-215] - Upgrade to latest jline2 /  jansi
    * [KARAF-224] - Improve log:display command to display colored log events
    * [KARAF-227] - The shell/log commands should use a dynamic configuration
    * [KARAF-228] - The jaas/modules should use a dynamic configuration
    * [KARAF-229] - The management bundle should use a dynamic config
    * [KARAF-234] - validate goal of features-maven-plugin should support spring/blueprint/feature protocol prefix
    * [KARAF-237] - print importer bundle in packages:imports
    * [KARAF-240] - Cleanup Karaf pom to use version and groupId from the parent pom
    * [KARAF-243] - Provide InfoProvider that will collect information from bundle MANIFEST.MF 
    * [KARAF-247] - Add J2SE-1.2 to org.osgi.framework.executionenvironment
    * [KARAF-251] - Allow the use of version ranges on dependant features
    * [KARAF-252] - Add a dependency boolean attribute on features' bundles and allow specifiying an optional resolver
    * [KARAF-253] - changing the default JMX service uri to be more enterprise frendly
    * [KARAF-255] - Move Karaf manual generation out of standard install to its own profile
    * [KARAF-259] - Upgrade dependencies to their latest version
    * [KARAF-266] - Upgrade Karaf encryption to use Jasypt 1.7
    * [KARAF-267] - Use ServiceMix ASM 3.1.0 bundle in place of the springsource one
    * [KARAF-274] - Upgrade to JLine 2.5
    * [KARAF-283] - Make Vm options for child karaf server persistent and part of the configuration
    * [KARAF-289] - Webconsole - Admin should look like the other webconsole plugins
    * [KARAF-291] - Webconsole - Features should look like the other webconsole plugins
    * [KARAF-297] - Spring Features should provide spring-web bundles
    * [KARAF-302] - Features for Jetty-JAAS
    * [KARAF-306] - Improve documentation on creating commands with completers
    * [KARAF-309] - Provide jetty.xml with preconfigured JAAS Authentication.
    * [KARAF-314] - feature-maven-plugin does not fail if component couldn't be found
    * [KARAF-316] - Add head/tail commands
    * [KARAF-318] - JdbcBackingEngine should acquire schema configuration from JdbcLoginModule
    * [KARAF-320] - Missing svn:ignores
    * [KARAF-329] - improve test-util methods
    * [KARAF-332] - Add log tail command
    * [KARAF-336] - Make sure users using console / shell / webconsole have a known role 
    * [KARAF-338] - Upgrade Karaf to version 1.0.0 of pax-web
    * [KARAF-340] - When the webconsole is invoked, the code should be run under the credentials of the authenticated user
    * [KARAF-341] - When a ssh console is invoked, the code should be run under the credentials of the authenticated user
    * [KARAF-343] - Upgrade to fileinstall 3.1.10
    * [KARAF-346] - make features:install more verbose
    * [KARAF-349] - Upgrade to SLF4j 1.5.8
    * [KARAF-353] - features commands should allow more than 1 argument
    * [KARAF-356] - The main console should run under the user's subject
    * [KARAF-362] - Add documentation how to build a custom karaf distribution including branding
    * [KARAF-375] - features-maven-plugin always uses transitive features
    * [KARAF-385] - Upgrade to felix framework 3.0.8
    * [KARAF-386] - Add a debug argument on the bin/karaf shell script to start karaf using remote debugging
    * [KARAF-387] - Create an assembly mmaven module under feature to generate basic and enterprise features xml file
    * [KARAF-388] - allow specifying a version for a boot feature in etc/org.apache.karaf.features.cfg
    * [KARAF-394] - Add aries-application in features enterprise file + made small enhancements
    * [KARAF-395] - Modify org.apache.karaf.features.cfg to use features files standard and enterprise
    * [KARAF-396] - Upgrade to Pax-Logging 1.6.0 (providing slf4j 1.6.x support)
    * [KARAF-403] - Improve Bundle-Description header display
    * [KARAF-404] - Upgrade to felix maven-bundle-plugin 2.3.4
    * [KARAF-405] - Force JDK 1.5 compiler
    * [KARAF-409] - Use the new Karaf Logo on Webconsole
    * [KARAF-412] - Documentation: Add notes on how to make multiple configuration files available to the bundle context.
    * [KARAF-416] - All PaxAppenders should be automatically called instead of having to configure them explicitely
    * [KARAF-417] - Move extractNameVersionType() method into Karaf utils
    * [KARAF-420] - Automatically import paxlogging packages when deploying a war
    * [KARAF-422] - If no version was found, features-maven-plugin try to create an artifact with a null version
    * [KARAF-423] - KarafJaasPasswordAuthenticator should log reason for authentication failure.
    * [KARAF-443] - Most of the blueprint bundles should be lazy by default
    * [KARAF-446] - Upgrade to Felix webconsole 3.1.8
    * [KARAF-455] - Improve the confluence output for commands

** New Feature
    * [KARAF-151] - Implement an assembly 'extract' deployment option, with automatic detection of feature repositories
    * [KARAF-188] - Provide commands to manage users, passwords and roles
    * [KARAF-209] - Allow the info command to display custom information such as Apache ServiceMix version number
    * [KARAF-211] - osgi:list to other command to display context-path for web applications or a new war command for that
    * [KARAF-213] - create an automatic completer if an @Argument is a File by using the current working directory and completing on files. I wonder if we could provide an optional filter method maybe to restrict available files?
    * [KARAF-218] - Add a more pager command
    * [KARAF-225] - FeaturesService should publish OSGi events
    * [KARAF-233] - Add a log:clear command
    * [KARAF-257] - Features - Add description attribute and have it listed in the features overview
    * [KARAF-290] - Optional feature event-admin
    * [KARAF-293] - Feature for Aries Transaction,JPA & JNDI modules.
    * [KARAF-307] - Ldap jaas login module
    * [KARAF-310] - Add LDAP JAAS module
    * [KARAF-348] - Add admin:rename command
    * [KARAF-350] - Add KARAF_OPTS param to startup scripts
    * [KARAF-373] - Add option to features-maven-plugin to automatically include <descriptors> into <repository>
    * [KARAF-380] - Add .jar deployer autowrapping non-bundle-jar files dropped to deploy folder
    * [KARAF-391] - Ability to use features-maven-plugin:add-features-to-repo without specifying features
    * [KARAF-426] - Manage Karaf shell.name by branding
    * [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

** Task
    * [KARAF-42] - Use an svn based mechanism  for Karaf's manual
    * [KARAF-43] - Use overriden properties instead of configuring the maven bundle plugin in each module
    * [KARAF-219] - Upgrade to latest gogo
    * [KARAF-235] - Upgrade to latest Aries JMX / Blueprint
    * [KARAF-258] - Use the org.osgi groupId for core and compendium specs
    * [KARAF-276] - upgrade to pax-url 1.2.1
    * [KARAF-287] - Bump the jaas xsd / namespace handler as it has changed
    * [KARAF-301] - Create integration tests for the distribution itself
    * [KARAF-333] - Update karaf to use pax-url-mvn ver 1.2.4
    * [KARAF-345] - upgrade to spring 3.0.5.RELEASE
    * [KARAF-351] - Upgrade to pax-exam 1.2.3
    * [KARAF-390] - Upgrade to event admin 1.2.8
    * [KARAF-410] - Upgrade to spring-dm 1.2.1
    * [KARAF-411] - Upgrade to jetty 7.2.2.v20101205
    * [KARAF-427] - Use slf4j as default logger
    * [KARAF-431] - Add documentation around remote management via JMX
    * [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-438] - Upgrade to Aries 0.3
    * [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


                    Apache Karaf 2.1.4
                    ==================

  Overview
  --------

  This release of Apache Karaf is based off of the 2.1.x series branch, representing an update to Apache Karaf 2.1.3. It contains several bug fixes identified in the prior release, and introduces several improvements including; better behavior of the features-maven-plugin, documentation for making multiple configuration files available to the bundle context, and a more efficient bundle description for header display. For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [KARAF-8] - Improve error reporting for features installer
    * [KARAF-384] - Cannot find some jar in ext directory
    * [KARAF-421] - StringCompleter extension cannot return own strings
    * [KARAF-428] - obr:addurl/removeurl generate incorrect "obr.repository.url" property
    * [KARAF-436] - Typo mistake in the FeaturesServiceMBean
    * [KARAF-440] - features-maven-plugin throws NullPointerException maven 3.0.2
    * [KARAF-442] - Wrong EventType called in FeaturesService.uninstallFeature

** Improvement
    * [KARAF-375] - features-maven-plugin always uses transitive features
    * [KARAF-388] - allow specifying a version for a boot feature in etc/org.apache.karaf.features.cfg
    * [KARAF-403] - Improve Bundle-Description header display
    * [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-430] - don't force a karaf deploy to have a lib directory

** New Feature
    * [KARAF-373] - Add option to features-maven-plugin to automatically include <descriptors> into <repository>


                    Apache Karaf 2.1.3
                    ==================

  Overview
  --------

  This release of Apache Karaf is based off of the 2.1.x series branch, representing an update to Apache Karaf 2.1.2. It contains several bug fixes identified in the prior release, and updates the versions of SLF4j, pax-url-mvn, spring, and pax-exam. For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [KARAF-244] - features-maven-plugin does not work with maven 3
    * [KARAF-282] - The shell:exec does not always capture the whole output
    * [KARAF-292] - Maven filtering issue for Windows batch files in kit
    * [KARAF-299] - [patch] miscellaneous cleanups
    * [KARAF-300] - Incorrect behavior of backspace/delete keys in web console Gogo plugin
    * [KARAF-304] - Startup problems: javax.naming.NoInitialContextException: Unable to determine caller'sBundleContext
    * [KARAF-313] - feature.xml is not read correct if it contains linebreaks
    * [KARAF-319] - Pom hierarchy error
    * [KARAF-321] - karaf shell script does not work with mingw and whitespaces in path
    * [KARAF-326] - eclipse:eclipse importing error
    * [KARAF-327] - Graceful shutdown of Windows service, revisited
    * [KARAF-331] - Failure to execute script against Karaf sshd. 
    * [KARAF-344] - Deploying a new JAAS config requires to restart the framework
    * [KARAF-347] - org.ops4j.pax.url.mvn.cfg contains incorrect comment on last property
    * [KARAF-357] - shell.bat won't start with NoClassDefFoundError and NPE
    * [KARAF-358] - When the feature service calls refresh(), it should wait for the refresh to happen before returning
    * [KARAF-360] - Empty comment in some config files

** Improvement
    * [KARAF-314] - feature-maven-plugin does not fail if component couldn't be found
    * [KARAF-320] - Missing svn:ignores
    * [KARAF-329] - improve test-util methods
    * [KARAF-349] - Upgrade to SLF4j 1.5.8

** Task
    * [KARAF-333] - Update karaf to use pax-url-mvn ver 1.2.4
    * [KARAF-345] - upgrade to spring 3.0.5.RELEASE
    * [KARAF-351] - Upgrade to pax-exam 1.2.3


                    Apache Karaf 2.1.2
                    ==================

  Overview
  --------

  This release of Apache Karaf is based off of the 2.1.x series branch, representing an update to Apache Karaf 2.1.1. It contains several bug fixes identified in the prior release, and updates the pax-url version. For more detail please see the change log below.

  Changelog
  ---------

** Bug
    * [KARAF-270] - karaf-service scripts tries to create "data" directory in wrong location 
    * [KARAF-273] - java.lang.NullPointerException: Inflater has been closed
    * [KARAF-277] - The bin/client script does not work anymore
    * [KARAF-262] - The command admin create new instance cannot create good script in bash language on cygwin
    * [KARAF-284] - Remove snapshot dependency on org.apache.karaf.shell.console in archetypes/command/src/main/resources/archetype-resources/pom.xml
    * [KARAF-285] - The bin/shell script should not read the input stream when a command is passed
    * [KARAF-286] - When running in the plain shell console (using bin/shell), tab completion prints lots of exceptions
    * [KARAF-292] - Maven filtering issue for Windows batch file in kit.

** Task
    * [KARAF-276] - upgrade to pax-url 1.2.1


                    Apache Karaf 2.1.1
                    ==================

  Overview
  --------

  This release of Apache Karaf is based off of the 2.1.x series branch, representing an update to Apache Karaf 2.1.0. It contains multiple bug fixes, while introducing a minimal number of changes to dependencies from our last release. For more detail please see the change log below.

  Changelog
  ---------

** Sub-task
    * KARAF-269 - Update jetty bundle version in main karaf 2.1.1 pom.

** Bug
    * KARAF-17 - ANSI support not properly initialized when creating an Karaf instances from WebConsole or JMX
    * KARAF-156 - command dev:dynamic-import does not work
    * KARAF-221 - When starting a bare karaf, a single bundle is displayed when using osgi:list, we should display none
    * KARAF-232 - validate goal of features-maven-plugin should support wrap jar
    * KARAF-238 - SLF4J Duplicate bindings warning when using Equinox
    * KARAF-239 - Equinox Framework Extensions
    * KARAF-261 - Cannot run command admin on cygwin.
    * KARAF-265 - add-features-to-repo goal of features-maven-plugin should support wrap jar with additional instructions
    * KARAF-268 - When installing a bundle from a feature with blancks before / after the bundle url, those bundles are not loaded on restart (on felix)

** Improvement
    * KARAF-234 - validate goal of features-maven-plugin should support spring/blueprint/feature protocol prefix
    * KARAF-247 - Add J2SE-1.2 to org.osgi.framework.executionenvironment
    * KARAF-263 - Upgrade to Spring 3.0.4.RELEASE
    * KARAF-264 - Upgrade to Jetty 6.1.25

** New Feature
    * KARAF-225 - FeaturesService should publish OSGi events


                    Apache Karaf 2.1.0
                    ==================

  Overview
  --------

   New to this release of Apache Karaf is a JAAS Database Login Module, a way to store
 passwords in a secured way, a mechanism that allows a karaf application to distinguish 
 between UserPrincipal and RolePrincipal without depending from the Karaf JAAS Module. 
   The shell console has been enhanced to be available in a plain non-OSGi environment and
 smart tab completion has been improved, along with various commands. 
   We have also resolved a number of outstanding issues, and improved support on OS X and 
 IBM Java based systems. For more detail please see the change log below.

  Changelog
  ---------

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

** Bug
    * [KARAF-13] - javax.annotation not exported
    * [KARAF-19] - Exception in pax-web when shutting down karaf
    * [KARAF-125] - Webconsole can't concat strings?
    * [KARAF-133] - NPE when installing a bundle with a MANIFEST.MF not in the first entry of the zip
    * [KARAF-134] - The sort command does not work when trying to sort on the last field
    * [KARAF-136] - should override equals method for FeaturesListener to handle the proxy compared to wrapped object case
    * [KARAF-137] - IOException on web demo when trying to connect through SSH
    * [KARAF-138] - WarDeploymentListener: checks for manifest osgi entries but fails if no manifest is found
    * [KARAF-142] - NPE at org.apache.felix.webconsole.internal.servlet.OsgiManager.service - karaf started in server mode
    * [KARAF-143] - Setting "karaf.instances" system property has no effect
    * [KARAF-145] - Reading Properties like karaf.framework should be trimmed before reusage
    * [KARAF-150] - Config admin contains 2 configurations for SSH port in Karaf
    * [KARAF-162] - need exactly specify the import jline package version for webconsole.gogo
    * [KARAF-167] - Creating a new config using the shell commands lead to a FileNotFoundException instead of the file being created
    * [KARAF-169] - Do not use the ClassPath manifest header for the karaf client jar
    * [KARAF-178] - When the karaf runtime is launched under JSW, the bin/client script fails to connect
    * [KARAF-189] - Java endorsed dirs on AIX (IBM JVM)
    * [KARAF-190] - karaf-wrapper.conf is incorrect
    * [KARAF-199] - WarDeploymentListener: doesn't handle the default Webapp-Context correct on a Windows System
    * [KARAF-204] - Ctrl+D needs to be followed by another character to be recognized (at least when using the karaf client)
    * [KARAF-206] - The converter used for converting commands arguments and options can't convert objects to String

** Improvement
    * [KARAF-106] - Provide a more minimal / static disitrbution of karaf
    * [KARAF-130] - Allow a repository URL to be added to feature repository URL list even though it is an invalid one
    * [KARAF-135] - The package:export command should have more option to control the output
    * [KARAF-139] - Add a Shell Console branding demo
    * [KARAF-140] - Modifying properties and saving them via the Config Console removes comments in the original file
    * [KARAF-141] - Tests should be able to be run without any internet connections
    * [KARAF-146] - osgi:list should only print out 'system' bundles above a certain level, by default, this should be 50, but it should be configurable
    * [KARAF-148] - features:listUrl should print the repository names as well as the Url. 
    * [KARAF-152] - when using the @Argument annotation, if there is no name specified it would be nice to reuse the name of the field, rather than use VAL
    * [KARAF-155] - optional @Argument values (and I guess @Option values) can have default values which could be displayed in the help screen by reflecting into the value and finding non-zero/null values
    * [KARAF-157] - [PATH] minor patch to make it easier to reuse the Karaf command line console from outside Karaf specialising the user and application
    * [KARAF-158] - better display of errors when running a non-osgi command line outside of the shell
    * [KARAF-159] - when a bad command is typed (e.g. invalid command, argument, option) we should use some kind of syntax highlighting for the name of the command/argument/option in the error message
    * [KARAF-161] - provide an easy implementation of "public static void main(String[] args)" for a single command (i.e. for non-shells)
    * [KARAF-163] - Generate Features XML should handle artifact types
    * [KARAF-164] - Allow sub classes of Main to override the META-INF path used to discover commands
    * [KARAF-168] - Upgrade to latest Felix framework
    * [KARAF-170] - Main --help should behave like Main someCommand --help and list all the possible sub commands when outside of OSGi
    * [KARAF-171] - provide a default "help" sub command in shells used outside of OSGi
    * [KARAF-173] - Make it easier to configure the Karaf Main shell by subclassing.
    * [KARAF-174] - tab completion of sub commands not working in the non-osgi shell
    * [KARAF-175] - Upgrade to Java Service Wrapper 3.2.3
    * [KARAF-176] - Improve integration to provide a clean shutdown when running as a service
    * [KARAF-177] - Support 64 bits platforms for Java Service Wrapper on OS X
    * [KARAF-181] - Allow the cmdhelp maven plugin to generate output in confluence format
    * [KARAF-182] - Upgrade to Aries 0.2-incubating
    * [KARAF-184] - Enhance the dev:framework command to display or set the OSGi framework name
    * [KARAF-185] - Have a 'clean' parameter on the main shell script to clean the working folder
    * [KARAF-186] - Upgrade to pax-logging 1.5.3
    * [KARAF-187] - The completers do not work when several commands are on the same line separated by a column or pipe
    * [KARAF-191] - Create a Karaf Util module gathering all util classes
    * [KARAF-192] - Completion does not work on options, or even on arguments if an option is specified
    * [KARAF-193] - It should be possible to load a Command description from a text file
    * [KARAF-196] - Improve the output of osgi:headers command
    * [KARAF-198] - Remove dependency upon org.slf4j.helpers.MessageFormatter
    * [KARAF-200] - Upgrade to latest pax-runner and pax-exam
    * [KARAF-202] - Create la alias in shell.init.script
    * [KARAF-207] - The webconsole feature should not depend on the admin bundles
    * [KARAF-208] - when reusing the karaf shell outside of OSGi where there's only one shell scope, it would be nice to avoid prefixing the command names with the scope or with "*:" which is confusing
    * [KARAF-210] - Allow to specific context-path when installing a war file using the war url handler

** New Feature
    * [KARAF-26] - have restart clean command/API
    * [KARAF-144] - Allow using the console and commands outside of OSGi
    * [KARAF-147] - We should have a features:listVersions command that lists all the known versions of a feature
    * [KARAF-149] - Add a features:removeRepository command
    * [KARAF-166] - Allow subclasses of org.apache.karaf.shell.console.Main to be used as sub shells
    * [KARAF-172] - Implement a mechanism that would allow a karaf application to distingush between UserPrincipal & RolePrincipal without depending from Karaf JAAS Modules
    * [KARAF-180] - JAAS Database Login Module
    * [KARAF-212] - provide a simple annotation, say,@CompleterValues which can be used on methods on an action to provide a list of available values for an argument for tab completion

** Task
    * [KARAF-40] - Create a maven archetype for creating shell commands


                    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
