/*
 * 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 Cellar 4.0.0
                    =========================

  Overview
  --------

 Apache Karaf Cellar 4.0.0 is a major new release of Cellar designed to work with Karaf 4.0.x versions.

  Changelog
  ---------
** Bug
    * [KARAF-1842] - cellar will show a distributed service as available, after the Node exposing it has shutdown unexpectedly 
    * [KARAF-3521] - Cellar Synchronizers should not uninstall local resources
    * [KARAF-3609] - Kubernetes/Cloud Service Discovery isn't working in Immutable applications
    * [KARAF-3617] - Cellar config synchronizer creates the configuration but not the properties at sync time
    * [KARAF-3646] - Service method and inheritance
    * [KARAF-3677] - Cellar commands is waiting for the shell 1.1.0 namespace
    * [KARAF-3714] - cluster:bundle-start doesn't actually start the bundle
    * [KARAF-3715] - Cellar BundleMBean operations raise a NullPointerException
    * [KARAF-3716] - cluster:bundle-* commands don't correctly select bundles
    * [KARAF-3717] - Same bundle appears two times in cluster:bundle-list
    * [KARAF-3719] - Cannot create a custom distribution including cellar using karaf-maven-plugin 
    * [KARAF-3734] - Sync is not called when a node join a cluster group
    * [KARAF-3864] - Warning when shutting down system with karaf-cellar installed
    * [KARAF-3873] - TimeoutTask doesn't correctly remove pending commands
    * [KARAF-3970] - Restarting cellar-hazelcast causes HazelcastInstanceNotActiveException
    * [KARAF-3991] - Cellar should use karaf.etc property instead of karaf.home to load hazelcast.xml

** Dependency upgrade
    * [KARAF-3708] - Upgrade to Hazelcast 3.4.2
    * [KARAF-3907] - Upgrade to Kubernetes v1 API
    * [KARAF-3958] - Upgrade to Hazelcast 3.5.1
    * [KARAF-4004] - Upgrade to Hazelcast 3.5.2

** Improvement
    * [KARAF-3502] - Refactor commands to be aligned with "new" Karaf 4 API
    * [KARAF-3503] - Remove blueprint dependency and full Karaf 4 based
    * [KARAF-3614] - Refactore features support for more reliable sync behavior
    * [KARAF-3615] - Cluster bundles should keep the bundle ID
    * [KARAF-3628] - Karaf Hazelcast instance should "merge" the members found by the discovery services
    * [KARAF-3664] - DOSGi exception handling and propagation
    * [KARAF-3795] - hazelcast instanceName
    * [KARAF-3869] - Use hazelcast-all artifact instead of hazelcast
    * [KARAF-3981] - Improve and extend synchronizers
    * [KARAF-3988] - cluster:feature-repo-add should support repository aliases

** New Feature
    * [KARAF-2488] - Provide Cellar HTTP LoadBalancer service
    * [KARAF-2489] - Provide Cellar HTTP Session Replication service

                    Apache Karaf Cellar 3.0.1
                    =========================

  Overview
  --------

 Apache Karaf Cellar 3.0.1 is a major new release of Cellar designed to work with Karaf 3.0.x versions.
 It includes a lot of new features and bug fixes, especially a complete refactoring of the internal sync behavior.
 It provides a more reliable, predictable and secure cluster support.

  Changelog
  ---------
** Bug
    * [KARAF-1474] - Fix Cellar itests
    * [KARAF-1486] - When a new member enters a custom group, it does not install the features that should be installed in that group
    * [KARAF-2250] - duplicated bundle found in cluster:bundle-list when cluster:bundle-install a bundle version like 1.02.12-SNAPSHOT.
    * [KARAF-2288] - CellarFeaturesSynchronizer ignores the features.repository sync flag
    * [KARAF-2490] - Cellar should maintain the resources deployment order on the cluster
    * [KARAF-2597] - Overlap between features with the same name (but different versions) in Cellar FeaturesSynchronizer
    * [KARAF-3337] - Cellar needs to blacklist configuration for "org.apache.aries.transaction" per default
    * [KARAF-3442] - cluster:bundle-install raise a NPE if the bundle location is not correct

** Dependency upgrade
    * [KARAF-3294] - Upgrade to Hazelcast 3.3.4
    * [KARAF-3296] - Upgrade to joda-time 2.5
    * [KARAF-3297] - Upgrade to Felix BundleRepository 2.0.2
    * [KARAF-3298] - Upgrade to Felix WebConsole 4.2.2
    * [KARAF-3299] - Upgrade to Apache jclouds 1.8.1
    * [KARAF-3300] - Upgrade to OSGi 5.0.0
    * [KARAF-3301] - Upgrade to Aries Proxy API 1.0.1

** Improvement
    * [KARAF-1157] - Add new cluster:sync commands
    * [KARAF-2168] - Rename sync property
    * [KARAF-2169] - Introduce *.listener property
    * [KARAF-2172] - Be able to define the priority between cluster data and local data
    * [KARAF-2241] - Mark feature not distributable 
    * [KARAF-2242] - Easy listing of distributable features
    * [KARAF-3341] - Blacklist "XML bundles" by default

** New Feature
    * [KARAF-1469] - User definition of excluded config properties
    * [KARAF-3447] - Add cellar-kubernetes feature

                    Apache Karaf Cellar 3.0.0
                    =========================

  Overview
  --------

 Apache Karaf Cellar 3.0.0 is a major new release of Cellar designed to work with Karaf 3.0.x versions.
 It includes a lot of new features and bug fixes.

  Changelog
  ---------

** Bug
    * [KARAF-652] - Deadlock inside HazelcastServiceFactory unit test.
    * [KARAF-669] - Dependency artifacts should be available on the Maven central repo
    * [KARAF-674] - Incorrect Karaf version used in Cellar
    * [KARAF-692] - Cellar HazelcastServiceFactoryTest failure
    * [KARAF-701] - Add Cellar source distribution
    * [KARAF-703] - Check and ship the legal files in Cellar artifacts
    * [KARAF-714] - Cellar features descriptor is not correct
    * [KARAF-715] - Cellar manual doesn't include the Karaf logo
    * [KARAF-716] - Cellar manual with broken links
    * [KARAF-724] - cluster:config-propset help is not correct
    * [KARAF-804] - Bad link in http://karaf.apache.org/manual/cellar/2.2.1/user-guide/index.html
    * [KARAF-830] - Cellar features fails to install when obr feature is installed
    * [KARAF-839] - NPE when pinging Cellar nodes which does not exist.
    * [KARAF-841] - Cellar shell commands are not available on Equinox
    * [KARAF-842] - Cellar's hazelcast instance cannot be reused outside cellar
    * [KARAF-859] - URLs deleted via features:removeurl are coming back on a karaf instance restart (when cellar is also being used)
    * [KARAF-865] - Fixes For Cellar 2.2.3 Trunk
    * [KARAF-943] - cluster:features-uninstall raise a NPE
    * [KARAF-1034] - Cellar feature does not always cleanly uninstall
    * [KARAF-1076] - Cellar group configuration is not properly read when it contains whitespaces
    * [KARAF-1083] - Cellar should blacklist pax logging from syncing
    * [KARAF-1147] - ClassCastException using cellar when update configuration fields.
    * [KARAF-1190] - Cellar does not replicate Managed Service Factory configurations correctly
    * [KARAF-1236] - The distributed node/group map is not currently updated when uninstalling Cellar
    * [KARAF-1237] - cluster:bundle-install command doesn't exist using Equinox framework
    * [KARAF-1239] - Cellar stopped producer still generates event
    * [KARAF-1297] - Switching off multicast discovery in Cellar does not work properly
    * [KARAF-1301] - Cellar ignores features sync flag
    * [KARAF-1306] - Cellar Group related changes are not persisted in config files
    * [KARAF-1308] - Cannot move a node which belongs to more than one group to another group using 'cluster:group-pick'
    * [KARAF-1309] - Cellar causes Karaf container to freeze if system got network interface changes between container restarts
    * [KARAF-1310] - CellarNodeMBean.getNodes() return only node on which it is executed instead all available nodes in cluster
    * [KARAF-1312] - log4j:ERROR Attempted to append to closed appender named [out]
    * [KARAF-1313] - cluster:group-create command has wrong message about absent parameter
    * [KARAF-1314] - cluster:feature-install command does not react on wrong feature name
    * [KARAF-1315] - Impossible to set or join group of remote cluster node
    * [KARAF-1316] - cluster:group-set and cluster:group-join commands are not rejecting incorrect node names
    * [KARAF-1317] - Unsuccessful remote cluster node ping
    * [KARAF-1319] - No warning or error is given when attempting to delete the "default" group
    * [KARAF-1320] - cluster:group-quit with no parameters leads to a timeout
    * [KARAF-1321] - Inconsistent behavior of cluster:group-quit
    * [KARAF-1322] - The Hazelcast group name is randomly set
    * [KARAF-1324] - Only one cellar group configuration updated new groups config for two karaf instance locally
    * [KARAF-1325] - Feature "cellar-obr", "cellar-cloud", "cellar-webconsole" cannot be synchronized from node1 to node2
    * [KARAF-1326] - Parameter count of "cluster:group-pick" is not working
    * [KARAF-1330] - "cluster:feature-uninstall" command only worked for current group but didn't work for other group
    * [KARAF-1332] - cluster:group-pick - <count> parameter is not handled correctly
    * [KARAF-1337] -  'cluster:config-list' command list  configuration PIDs two times whose name include "-"
    * [KARAF-1338] - cluster:config-proplist' command does not react on  group and PID parameter which are not existent
    * [KARAF-1339] - "cluster:feature-list" command didn't list any feature after karaf instance join a user defined group
    * [KARAF-1340] - The error info is not readable when cluster:feature-uninstall has incorrect argument.
    * [KARAF-1341] - The argument "node" of "cluster:group-set" command didn't work
    * [KARAF-1342] - Can not share new configuration in default group using standard karaf commands
    * [KARAF-1344] - 'cluster:config-list' command list the configution deleted by standard karaf 'config:delete' command
    * [KARAF-1345] - Feature still can be synchronized after stopping FeaturesEventHandler.
    * [KARAF-1348] - Can not disable config sync through stopping handler org.apache.karaf.cellar.config.ConfigurationEventHandler
    * [KARAF-1349] - Can not share new configuration between user defined groups which have common node
    * [KARAF-1352] - "Apache Karaf :: Cellar :: Hazelcast" remains in "RESOLVED" state
    * [KARAF-1353] - Exception is thrown after attempt to install cellar
    * [KARAF-1355] - Upgrade Cellar trunk to match Karaf trunk
    * [KARAF-1375] - The property "Version" in the output of cluster:feature-list default isn't flush left but flush right
    * [KARAF-1401] - Cellar handlers have to check the switch status and log a warn message when OFF
    * [KARAF-1404] - Cluster command 'cluster:config-proplist' only output edited properties
    * [KARAF-1405] - Can not update properties of configuraton  using cluster command 'cluster:config-propset'
    * [KARAF-1408] - These changes of the PID(org.apache.karaf.cellar.groups)  which in both blacklist inbound and blacklist outbound can be synchronized to other karaf instance
    * [KARAF-1409] - cluster:group-set fails with timeout
    * [KARAF-1412] - Output is not right when using cluster command 'cluster:handler-stop' without parameter
    * [KARAF-1413] - Parameters hander and node of 'cluster:handler-status' can not work
    * [KARAF-1419] - NPE in Cellar BundleEventHandler around start/stop/uninstall event
    * [KARAF-1423] - CellarBundleMBean is missing
    * [KARAF-1426] - Cluster event handlers have to check if the target group is a local
    * [KARAF-1428] - Cellar should blacklist org.apache.karaf.shell PID by default
    * [KARAF-1429] - Cellar commands/MBeans should check if the event is allowed outbound
    * [KARAF-1433] - CellarConfigMBean listConfig operation returns nothing
    * [KARAF-1434] - Cellar ConfigLocalListener should broadcast cluster event
    * [KARAF-1435] - Cellar bundle has to tweak the TCCL
    * [KARAF-1436] - CellarFeaturesMBean doesn't update the distributed map
    * [KARAF-1437] - cluster:group-create on an existing group raise a CNFE
    * [KARAF-1453] - The command "cluster:handler-stop" don't work
    * [KARAF-1461] - Fail to install cellar feature using equinox if cxf-sts feature is installed before
    * [KARAF-1463] - Reintroduce config properties filtering
    * [KARAF-1464] - Some bundles of cellar failed to startup from time to time
    * [KARAF-1465] - "cluster:group-set" command same to "cluster:group-join" command
    * [KARAF-1466] - Empty group doesn't appeared in group-list after restart of node.
    * [KARAF-1467] - groups configuration is not syncronized normally.
    * [KARAF-1476] - cellar broadcasts configuration changes to a group that has been left before ...
    * [KARAF-1477] - The "node(s)" parameter of command "cluster:group-join" doesn't work well
    * [KARAF-1480] - Cellar config should persist to cfg file
    * [KARAF-1484] - config:propdel is not propagated to other group members
    * [KARAF-1492] - Cellar should use listConfiguration instead of getConfiguration
    * [KARAF-1503] - Default group remove node showing Ajax error
    * [KARAF-1504] - Cellar command do not install bundle
    * [KARAF-1625] - Pax Web uses port 8080 rather than the configured value
    * [KARAF-1708] - Cellar 3.0.0 raises NPE on Karaf 3.0.0
    * [KARAF-1880] - Node fails to start after fresh karaf (with cellar) install
    * [KARAF-1971] - Bundle whitelist/blacklist are not correct by default
    * [KARAF-1974] - Bundle states are not correct
    * [KARAF-1975] - CellarBundleMBean is not able to display the list of bundles
    * [KARAF-1999] - Cellar LocalBundleListener raises ClassNotFoundException about BundleState
    * [KARAF-2032] - Some Cellar bundles doesn't start after a Karaf restart
    * [KARAF-2033] - Cellar local listeners have to check if sync is enabled
    * [KARAF-2038] - Node rejoin default group after a restart
    * [KARAF-2057] - NOTICE and LICENSE files are not correct
    * [KARAF-2096] - Upgrade to Pax Exam 2.6.0
    * [KARAF-2099] - Another instance where some bundles of cellar failed to startup from time to time
    * [KARAF-2106] - hazelcast-monitor project was apparently discontinued
    * [KARAF-2113] - Cellar doesn't install correctly
    * [KARAF-2126] - pax-mvn-url doesn't exist for 1.5.1-SNAPSHOT
    * [KARAF-2133] - Generated title contain unresolved placeholder
    * [KARAF-2141] - cluster:producer/handler/consumer should display the local node
    * [KARAF-2142] - cluster:producer-start/stop (and handler/consumer) change the status on all nodes
    * [KARAF-2202] - Cellar WebConsole import version range should be extended
    * [KARAF-2218] - Fix manual links on website
    * [KARAF-2251] - Cellar: features:install ignores incoming and outgoing blacklist
    * [KARAF-2252] - synchornized features do not care about bundle status
    * [KARAF-2253] - karaf becomes out of memory when executing cluster:feature-install war with group.bundle.sync=true.
    * [KARAF-2262] - cellar-cloud: The IP is not enough, sometimes the IP is hidden but a valid dns name is available
    * [KARAF-2263] - Cellar-Cloud: discover member removes member information which isn't re-generated
    * [KARAF-2268] - cellar-cloud: If other "Objects" are available at the bucket they sometimes are not "readable"
    * [KARAF-2271] - CellarFeaturesSynchronizer "pollutes" the Cellar startup
    * [KARAF-2272] - Bundle name is not populated in the Cellar bundles map
    * [KARAF-2274] - Cellar doesn't work with Felix framework
    * [KARAF-2277] - Cellar WebConsole doesn't install
    * [KARAF-2280] - cellar-config: The default group config should include org.ops4j.pax.web as blacklist for configuration
    * [KARAF-2281] - Cellar-Cloud: Exclude cloud configurations when installed
    * [KARAF-2286] - Cellar-Cloud: If the configured store contains unknown Blob this causes unpleasant exceptions
    * [KARAF-2287] - CellarFeaturesSynchronizer should check the local states before adding a repository
    * [KARAF-2317] - cluster:group-list still display a node which is down
    * [KARAF-2318] - Exclude service.factoryPid from Cellar sync
    * [KARAF-2340] - Huge CPU consumption with Felix framework
    * [KARAF-2343] - Installing Cellar 2.3.0 cellar-event crashes Karaf 2.3.1 after a few seconds...
    * [KARAF-2345] - Can't start second instance of Karaf 2.3.1 with Cellar 2.3.0
    * [KARAF-2477] - Configuration changes not persisted to file when cluster:config-propset is executed in a cluster of nodes
    * [KARAF-2478] - Producer status is ignored when config is updated on cluster
    * [KARAF-2480] - cellar-event throws a HazelcastSerializationException caused by a ClassNotFoundException when an event has an instance of a class stored in the event properties
    * [KARAF-2514] - Config sync issue in some cases
    * [KARAF-2550] - At first sync, cellar-config raises NPE
    * [KARAF-2591] - cluster group is not persistent anymore
    * [KARAF-2892] - Cluster event not dispatched due to GroupManager is unavailable
    * [KARAF-2955] - RepositoryEventHandler not handling events
    * [KARAF-3014] - Hazelcast tests fail on networks where multicast is disabled
    * [KARAF-3047] - Group manager service is not injected in the features/repository handlers
    * [KARAF-3050] - cellar-obr doesn't install
    * [KARAF-3057] - Handler name is the proxy class instead of the full qualified class name

** Dependency upgrade
    * [KARAF-862] - Upgrade to Hazelcast 1.9.4
    * [KARAF-1155] - Upgrade to Apache POM 10
    * [KARAF-1156] - Upgrade to Hazelcast 1.9.4.6
    * [KARAF-1170] - Upgrade to jclouds 1.3.1
    * [KARAF-1184] - Upgrade to JUnit 4.10
    * [KARAF-1205] - Upgrade to maven-bundle-plugin 2.3.7
    * [KARAF-1358] - Upgrade to Hazelcast 1.9.4.8
    * [KARAF-1361] - Upgrade to Hazelcast 2.0.2
    * [KARAF-1364] - Upgrade to slf4j 1.6.4
    * [KARAF-1371] - Upgrade to jclouds 1.4.0
    * [KARAF-1535] - Upgrade to Felix Utils 1.2.0
    * [KARAF-1720] - Upgrade to joda-time 2.1
    * [KARAF-1721] - Upgrade to Hazelcast 2.2
    * [KARAF-1745] - Upgrade to Felix WebConsole 4.0.0
    * [KARAF-1918] - Upgrade to OSGi Compendium 4.3.0
    * [KARAF-1948] - Upgrade to Apache POM 11
    * [KARAF-1977] - Upgrade to OSGi 4.3.1
    * [KARAF-1981] - Upgrade to Felix ConfigAdmin 1.6.0
    * [KARAF-2039] - Upgrade to hazelcast 2.4
    * [KARAF-2055] - Upgrade to Apache POM 12
    * [KARAF-2107] - Upgrade to slf4j 1.7.2
    * [KARAF-2210] - Upgrade to Hazelcast 2.5
    * [KARAF-2294] - Upgrade to jclouds 1.4.0
    * [KARAF-2337] - Upgrade to Apache POM 13
    * [KARAF-2353] - Upgrade to Hazelcast 2.6
    * [KARAF-3036] - Upgrade to Felix Utils 1.6.0
    * [KARAF-3038] - Upgrade to Felix WebConsole 4.2.0
    * [KARAF-3039] - Upgrade to JUnit 4.11
    * [KARAF-3040] - Upgrade to SLF4J 1.7.7
    * [KARAF-3062] - Upgrade to Hazelcast 3.2.3

** Improvement
    * [KARAF-721] - Add logging statements to Cellar where it makes sense.
    * [KARAF-723] - Create JMX Mbeans to report all Cellar events and provide details.
    * [KARAF-732] - Fixes to Cellar Arch Guide and Cellar User's Manual
    * [KARAF-761] - Edits to recent cloud.conf (Cloud discovery) commit
    * [KARAF-763] - Editorial fixes to Cellar documentation
    * [KARAF-777] - Extend Cellar support range for Karaf version
    * [KARAF-819] - Rename Karaf features name (and sub-projects features name) to use full qualified name
    * [KARAF-821] - Error in console when uninstalling cellar feature
    * [KARAF-825] - Cellar event handler registry should leverage blueprint reference listeners
    * [KARAF-838] - Simplify the way classloading works in Cellar
    * [KARAF-843] - Cellar's event transport factory should not cache producers and consumers
    * [KARAF-844] - Fix dynamic imports from Cellar Hazelcast bundle
    * [KARAF-851] - Upgrade Maven plugins in use
    * [KARAF-861] - Cellar should support cluster group for bundles
    * [KARAF-863] - Cellar commands naming consistency
    * [KARAF-877] - improvements to Cellar OBR support docs
    * [KARAF-949] - Upgrade Cellar to use Jclouds 1.1.1
    * [KARAF-1011] - Cellar Hazlecast should not use SpringDM
    * [KARAF-1012] - Upgrade cellar to use jclouds 1.2.1
    * [KARAF-1082] - Cellar group configuration is not properly distributed to the cluster
    * [KARAF-1171] - Consolidate Cellar shell commands naming
    * [KARAF-1194] - ping timeout is not correctly handled
    * [KARAF-1248] - Avoid to duplicate configuration between hazelcast.xml and cellar instance cfg
    * [KARAF-1249] - Provide more fine grained Cellar features
    * [KARAF-1294] - Cellar should provide cluster features repository commands
    * [KARAF-1383] - Fix warning messages during bundle build
    * [KARAF-1397] - Cellar command should check at least the cluster group existence
    * [KARAF-1399] - Use Cellar consistent behavior
    * [KARAF-1417] - cluster:feature-list should mimic the feature:list
    * [KARAF-1420] - cluster:bundle-* commands should look like bundle:* commands
    * [KARAF-1460] - CellarFeatureMBean should provide repository operations
    * [KARAF-1707] - CellarNodeMBean should inform which node is local
    * [KARAF-1982] - Cellar features should populate the bundles distributed map
    * [KARAF-1998] - Remove cellar sync property and check config dictionary
    * [KARAF-2001] - cluster:config-list could "filter" for one given PID
    * [KARAF-2004] - Add Cellar bundle selector support
    * [KARAF-2021] - Log message should not be warn
    * [KARAF-2031] - Cellar bundle should handle Bundle-Name and fallback to Bundle-SymbolicName
    * [KARAF-2041] - Cellar LocalBundleListener should ignore framework stop event
    * [KARAF-2042] - Cellar should blacklist org.apache.felix.fileinstall* PID by default
    * [KARAF-2112] - Cellar should use Aries JMX and blueprint
    * [KARAF-2127] - Create a KAR artifact for the Cellar features
    * [KARAF-2203] - hazelcast.xml file should be installed by the hazelcast feature
    * [KARAF-2204] - Cellar features repository should support install/uninstall all
    * [KARAF-2205] - Cellar cluster event handler should check the local status before performing an operation
    * [KARAF-2347] - Performance improvements for ConfigurationSupport class
    * [KARAF-2354] - Rename cellar-event feature to cellar-eventadmin
    * [KARAF-2498] - Change log level to DEBUG for Cellar blacklist/whitelist message
    * [KARAF-2648] - Change Bundle Configuration Keys
    * [KARAF-3051] - Use shell table and syntax/naming in Cellar commands

** New Feature
    * [KARAF-628] - Bundle replication
    * [KARAF-641] - Create shell commands for editing Cellar's instance configuration.
    * [KARAF-642] - Leverage Cellar instance configuration to allow Cloud discovery
    * [KARAF-823] - Add DOSGi support for Cellar
    * [KARAF-831] - Add a shell command that will batch move nodes from one cellar group to an other
    * [KARAF-837] - Add Samples for Cellar project
    * [KARAF-850] - Cellar should provide full access to hazelcast configuration
    * [KARAF-857] - Add OBR broadcast in Cellar
    * [KARAF-1026] - Cellar needs integration tests with pax-exam-karaf
    * [KARAF-1081] - Cellar should provide a Hazelcast merge policy.
    * [KARAF-1084] - Provide a cellar sample that demostrates combining cellar with camel hazelcast
    * [KARAF-1176] - Support for OSGi event distribution in Karaf Cellar
    * [KARAF-1403] - Add cluster:config-propappend command
    * [KARAF-1414] - Add persistence for handler/producer/consumer status
    * [KARAF-1424] - Add CellarOBRMBean
    * [KARAF-1726] - Support norefresh and noclean options in cluster:feature-install and ClusterFeatureMBean
    * [KARAF-2023] - Provide cluster:sync commands and MBeans

** Task
    * [KARAF-649] - Use maven-enforcer-plugin in cellar
    * [KARAF-801] - Update Cellar NOTICE file to mention jclouds
    * [KARAF-887] - Refer PrinceXML website in the manual

** Test
    * [KARAF-2111] - Cellar should use karaf-pax-exam
    * [KARAF-2349] - Patch to add debugging capability for the main test karaf container when building itests
