Author: jbonofre
Date: Thu Jul 28 08:14:25 2011
New Revision: 1151756
URL: http://svn.apache.org/viewvc?rev=1151756&view=rev
Log:
[KARAF-723] Add new MBeans in Karaf Cellar.
Added:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarConfigMBean.java
- copied, changed from r1151409,
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarFeaturesMBean.java
- copied, changed from r1151409,
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarGroupMBean.java
- copied, changed from r1151409,
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxFeature.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxGroup.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarConfigMBeanImpl.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarGroupMBeanImpl.java
Modified:
karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/ListCommand.java
karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/PropListCommand.java
karaf/cellar/trunk/management/pom.xml
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxNode.java
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarNodeMBeanImpl.java
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
Modified:
karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/ListCommand.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/ListCommand.java?rev=1151756&r1=1151755&r2=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/ListCommand.java
(original)
+++
karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/ListCommand.java
Thu Jul 28 08:14:25 2011
@@ -49,7 +49,6 @@ public class ListCommand extends ConfigC
} else System.err.println("No PIDs found for group:" + groupName);
} finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
-
}
return null;
}
Modified:
karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/PropListCommand.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/PropListCommand.java?rev=1151756&r1=1151755&r2=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/PropListCommand.java
(original)
+++
karaf/cellar/trunk/config/src/main/java/org/apache/karaf/cellar/config/shell/PropListCommand.java
Thu Jul 28 08:14:25 2011
@@ -56,7 +56,6 @@ public class PropListCommand extends Cel
} else System.err.print("No PIDs found for group:" + groupName);
} finally {
Thread.currentThread().setContextClassLoader(originalClassLoader);
-
}
return null;
}
Modified: karaf/cellar/trunk/management/pom.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/pom.xml?rev=1151756&r1=1151755&r2=1151756&view=diff
==============================================================================
--- karaf/cellar/trunk/management/pom.xml (original)
+++ karaf/cellar/trunk/management/pom.xml Thu Jul 28 08:14:25 2011
@@ -42,9 +42,11 @@
javax.management,
javax.management.loading,
org.apache.karaf.management*;version="[2,4)",
+ org.apache.karaf.features*;version="[2,4)",
org.apache.karaf.cellar*;version="${project.version}",
org.apache.karaf.cellar.config*;version="${project.version}",
org.apache.karaf.cellar.core*;version="${project.version}",
+ org.apache.karaf.cellar.features*;version="${project.version}",
org.apache.karaf.cellar.utils*;version="${project.version}",
*
</osgi.import>
@@ -58,8 +60,20 @@
<!-- Karaf Cellar dependencies -->
<dependency>
<groupId>org.apache.karaf.cellar</groupId>
+ <artifactId>org.apache.karaf.cellar.config</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.karaf.cellar</groupId>
<artifactId>org.apache.karaf.cellar.core</artifactId>
</dependency>
+ <dependency>
+ <groupId>org.apache.karaf.cellar</groupId>
+ <artifactId>org.apache.karaf.cellar.features</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.karaf.cellar</groupId>
+ <artifactId>org.apache.karaf.cellar.utils</artifactId>
+ </dependency>
</dependencies>
</project>
\ No newline at end of file
Copied:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarConfigMBean.java
(from r1151409,
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java)
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarConfigMBean.java?p2=karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarConfigMBean.java&p1=karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java&r1=1151409&r2=1151756&rev=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
(original)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarConfigMBean.java
Thu Jul 28 08:14:25 2011
@@ -13,22 +13,16 @@
*/
package org.apache.karaf.cellar.management;
-import javax.management.openmbean.TabularData;
+import java.util.Properties;
+import java.util.Set;
/**
- * Cellar Node MBean to manipulate Cellar cluster nodes.
+ * Config interface describing the operations and attributes available on a
Cellar configuration.
*/
-public interface CellarNodeMBean {
+public interface CellarConfigMBean {
- String NODE_NAME = "Name";
- String NODE_IS_LOCAL = "Is Local";
-
- String[] NODE = { NODE_NAME, NODE_IS_LOCAL };
-
- // Operations
- int pingNode(String name) throws Exception;
-
- // Attributes
- TabularData getNodes() throws Exception;
+ Set<String> list(String group) throws Exception;
+ Properties listProperties(String group, String pid) throws Exception;
+ void setProperty(String group, String pid, String key, String value)
throws Exception;
}
Copied:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarFeaturesMBean.java
(from r1151409,
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java)
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarFeaturesMBean.java?p2=karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarFeaturesMBean.java&p1=karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java&r1=1151409&r2=1151756&rev=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
(original)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarFeaturesMBean.java
Thu Jul 28 08:14:25 2011
@@ -16,19 +16,20 @@ package org.apache.karaf.cellar.manageme
import javax.management.openmbean.TabularData;
/**
- * Cellar Node MBean to manipulate Cellar cluster nodes.
+ * MBean interface describing the operations and attributes on a Cellar
feature.
*/
-public interface CellarNodeMBean {
+public interface CellarFeaturesMBean {
- String NODE_NAME = "Name";
- String NODE_IS_LOCAL = "Is Local";
-
- String[] NODE = { NODE_NAME, NODE_IS_LOCAL };
-
- // Operations
- int pingNode(String name) throws Exception;
-
- // Attributes
- TabularData getNodes() throws Exception;
+ void install(String group, String name) throws Exception;
+ void install(String group, String name, String version) throws Exception;
+ void uninstall(String group, String name) throws Exception;
+ void uninstall(String group, String name, String version) throws Exception;
+
+ TabularData listFeatures(String group) throws Exception;
+
+ String FEATURE_NAME = "Name";
+ String FEATURE_VERSION = "Version";
+ String FEATURE_INSTALLED = "Installed";
+ String[] FEATURE = { FEATURE_NAME, FEATURE_VERSION, FEATURE_INSTALLED };
}
Copied:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarGroupMBean.java
(from r1151409,
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java)
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarGroupMBean.java?p2=karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarGroupMBean.java&p1=karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java&r1=1151409&r2=1151756&rev=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
(original)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarGroupMBean.java
Thu Jul 28 08:14:25 2011
@@ -16,19 +16,22 @@ package org.apache.karaf.cellar.manageme
import javax.management.openmbean.TabularData;
/**
- * Cellar Node MBean to manipulate Cellar cluster nodes.
+ * Cellar Group MBean to manipule Cellar cluster group.
*/
-public interface CellarNodeMBean {
+public interface CellarGroupMBean {
- String NODE_NAME = "Name";
- String NODE_IS_LOCAL = "Is Local";
+ String GROUP_NAME = "Name";
+ String GROUP_MEMBERS = "Members";
- String[] NODE = { NODE_NAME, NODE_IS_LOCAL };
+ String[] GROUP = { GROUP_NAME,GROUP_MEMBERS };
// Operations
- int pingNode(String name) throws Exception;
+ void create(String name) throws Exception;
+ void delete(String name) throws Exception;
+ void join(String name, String nodeId) throws Exception;
+ void quit(String name, String nodeId) throws Exception;
// Attributes
- TabularData getNodes() throws Exception;
+ TabularData getGroups() throws Exception;
}
Modified:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java?rev=1151756&r1=1151755&r2=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
(original)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
Thu Jul 28 08:14:25 2011
@@ -20,13 +20,15 @@ import javax.management.openmbean.Tabula
*/
public interface CellarNodeMBean {
- String NODE_NAME = "Name";
+ String NODE_ID = "ID";
+ String NODE_HOST = "Host";
+ String NODE_PORT = "Port";
String NODE_IS_LOCAL = "Is Local";
- String[] NODE = { NODE_NAME, NODE_IS_LOCAL };
+ String[] NODE = { NODE_ID, NODE_HOST, NODE_PORT, NODE_IS_LOCAL };
// Operations
- int pingNode(String name) throws Exception;
+ long pingNode(String nodeId) throws Exception;
// Attributes
TabularData getNodes() throws Exception;
Added:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxFeature.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxFeature.java?rev=1151756&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxFeature.java
(added)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxFeature.java
Thu Jul 28 08:14:25 2011
@@ -0,0 +1,101 @@
+/*
+ * Licensed 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.
+ */
+package org.apache.karaf.cellar.management.codec;
+
+import org.apache.karaf.cellar.features.FeatureInfo;
+import org.apache.karaf.cellar.management.CellarFeaturesMBean;
+
+import javax.management.openmbean.*;
+import java.util.Collection;
+import java.util.List;
+
+/**
+ * JMX representation of a feature.
+ */
+public class JmxFeature {
+
+ static final CompositeType FEATURE;
+ static final TabularType FEATURE_TABLE;
+
+ static {
+ FEATURE = createFeatureType();
+ FEATURE_TABLE = createFeatureTableType();
+ }
+
+ private final CompositeData data;
+
+ public JmxFeature(FeatureInfo feature, boolean installed) {
+ try {
+ String[] itemNames = CellarFeaturesMBean.FEATURE;
+ Object[] itemValues = new Object[itemNames.length];
+ itemValues[0] = feature.getName();
+ itemValues[1] = feature.getVersion();
+ itemValues[2] = installed;
+ data = new CompositeDataSupport(FEATURE, itemNames, itemValues);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Cannot form feature open data",
e);
+ }
+ }
+
+ public CompositeData asCompositeData() {
+ return data;
+ }
+
+ public static TabularData tableFrom(Collection<JmxFeature> features) {
+ TabularDataSupport table = new TabularDataSupport(FEATURE_TABLE);
+ for (JmxFeature feature : features) {
+ table.put(feature.asCompositeData());
+ }
+ return table;
+ }
+
+ private static CompositeType createFeatureType() {
+ try {
+ String description = "Description of a Karaf features managed into
Cellar cluster";
+ String[] itemNames = CellarFeaturesMBean.FEATURE;
+ OpenType[] itemTypes = new OpenType[itemNames.length];
+ String[] itemDescriptions = new String[itemNames.length];
+
+ itemTypes[0] = SimpleType.STRING;
+ itemDescriptions[0] = "The name of the feature";
+
+ itemTypes[1] = SimpleType.STRING;
+ itemDescriptions[1] = "The version of the feature";
+
+ itemTypes[2] = SimpleType.BOOLEAN;
+ itemDescriptions[2] = "Whether a feature is installed or not";
+
+ return new CompositeType("Feature", description, itemNames,
itemDescriptions, itemTypes);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Unable to build feature type", e);
+ }
+ }
+
+ private static TabularType createFeatureTableType() {
+ try {
+ return new TabularType("Features", "Table of all Karaf Cellar
features", FEATURE, new String[]{CellarFeaturesMBean.FEATURE_NAME});
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Unable to build feature table
type", e);
+ }
+ }
+
+ public static TabularData tableFrom(List<JmxFeature> features) {
+ TabularDataSupport table = new TabularDataSupport(FEATURE_TABLE);
+ for (JmxFeature feature : features) {
+ table.put(feature.asCompositeData());
+ }
+ return table;
+ }
+
+}
Added:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxGroup.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxGroup.java?rev=1151756&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxGroup.java
(added)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxGroup.java
Thu Jul 28 08:14:25 2011
@@ -0,0 +1,94 @@
+/*
+ * Licensed 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.
+ */
+package org.apache.karaf.cellar.management.codec;
+
+import org.apache.karaf.cellar.core.Group;
+import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.management.CellarGroupMBean;
+
+import javax.management.openmbean.*;
+import java.util.List;
+
+/**
+ * JMX representation of a Cellar cluster group.
+ */
+public class JmxGroup {
+
+ static final CompositeType GROUP;
+ static final TabularType GROUP_TABLE;
+
+ static {
+ GROUP = createGroupType();
+ GROUP_TABLE = createGroupTableType();
+ }
+
+ private final CompositeDataSupport data;
+
+ private CompositeData asCompositeData() {
+ return data;
+ }
+
+ public JmxGroup(Group group) {
+ try {
+ String[] itemNames = CellarGroupMBean.GROUP;
+ Object[] itemValues = new Object[itemNames.length];
+ itemValues[0] = group.getName();
+ StringBuffer buffer = new StringBuffer();
+ for (Node node : group.getMembers()) {
+ buffer.append(node.getId());
+ buffer.append(" ");
+ }
+ itemValues[1] = buffer.toString();
+ data = new CompositeDataSupport(GROUP, itemNames, itemValues);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Cannot create group open data",
e);
+ }
+ }
+
+ private static CompositeType createGroupType() {
+ try {
+ String desc = "This type describes Karaf Cellar groups";
+ String[] itemNames = CellarGroupMBean.GROUP;
+ OpenType[] itemTypes = new OpenType[itemNames.length];
+ String[] descriptions = new String[itemNames.length];
+
+ itemTypes[0] = SimpleType.STRING;
+ descriptions[0] = "The name of the Cellar group";
+
+ itemTypes[1] = SimpleType.STRING;
+ descriptions[1] = "The members of the Cellar group";
+
+ return new CompositeType("Group", desc, itemNames, descriptions,
itemTypes);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Unable to build group", e);
+ }
+ }
+
+ private static TabularType createGroupTableType() {
+ try {
+ return new TabularType("Groups", "Table of all Karaf Cellar
groups", GROUP, new String[] { CellarGroupMBean.GROUP_NAME });
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Unable to build group table
type", e);
+ }
+ }
+
+ public static TabularData tableFrom(List<JmxGroup> groups) {
+ TabularDataSupport table = new TabularDataSupport(GROUP_TABLE);
+ for (JmxGroup group : groups) {
+ table.put(group.asCompositeData());
+ }
+ return table;
+ }
+
+}
Modified:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxNode.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxNode.java?rev=1151756&r1=1151755&r2=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxNode.java
(original)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxNode.java
Thu Jul 28 08:14:25 2011
@@ -18,6 +18,7 @@ import org.apache.karaf.cellar.core.Node
import org.apache.karaf.cellar.management.CellarNodeMBean;
import javax.management.openmbean.*;
+import javax.management.openmbean.SimpleType;
import java.util.List;
/**
@@ -44,14 +45,16 @@ public class JmxNode {
String[] itemNames = CellarNodeMBean.NODE;
Object[] itemValues = new Object[itemNames.length];
itemValues[0] = node.getId();
+ itemValues[1] = node.getHost();
+ itemValues[2] = node.getPort();
if (node.getHost().equals(clusterManager.getNode())) {
- itemValues[1] = true;
+ itemValues[3] = true;
} else {
- itemValues[1] = false;
+ itemValues[3] = false;
}
data = new CompositeDataSupport(NODE, itemNames, itemValues);
} catch (OpenDataException e) {
- throw new IllegalStateException("Cannot create instance open
data", e);
+ throw new IllegalStateException("Cannot create node open data", e);
}
}
@@ -63,22 +66,28 @@ public class JmxNode {
String[] descriptions = new String[itemNames.length];
itemTypes[0] = SimpleType.STRING;
- descriptions[0] = "The name of the Cellar node";
+ descriptions[0] = "The ID of the Cellar node";
- itemTypes[1] = SimpleType.BOOLEAN;
- descriptions[1] = "Whether the Cellar node is the local one or
not";
+ itemTypes[1] = SimpleType.STRING;
+ descriptions[1] = "The hostname of the Cellar node";
+
+ itemTypes[2] = SimpleType.INTEGER;
+ descriptions[2] = "The port number of the Cellar node";
+
+ itemTypes[3] = SimpleType.BOOLEAN;
+ descriptions[3] = "Whether the Cellar node is the local one or
not";
return new CompositeType("Node", desc, itemNames, descriptions,
itemTypes);
} catch (OpenDataException e) {
- throw new IllegalStateException("Unable to build instance type",
e);
+ throw new IllegalStateException("Unable to build node type", e);
}
}
private static TabularType createNodeTableType() {
try {
- return new TabularType("Nodes", "Table of all Karaf Cellar nodes",
NODE, new String[] {CellarNodeMBean.NODE_NAME});
+ return new TabularType("Nodes", "Table of all Karaf Cellar nodes",
NODE, new String[] {CellarNodeMBean.NODE_ID});
} catch (OpenDataException e) {
- throw new IllegalStateException("Unable to build node table tyep",
e);
+ throw new IllegalStateException("Unable to build node table type",
e);
}
}
Added:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarConfigMBeanImpl.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarConfigMBeanImpl.java?rev=1151756&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarConfigMBeanImpl.java
(added)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarConfigMBeanImpl.java
Thu Jul 28 08:14:25 2011
@@ -0,0 +1,64 @@
+/*
+ * Licensed 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.
+ */
+package org.apache.karaf.cellar.management.internal;
+
+import org.apache.karaf.cellar.config.Constants;
+import org.apache.karaf.cellar.core.ClusterManager;
+import org.apache.karaf.cellar.core.Configurations;
+import org.apache.karaf.cellar.management.CellarConfigMBean;
+
+import javax.management.NotCompliantMBeanException;
+import javax.management.StandardMBean;
+import java.util.*;
+
+/**
+ * Implementation of the Cellar Config MBean allowing to manipulate Cellar
config admin layer.
+ */
+public class CellarConfigMBeanImpl extends StandardMBean implements
CellarConfigMBean {
+
+ private ClusterManager clusterManager;
+
+ public ClusterManager getClusterManager() {
+ return this.clusterManager;
+ }
+
+ public void setClusterManager(ClusterManager clusterManager) {
+ this.clusterManager = clusterManager;
+ }
+
+ public CellarConfigMBeanImpl() throws NotCompliantMBeanException {
+ super(CellarConfigMBean.class);
+ }
+
+ public Set<String> list(String group) throws Exception {
+ Map<String, Properties> configurationTable =
clusterManager.getMap(Constants.CONFIGURATION_MAP + Configurations.SEPARATOR +
group);
+ return configurationTable.keySet();
+ }
+
+ public Properties listProperties(String group, String pid) throws
Exception {
+ Map<String, Properties> configurationTable =
clusterManager.getMap(Constants.CONFIGURATION_MAP + Configurations.SEPARATOR +
group);
+ return configurationTable.get(pid);
+ }
+
+ public void setProperty(String group, String pid, String key, String
value) throws Exception {
+ Map<String, Properties> configurationTable =
clusterManager.getMap(Constants.CONFIGURATION_MAP + Configurations.SEPARATOR +
group);
+ Properties properties = configurationTable.get(pid);
+ if (properties == null) {
+ properties = new Properties();
+ }
+ properties.put(key, value);
+ configurationTable.put(pid, properties);
+ }
+
+}
Added:
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=1151756&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java
(added)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarFeaturesMBeanImpl.java
Thu Jul 28 08:14:25 2011
@@ -0,0 +1,102 @@
+/*
+ * Licensed 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.
+ */
+package org.apache.karaf.cellar.management.internal;
+
+import org.apache.karaf.cellar.core.ClusterManager;
+import org.apache.karaf.cellar.core.Configurations;
+import org.apache.karaf.cellar.core.Group;
+import org.apache.karaf.cellar.core.GroupManager;
+import org.apache.karaf.cellar.core.event.EventProducer;
+import org.apache.karaf.cellar.features.Constants;
+import org.apache.karaf.cellar.features.FeatureInfo;
+import org.apache.karaf.cellar.features.RemoteFeaturesEvent;
+import org.apache.karaf.cellar.management.CellarFeaturesMBean;
+import org.apache.karaf.cellar.management.codec.JmxFeature;
+import org.apache.karaf.features.FeatureEvent;
+
+import javax.management.NotCompliantMBeanException;
+import javax.management.StandardMBean;
+import javax.management.openmbean.TabularData;
+import java.util.ArrayList;
+import java.util.Map;
+
+/**
+ * Implementation of the CellarFeaturesMBean to manipulate Cellar features.
+ */
+public class CellarFeaturesMBeanImpl extends StandardMBean implements
CellarFeaturesMBean {
+
+ private ClusterManager clusterManager;
+ private GroupManager groupManager;
+
+ public ClusterManager getClusterManager() {
+ return this.clusterManager;
+ }
+
+ public void setClusterManager(ClusterManager clusterManager) {
+ this.clusterManager = clusterManager;
+ }
+
+ public GroupManager getGroupManager() {
+ return this.groupManager;
+ }
+
+ public void setGroupManager(GroupManager groupManager) {
+ this.groupManager = groupManager;
+ }
+
+ public CellarFeaturesMBeanImpl() throws NotCompliantMBeanException {
+ super(CellarFeaturesMBean.class);
+ }
+
+ public void install(String groupName, String name, String version) throws
Exception {
+ Group group = groupManager.findGroupByName(groupName);
+ EventProducer producer = clusterManager.getEventProducer(groupName);
+ RemoteFeaturesEvent event = new RemoteFeaturesEvent(name, version,
FeatureEvent.EventType.FeatureInstalled);
+ event.setForce(true);
+ event.setSourceGroup(group);
+ producer.produce(event);
+ }
+
+ public void install(String groupName, String name) throws Exception {
+ this.install(groupName, name, null);
+ }
+
+ public void uninstall(String groupName, String name, String version)
throws Exception {
+ Group group = groupManager.findGroupByName(groupName);
+ EventProducer producer = clusterManager.getEventProducer(groupName);
+ RemoteFeaturesEvent event = new RemoteFeaturesEvent(name, version,
FeatureEvent.EventType.FeatureUninstalled);
+ event.setForce(true);
+ event.setSourceGroup(group);
+ producer.produce(event);
+ }
+
+ public void uninstall(String groupName, String name) throws Exception {
+ this.uninstall(groupName, name, null);
+ }
+
+ public TabularData listFeatures(String group) throws Exception {
+ Map<FeatureInfo, Boolean> allFeatures =
clusterManager.getMap(Constants.FEATURES + Configurations.SEPARATOR + group);
+ ArrayList<JmxFeature> features = new ArrayList<JmxFeature>();
+ if (allFeatures != null && !allFeatures.isEmpty()) {
+ for (FeatureInfo feature : allFeatures.keySet()) {
+ boolean installed = allFeatures.get(feature);
+ JmxFeature jmxFeature = new JmxFeature(feature, installed);
+ features.add(jmxFeature);
+ }
+ }
+ TabularData table = JmxFeature.tableFrom(features);
+ return table;
+ }
+
+}
Added:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarGroupMBeanImpl.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarGroupMBeanImpl.java?rev=1151756&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarGroupMBeanImpl.java
(added)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarGroupMBeanImpl.java
Thu Jul 28 08:14:25 2011
@@ -0,0 +1,131 @@
+/*
+ * Licensed 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.
+ */
+package org.apache.karaf.cellar.management.internal;
+
+import org.apache.karaf.cellar.core.ClusterManager;
+import org.apache.karaf.cellar.core.Group;
+import org.apache.karaf.cellar.core.GroupManager;
+import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.core.command.ExecutionContext;
+import org.apache.karaf.cellar.core.control.ManageGroupAction;
+import org.apache.karaf.cellar.core.control.ManageGroupCommand;
+import org.apache.karaf.cellar.core.control.ManageGroupResult;
+import org.apache.karaf.cellar.management.CellarGroupMBean;
+import org.apache.karaf.cellar.management.codec.JmxGroup;
+
+import javax.management.NotCompliantMBeanException;
+import javax.management.StandardMBean;
+import javax.management.openmbean.TabularData;
+import java.util.*;
+
+/**
+ * Implementation of the Cellar Group MBean;
+ */
+public class CellarGroupMBeanImpl extends StandardMBean implements
CellarGroupMBean {
+
+ private ClusterManager clusterManager;
+ private ExecutionContext executionContext;
+ private GroupManager groupManager;
+
+ public ClusterManager getClusterManager() {
+ return this.clusterManager;
+ }
+
+ public void setClusterManager(ClusterManager clusterManager) {
+ this.clusterManager = clusterManager;
+ }
+
+ public ExecutionContext getExecutionContext() {
+ return this.executionContext;
+ }
+
+ public void setExecutionContext(ExecutionContext executionContext) {
+ this.executionContext = executionContext;
+ }
+
+ public GroupManager getGroupManager() {
+ return this.groupManager;
+ }
+
+ public void setGroupManager(GroupManager groupManager) {
+ this.groupManager = groupManager;
+ }
+
+ public CellarGroupMBeanImpl() throws NotCompliantMBeanException {
+ super(CellarGroupMBean.class);
+ }
+
+ public void create(String name) throws Exception {
+ groupManager.createGroup(name);
+ }
+
+ public void delete(String name) throws Exception {
+ ClassLoader originalClassLoader =
Thread.currentThread().getContextClassLoader();
+ try {
+
Thread.currentThread().setContextClassLoader(getClass().getClassLoader());
+ Group g = groupManager.findGroupByName(name);
+ List<String> nodes = new LinkedList<String>();
+
+ if (g.getMembers() != null && !g.getMembers().isEmpty()) {
+ for (Node n : g.getMembers()) {
+ nodes.add(n.getId());
+ }
+ ManageGroupCommand command = new
ManageGroupCommand(clusterManager.generateId());
+ command.setAction(ManageGroupAction.QUIT);
+ command.setGroupName(name);
+ Set<Node> recipientList = clusterManager.listNodes(nodes);
+ command.setDestination(recipientList);
+ executionContext.execute(command);
+ }
+
+ groupManager.deleteGroup(name);
+ } finally {
+ Thread.currentThread().setContextClassLoader(originalClassLoader);
+ }
+ }
+
+ public void join(String group, String nodeId) throws Exception {
+ List<String> nodes = new ArrayList<String>();
+ nodes.add(nodeId);
+ ManageGroupCommand command = new
ManageGroupCommand(clusterManager.generateId());
+ command.setAction(ManageGroupAction.JOIN);
+ command.setGroupName(group);
+ Set<Node> recipientList = clusterManager.listNodes(nodes);
+ command.setDestination(recipientList);
+ executionContext.execute(command);
+ }
+
+ public void quit(String group, String nodeId) throws Exception {
+ List<String> nodes = new ArrayList<String>();
+ nodes.add(nodeId);
+ ManageGroupCommand command = new
ManageGroupCommand(clusterManager.generateId());
+ command.setAction(ManageGroupAction.QUIT);
+ command.setGroupName(group);
+ Set<Node> recipientList = clusterManager.listNodes(nodes);
+ command.setDestination(recipientList);
+ executionContext.execute(command);
+ }
+
+ public TabularData getGroups() throws Exception {
+ Set<Group> allGroups = groupManager.listAllGroups();
+ ArrayList<JmxGroup> groups = new ArrayList<JmxGroup>();
+ for (Group group : allGroups) {
+ JmxGroup jmxGroup = new JmxGroup(group);
+ groups.add(jmxGroup);
+ }
+ TabularData table = JmxGroup.tableFrom(groups);
+ return table;
+ }
+
+}
Modified:
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarNodeMBeanImpl.java
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarNodeMBeanImpl.java?rev=1151756&r1=1151755&r2=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarNodeMBeanImpl.java
(original)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarNodeMBeanImpl.java
Thu Jul 28 08:14:25 2011
@@ -15,15 +15,15 @@ package org.apache.karaf.cellar.manageme
import org.apache.karaf.cellar.core.ClusterManager;
import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.core.command.ExecutionContext;
import org.apache.karaf.cellar.management.CellarNodeMBean;
import org.apache.karaf.cellar.management.codec.JmxNode;
+import org.apache.karaf.cellar.utils.ping.Ping;
import javax.management.NotCompliantMBeanException;
import javax.management.StandardMBean;
import javax.management.openmbean.TabularData;
-import java.util.ArrayList;
-import java.util.List;
-import java.util.Set;
+import java.util.*;
/**
* Implementation of the Cellar Node MBean to manipulate Cellar cluster nodes.
@@ -31,6 +31,7 @@ import java.util.Set;
public class CellarNodeMBeanImpl extends StandardMBean implements
CellarNodeMBean {
private ClusterManager clusterManager;
+ private ExecutionContext executionContext;
public CellarNodeMBeanImpl() throws NotCompliantMBeanException {
super(CellarNodeMBean.class);
@@ -44,9 +45,22 @@ public class CellarNodeMBeanImpl extends
this.clusterManager = clusterManager;
}
- public int pingNode(String name) throws Exception {
+ public ExecutionContext getExecutionContext() {
+ return this.executionContext;
+ }
+
+ public void setExecutionContext(ExecutionContext executionContext) {
+ this.executionContext = executionContext;
+ }
- return 0;
+ public long pingNode(String nodeId) throws Exception {
+ Node node = clusterManager.findNodeById(nodeId);
+ Long start = System.currentTimeMillis();
+ Ping ping = new Ping(clusterManager.generateId());
+ ping.setDestination(new HashSet(Arrays.asList(node)));
+ executionContext.execute(ping);
+ Long stop = System.currentTimeMillis();
+ return (stop - start);
}
public TabularData getNodes() throws Exception {
Modified:
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml?rev=1151756&r1=1151755&r2=1151756&view=diff
==============================================================================
---
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
(original)
+++
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
Thu Jul 28 08:14:25 2011
@@ -26,12 +26,31 @@
<bean id="cellarNodeMBean"
class="org.apache.karaf.cellar.management.internal.CellarNodeMBeanImpl">
<property name="clusterManager" ref="clusterManager"/>
+ <property name="executionContext" ref="executionContext"/>
+ </bean>
+
+ <bean id="cellarConfigMBean"
class="org.apache.karaf.cellar.management.internal.CellarConfigMBeanImpl">
+ <property name="clusterManager" ref="clusterManager"/>
+ </bean>
+
+ <bean id="cellarFeaturesMBean"
class="org.apache.karaf.cellar.management.internal.CellarFeaturesMBeanImpl">
+ <property name="clusterManager" ref="clusterManager"/>
+ <property name="groupManager" ref="groupManager"/>
+ </bean>
+
+ <bean id="cellarGroupMBean"
class="org.apache.karaf.cellar.management.internal.CellarGroupMBeanImpl">
+ <property name="clusterManager" ref="clusterManager"/>
+ <property name="executionContext" ref="executionContext"/>
+ <property name="groupManager" ref="groupManager"/>
</bean>
<bean id="mbeanRegister"
class="org.apache.karaf.management.MBeanRegistrer">
<property name="mbeans">
<map>
<entry
value="org.apache.karaf.cellar:type=node,name=${karaf.name}"
key-ref="cellarNodeMBean"/>
+ <entry
value="org.apache.karaf.cellar:type=config,name=${karaf.name}"
key-ref="cellarConfigMBean"/>
+ <entry
value="org.apache.karaf.cellar:type=features,name=${karaf.name}"
key-ref="cellarFeaturesMBean"/>
+ <entry
value="org.apache.karaf.cellar:type=group,name=${karaf.name}"
key-ref="cellarGroupMBean"/>
</map>
</property>
</bean>