You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@karaf.apache.org by jb...@apache.org on 2012/05/07 22:20:14 UTC

svn commit: r1335236 - /karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java

Author: jbonofre
Date: Mon May  7 20:20:14 2012
New Revision: 1335236

URL: http://svn.apache.org/viewvc?rev=1335236&view=rev
Log:
[KARAF-1436] CellarFeatureMBean now updates the distributed map

Modified:
    karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java

Modified: karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java
URL: http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java?rev=1335236&r1=1335235&r2=1335236&view=diff
==============================================================================
--- karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java (original)
+++ karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java Mon May  7 20:20:14 2012
@@ -80,8 +80,40 @@ public class CellarFeaturesMBeanImpl ext
             throw new IllegalStateException("Cluster event producer is OFF for this node");
         }
 
-        // TODO check if the feature exist on the group
-        // TODO update the distributed resource
+        ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
+            // get the features distributed map
+            Map<FeatureInfo, Boolean> distributedFeatures = clusterManager.getMap(Constants.FEATURES + Configurations.SEPARATOR + groupName);
+
+            // check if the feature exist
+            FeatureInfo feature = null;
+            for (FeatureInfo info : distributedFeatures.keySet()) {
+                if (version == null) {
+                    if (info.getName().equals(name)) {
+                        feature = info;
+                        break;
+                    }
+                } else {
+                    if (info.getName().equals(name) && info.getVersion().equals(version)) {
+                        feature = info;
+                        break;
+                    }
+                }
+            }
+
+            if (feature == null) {
+                if (version == null)
+                    throw new IllegalArgumentException("Feature " + name + " doesn't exist for cluster group " + groupName);
+                else throw new IllegalArgumentException("Feature " + name + "/" + version + " doesn't exist for cluster group " + groupName);
+            }
+
+            // update the distributed map
+            distributedFeatures.put(feature, true);
+        } finally {
+            Thread.currentThread().setContextClassLoader(originalClassLoader);
+        }
 
         // broadcast the cluster event
         RemoteFeaturesEvent event = new RemoteFeaturesEvent(name, version, FeatureEvent.EventType.FeatureInstalled);
@@ -105,8 +137,40 @@ public class CellarFeaturesMBeanImpl ext
             throw new IllegalStateException("Cluster event producer is OFF for this node");
         }
 
-        // TODO check if the feature exist on the group
-        // TODO update the distributed resource
+        ClassLoader originalClassLoader = Thread.currentThread().getContextClassLoader();
+        try {
+            Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+
+            // get the features distributed map
+            Map<FeatureInfo, Boolean> distributedFeatures = clusterManager.getMap(Constants.FEATURES + Configurations.SEPARATOR + groupName);
+
+            // check if the feature exist
+            FeatureInfo feature = null;
+            for (FeatureInfo info : distributedFeatures.keySet()) {
+                if (version == null) {
+                    if (info.getName().equals(name)) {
+                        feature = info;
+                        break;
+                    }
+                } else {
+                    if (info.getName().equals(name) && info.getVersion().equals(version)) {
+                        feature = info;
+                        break;
+                    }
+                }
+            }
+
+            if (feature == null) {
+                if (version == null)
+                    throw new IllegalArgumentException("Feature " + name + " doesn't exist for cluster group " + groupName);
+                else throw new IllegalArgumentException("Feature " + name + "/" + version + " doesn't exist for cluster group " + groupName);
+            }
+
+            // update the distributed map
+            distributedFeatures.put(feature, false);
+        } finally {
+            Thread.currentThread().setContextClassLoader(originalClassLoader);
+        }
 
         RemoteFeaturesEvent event = new RemoteFeaturesEvent(name, version, FeatureEvent.EventType.FeatureUninstalled);
         event.setSourceGroup(group);