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);