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>


Reply via email to