Author: jbonofre
Date: Wed Jul 27 09:49:59 2011
New Revision: 1151404
URL: http://svn.apache.org/viewvc?rev=1151404&view=rev
Log:
[KARAF-723] Start the JMX structure for Cellar MBean and JMX support.
Added:
karaf/cellar/trunk/management/
karaf/cellar/trunk/management/pom.xml
karaf/cellar/trunk/management/src/
karaf/cellar/trunk/management/src/main/
karaf/cellar/trunk/management/src/main/java/
karaf/cellar/trunk/management/src/main/java/org/
karaf/cellar/trunk/management/src/main/java/org/apache/
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/
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/
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/
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarNodeMBeanImpl.java
karaf/cellar/trunk/management/src/main/resources/
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
Modified:
karaf/cellar/trunk/assembly/src/main/resources/features.xml
karaf/cellar/trunk/pom.xml
Modified: karaf/cellar/trunk/assembly/src/main/resources/features.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/assembly/src/main/resources/features.xml?rev=1151404&r1=1151403&r2=1151404&view=diff
==============================================================================
--- karaf/cellar/trunk/assembly/src/main/resources/features.xml (original)
+++ karaf/cellar/trunk/assembly/src/main/resources/features.xml Wed Jul 27
09:49:59 2011
@@ -41,6 +41,7 @@
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.utils/${project.version}</bundle>
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.shell/${project.version}</bundle>
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.hazelcast/${project.version}</bundle>
+
<bundle>mvn:org.apache.karaf.cellar/org.apache.karaf.cellar.management/${project.version}</bundle>
<configfile finalname="/etc/org.apache.karaf.cellar.instance.cfg">
mvn:org.apache.karaf.cellar/apache-karaf-cellar/${project.version}/cfg/instance
</configfile>
Added: karaf/cellar/trunk/management/pom.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/management/pom.xml?rev=1151404&view=auto
==============================================================================
--- karaf/cellar/trunk/management/pom.xml (added)
+++ karaf/cellar/trunk/management/pom.xml Wed Jul 27 09:49:59 2011
@@ -0,0 +1,65 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+
+ <!--
+
+ 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.
+ -->
+
+ <modelVersion>4.0.0</modelVersion>
+
+ <parent>
+ <groupId>org.apache.karaf</groupId>
+ <artifactId>cellar</artifactId>
+ <version>3.0.0-SNAPSHOT</version>
+ <relativePath>../pom.xml</relativePath>
+ </parent>
+
+ <groupId>org.apache.karaf.cellar</groupId>
+ <artifactId>org.apache.karaf.cellar.management</artifactId>
+ <packaging>bundle</packaging>
+ <name>Apache Karaf :: Cellar :: Management</name>
+
+ <properties>
+ <osgi.export>
+ org.apache.karaf.cellar.management;version="${project.version}"
+ </osgi.export>
+ <osgi.import>
+ !org.apache.karaf.cellar.management*,
+ javax.management,
+ javax.management.loading,
+ org.apache.karaf.management*;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.utils*;version="${project.version}",
+ *
+ </osgi.import>
+ <osgi.private>
+ org.apache.karaf.cellar.management.internal
+ </osgi.private>
+ </properties>
+
+ <dependencies>
+
+ <!-- Karaf Cellar dependencies -->
+ <dependency>
+ <groupId>org.apache.karaf.cellar</groupId>
+ <artifactId>org.apache.karaf.cellar.core</artifactId>
+ </dependency>
+ </dependencies>
+
+</project>
\ No newline at end of file
Added:
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=1151404&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
(added)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/CellarNodeMBean.java
Wed Jul 27 09:49:59 2011
@@ -0,0 +1,34 @@
+/*
+ * 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;
+
+import javax.management.openmbean.TabularData;
+
+/**
+ * Cellar Node MBean to manipulate Cellar cluster nodes.
+ */
+public interface CellarNodeMBean {
+
+ 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;
+
+}
Added:
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=1151404&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxNode.java
(added)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/codec/JmxNode.java
Wed Jul 27 09:49:59 2011
@@ -0,0 +1,93 @@
+/*
+ * 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.ClusterManager;
+import org.apache.karaf.cellar.core.Node;
+import org.apache.karaf.cellar.management.CellarNodeMBean;
+
+import javax.management.openmbean.*;
+import java.util.List;
+
+/**
+ * JMX representation of a Cellar cluster Node.
+ */
+public class JmxNode {
+
+ static final CompositeType NODE;
+ static final TabularType NODE_TABLE;
+
+ static {
+ NODE = createNodeType();
+ NODE_TABLE = createNodeTableType();
+ }
+
+ private final CompositeDataSupport data;
+
+ private CompositeData asCompositeData() {
+ return data;
+ }
+
+ public JmxNode(Node node, ClusterManager clusterManager) {
+ try {
+ String[] itemNames = CellarNodeMBean.NODE;
+ Object[] itemValues = new Object[itemNames.length];
+ itemValues[0] = node.getId();
+ if (node.getHost().equals(clusterManager.getNode())) {
+ itemValues[1] = true;
+ } else {
+ itemValues[1] = false;
+ }
+ data = new CompositeDataSupport(NODE, itemNames, itemValues);
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Cannot create instance open
data", e);
+ }
+ }
+
+ private static CompositeType createNodeType() {
+ try {
+ String desc = "This type describes Karaf Cellar nodes";
+ String[] itemNames = CellarNodeMBean.NODE;
+ OpenType[] itemTypes = new OpenType[itemNames.length];
+ String[] descriptions = new String[itemNames.length];
+
+ itemTypes[0] = SimpleType.STRING;
+ descriptions[0] = "The name of the Cellar node";
+
+ itemTypes[1] = SimpleType.BOOLEAN;
+ descriptions[1] = "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);
+ }
+ }
+
+ private static TabularType createNodeTableType() {
+ try {
+ return new TabularType("Nodes", "Table of all Karaf Cellar nodes",
NODE, new String[] {CellarNodeMBean.NODE_NAME});
+ } catch (OpenDataException e) {
+ throw new IllegalStateException("Unable to build node table tyep",
e);
+ }
+ }
+
+ public static TabularData tableFrom(List<JmxNode> nodes) {
+ TabularDataSupport table = new TabularDataSupport(NODE_TABLE);
+ for (JmxNode node : nodes) {
+ table.put(node.asCompositeData());
+ }
+ return table;
+ }
+
+}
Added:
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=1151404&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarNodeMBeanImpl.java
(added)
+++
karaf/cellar/trunk/management/src/main/java/org/apache/karaf/cellar/management/internal/CellarNodeMBeanImpl.java
Wed Jul 27 09:49:59 2011
@@ -0,0 +1,62 @@
+/*
+ * 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.Node;
+import org.apache.karaf.cellar.management.CellarNodeMBean;
+import org.apache.karaf.cellar.management.codec.JmxNode;
+
+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;
+
+/**
+ * Implementation of the Cellar Node MBean to manipulate Cellar cluster nodes.
+ */
+public class CellarNodeMBeanImpl extends StandardMBean implements
CellarNodeMBean {
+
+ private ClusterManager clusterManager;
+
+ public CellarNodeMBeanImpl() throws NotCompliantMBeanException {
+ super(CellarNodeMBean.class);
+ }
+
+ public ClusterManager getClusterManager() {
+ return this.clusterManager;
+ }
+
+ public void setClusterManager(ClusterManager clusterManager) {
+ this.clusterManager = clusterManager;
+ }
+
+ public int pingNode(String name) throws Exception {
+
+ return 0;
+ }
+
+ public TabularData getNodes() throws Exception {
+ Set<Node> allNodes = clusterManager.listNodes();
+ List<JmxNode> nodes = new ArrayList<JmxNode>();
+ for (Node node : allNodes) {
+ nodes.add(new JmxNode(node, clusterManager));
+ }
+ TabularData table = JmxNode.tableFrom(nodes);
+ return table;
+ }
+
+}
Added:
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=1151404&view=auto
==============================================================================
---
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
(added)
+++
karaf/cellar/trunk/management/src/main/resources/OSGI-INF/blueprint/blueprint.xml
Wed Jul 27 09:49:59 2011
@@ -0,0 +1,39 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ 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.
+-->
+<blueprint xmlns="http://www.osgi.org/xmlns/blueprint/v1.0.0">
+
+ <!-- Reference to the Cellar services -->
+ <reference id="clusterManager"
interface="org.apache.karaf.cellar.core.ClusterManager"/>
+ <reference id="groupManager"
interface="org.apache.karaf.cellar.core.GroupManager"/>
+ <reference id="executionContext"
interface="org.apache.karaf.cellar.core.command.ExecutionContext"/>
+
+ <!-- Reference to the Karaf MBean Server -->
+ <reference id="mbeanServer" interface="javax.management.MBeanServer">
+ <reference-listener ref="mbeanRegister"
bind-method="registerMBeanServer" unbind-method="unregisterMBeanServer"/>
+ </reference>
+
+ <bean id="cellarNodeMBean"
class="org.apache.karaf.cellar.management.internal.CellarNodeMBeanImpl">
+ <property name="clusterManager" ref="clusterManager"/>
+ </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"/>
+ </map>
+ </property>
+ </bean>
+
+</blueprint>
\ No newline at end of file
Modified: karaf/cellar/trunk/pom.xml
URL:
http://svn.apache.org/viewvc/karaf/cellar/trunk/pom.xml?rev=1151404&r1=1151403&r2=1151404&view=diff
==============================================================================
--- karaf/cellar/trunk/pom.xml (original)
+++ karaf/cellar/trunk/pom.xml Wed Jul 27 09:49:59 2011
@@ -1,6 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?>
-<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
- xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
+<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0
http://maven.apache.org/xsd/maven-4.0.0.xsd">
<!--
@@ -58,6 +57,7 @@
<module>hazelcast</module>
<module>utils</module>
<module>cloud</module>
+ <module>management</module>
<module>webconsole</module>
<module>assembly</module>
</modules>