Repository: karaf-cellar Updated Branches: refs/heads/cellar-2.3.x 2c4b692a7 -> 85703afc4
[KARAF-3614] Features synchronizer broadcasts cluster event on push Project: http://git-wip-us.apache.org/repos/asf/karaf-cellar/repo Commit: http://git-wip-us.apache.org/repos/asf/karaf-cellar/commit/85703afc Tree: http://git-wip-us.apache.org/repos/asf/karaf-cellar/tree/85703afc Diff: http://git-wip-us.apache.org/repos/asf/karaf-cellar/diff/85703afc Branch: refs/heads/cellar-2.3.x Commit: 85703afc4543f2a7aec212e91b24846082951f5f Parents: 2c4b692 Author: Jean-Baptiste Onofré <[email protected]> Authored: Sat Mar 14 18:31:01 2015 +0100 Committer: Jean-Baptiste Onofré <[email protected]> Committed: Sat Mar 14 18:31:01 2015 +0100 ---------------------------------------------------------------------- .../cellar/features/FeaturesSynchronizer.java | 22 +++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/karaf-cellar/blob/85703afc/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java ---------------------------------------------------------------------- diff --git a/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java b/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java index 128dec2..afd0b59 100644 --- a/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java +++ b/features/src/main/java/org/apache/karaf/cellar/features/FeaturesSynchronizer.java @@ -16,8 +16,10 @@ package org.apache.karaf.cellar.features; import org.apache.karaf.cellar.core.Configurations; import org.apache.karaf.cellar.core.Group; import org.apache.karaf.cellar.core.Synchronizer; +import org.apache.karaf.cellar.core.event.EventProducer; import org.apache.karaf.cellar.core.event.EventType; import org.apache.karaf.features.Feature; +import org.apache.karaf.features.FeatureEvent; import org.apache.karaf.features.Repository; import org.osgi.service.cm.Configuration; import org.slf4j.Logger; @@ -38,6 +40,8 @@ public class FeaturesSynchronizer extends FeaturesSupport implements Synchronize private static final transient Logger LOGGER = LoggerFactory.getLogger(FeaturesSynchronizer.class); + private EventProducer eventProducer; + @Override public void init() { Set<Group> groups = groupManager.listLocalGroups(); @@ -185,16 +189,24 @@ public class FeaturesSynchronizer extends FeaturesSupport implements Synchronize } } - // push the local features status to the cluster group if (featuresList != null && featuresList.length > 0) { for (Feature feature : featuresList) { if (isAllowed(group, Constants.CATEGORY, feature.getName(), EventType.OUTBOUND)) { + // push the local features status to the cluster group FeatureState clusterFeatureState = new FeatureState(); clusterFeatureState.setName(feature.getName()); clusterFeatureState.setVersion(feature.getVersion()); clusterFeatureState.setInstalled(featuresService.isInstalled(feature)); clusterFeatures.put(feature.getName() + "/" + feature.getVersion(), clusterFeatureState); LOGGER.debug("CELLAR FEATURES: pushing feature {} in cluster group {}", feature.getName(), group.getName()); + // broadcast the cluster event + ClusterFeaturesEvent event; + if (featuresService.isInstalled(feature)) { + event = new ClusterFeaturesEvent(feature.getName(), feature.getVersion(), FeatureEvent.EventType.FeatureInstalled); + } else { + event = new ClusterFeaturesEvent(feature.getName(), feature.getVersion(), FeatureEvent.EventType.FeatureUninstalled); + } + eventProducer.produce(event); } else { LOGGER.debug("CELLAR FEATURES: feature {} is marked BLOCKED OUTBOUND for cluster group {}", feature.getName(), group.getName()); } @@ -230,4 +242,12 @@ public class FeaturesSynchronizer extends FeaturesSupport implements Synchronize return "disabled"; } + public EventProducer getEventProducer() { + return eventProducer; + } + + public void setEventProducer(EventProducer eventProducer) { + this.eventProducer = eventProducer; + } + }
