/*
 * 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.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
