/*
 * 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.1.1
                    =========================
  Overview
  --------

 Apache Karaf Cellar 4.1.1 is maintenance release on 4.1.x series.
 This release brings an important bug fixes for cluster:features* commands and dependency updates.

  Changelog
  ---------
** Bug
    * [KARAF-5137] - Cellar Features needs to felix utils as private package

** Dependency upgrade
    * [KARAF-5302] - Upgrade to Hazelcast 3.8.4
    * [KARAF-5303] - Upgrade to Kubernetes Client 2.6.1
    * [KARAF-5346] - Upgrade to Hazelcast 3.8.5
    * [KARAF-5347] - Upgrade to Kubernetes Client 2.6.3

** Task
    * [KARAF-5148] - Replace use of org.json

                    Apache Karaf Cellar 4.1.0
                    =========================
  Overview
  --------

 Apache Karaf Cellar 4.1.0 is the first releaase on the Cellar 4.1.x series. This serie is fully compatible with 
 Karaf 4.1.x.
 This release brings important bug fixes and new features.

  Changelog
  ---------
** Bug
    * [KARAF-4878] - Cellar Hazelcast unresponsive when ETH Down
    * [KARAF-4908] - NullPointerException in FeaturesSynchronizer.getSyncPolicy
    * [KARAF-4909] - NullPointerException in BundleSynchronizer.getSyncPolicy
    * [KARAF-4911] - NullPointerException in ConfigurationSynchronize
    * [KARAF-4938] -  HTTP session replication broken because Hazelcast dependency
    * [KARAF-4941] - Node is not fully sync when joining a group
    * [KARAF-4986] - A condition that is always true.
    * [KARAF-5117] - cellar-etcd feature should install feign bundles

** Dependency upgrade
    * [KARAF-5097] - Upgrade to Hazelcast 3.8.1

** Improvement
    * [KARAF-4669] - Start level is ignored for bundles installed in cluster
    * [KARAF-4940] - Add a cluster:shutdown command

                    Apache Karaf Cellar 4.0.3
                    =========================
  Overview
  --------

 Apache Karaf Cellar 4.0.3 is a maintenance release on the Cellar 4.x serie including important bug fixes and new
 features (like the KAR file support and bundles/features update support).

  Changelog
  ---------
** Bug
    * [KARAF-4702] - BundleSynchronizer/ConfigurationSynchronizer do not check white/backlinks when syncing with cluster
    * [KARAF-4708] - Cellar: stopped bundle state (Resolved) is not pulled from cluster by ByndleSynchronizer
    * [KARAF-4722] - cluster:bundle-list shell command ignores the supplied ids argument
    * [KARAF-4729] - cluster:feature-repo-refresh never works
    * [KARAF-4759] - Unable to retrieve full list of features via jmx by calling cellar feature bean operation getFeatures

** Dependency upgrade
    * [KARAF-4754] - Upgrade to Hazelcast 3.7.2

** Improvement
    * [KARAF-4721] - Add support for clusterOnly and nodeOnly sync policies via shell command
    * [KARAF-4736] - Cluster Feature Install options parity

** New Feature
    * [KARAF-4747] - Add kar cluster support
    * [KARAF-4768] - Add bundle update support

                    Apache Karaf Cellar 4.0.2
                    =========================

  Overview
  --------

 Apache Karaf Cellar 4.0.2 is a maintenance release on the Cellar 4.x serie including important bug fixes.

  Changelog
  ---------
** Bug
    * [KARAF-4538] - Cellar bundle regex is way too "global" in command and MBean
    * [KARAF-4664] - Cellar can stop bundles whereas it should not
    * [KARAF-4668] - Inconsistent cluster status for a bundle which cannot be started
    * [KARAF-4670] - Race condition in the Activator.updated() of the org.apache.karaf.cellar.hazelcast
    * [KARAF-4671] - cluster:bundle-list does not show symbolic names
    * [KARAF-4678] - Cellar should provide service capability
    * [KARAF-4683] - ClassNotFoundException: org.apache.karaf.cellar.config.ClusterConfigurationEvent on startup
    * [KARAF-4694] - Downgrade to Hazelcast 3.6.2
    * [KARAF-4698] - Cellar handling of cluster:bundle-uninstall when one of the cluster nodes is offline
    * [KARAF-4699] - Check kubernetes POD label while discovering nodes
    * [KARAF-4702] - BundleSynchronizer/ConfigurationSynchronizer do not check white/backlinks when syncing with cluster

** Improvement
    * [KARAF-3869] - Use hazelcast bundle instead of hazelcast-all
    * [KARAF-4256] - Use conditions to install cellar features
    * [KARAF-4257] - Use req/cap in Cellar to be able to switch different implementation

** Task
    * [KARAF-4191] - Remove fabric8 karaf-features as it doesn't exists anymore


                    Apache Karaf Cellar 4.0.1
                    =========================

  Overview
  --------

 Apache Karaf Cellar 4.0.1 is a maintenance release on the Cellar 4.x serie including bug fixes and couple of new features.

  Changelog
  ---------
** Bug
    * [KARAF-4115] - Hard coded timeout values for Cellar shell commands
    * [KARAF-4144] - Hazelcast instance doesn't start with saxon transformer impl
    * [KARAF-4177] - Kubernetes managed service doesn't update the correct properties set
    * [KARAF-4259] - Cellar should deal with configuration type
    * [KARAF-4317] - NullPointerException when adding a feature repository to a cluster
    * [KARAF-4322] - feature:repo-remove / cluster:feature-repo-remove -u flag has no effect
    * [KARAF-4538] - Cellar bundle regex is way too "global" in command and MBean
    * [KARAF-4579] - Extend HTTP package import in Cellar HTTP to work with Karaf 4.1.x
    * [KARAF-4585] - CellarNodeMBean doesn't correctly identify the local node
    * [KARAF-4586] - Cellar discovery doesn't use the right property name
    * [KARAF-4601] - addRepository() in cellar feature mbean always throws null pointer exception
    * [KARAF-4602] - All Cellar modules should define the source group and node in the cluster event

** Dependency upgrade
    * [KARAF-4111] - Upgrade to Hazelcast 3.5.3
    * [KARAF-4112] - Upgrade to Jclouds 1.9.1
    * [KARAF-4143] - Upgrade to Easymock 3.4
    * [KARAF-4148] - Upgrade to Hazelcast 3.5.4
    * [KARAF-4163] - Upgrade Joda-time to version 2.9.1
    * [KARAF-4164] - Upgrade Felix Bundle Repository to version 2.0.6
    * [KARAF-4165] - Upgrade Felix Webconsole to version 4.2.14
    * [KARAF-4550] - Upgrade to Hazelcast 3.6.3
    * [KARAF-4618] - Upgrade to Hazelcast 3.6.4

** Improvement
    * [KARAF-1286] - Allow users to set node name
    * [KARAF-4179] - Avoid reverse DNS lookup when using literal IP address
    * [KARAF-4316] - Provide cluster:feature-repo-refresh command
    * [KARAF-4587] - Limit the classloader overhead in the CombinedClassLoader

** New Feature
    * [KARAF-2487] - Provide Cellar centralized log service
    * [KARAF-4236] - Cellar DNS nodes discovery
    * [KARAF-4244] - Cellar Etcd nodes discovery
    * [KARAF-4619] - Add CellarHttpMBean

                    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
