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