Author: fhanik
Date: Wed Aug  8 18:54:34 2007
New Revision: 564069

URL: http://svn.apache.org/viewvc?view=rev&rev=564069
Log:
Setup framework for cluster JMX operations


Added:
    tomcat/trunk/java/org/apache/catalina/ha/jmx/
    tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java
Modified:
    
tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
    tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
    tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml
    tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
    tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
    tomcat/trunk/java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml

Modified: 
tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- 
tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml 
(original)
+++ 
tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml 
Wed Aug  8 18:54:34 2007
@@ -1,25 +1,23 @@
 <?xml version="1.0"?>
 <mbeans-descriptors>
-
-  <mbean name="ClusterSingleSignOn"
-         description="A Valve that supports a 'single signon' user experience 
on a whole cluster"
-         domain="Catalina"
-         group="Valve"
-         type="org.apache.catalina.cluster.authenticator.ClusterSingleSignOn">
-
-    <attribute name="className"
-               description="Fully qualified class name of the managed object"
-               type="java.lang.String"
-               writeable="false"/>
-
-    <attribute name="requireReauthentication"
-               description="Should we attempt to reauthenticate each request 
against the security Realm?"
-               type="boolean"/>
-
-    <attribute name="cookieDomain"
-               description="(Optiona) Domain to be used by sso cookies"
-               type="java.lang.String" />
-
+  <mbean
+    name="ClusterSingleSignOn"
+    description="A Valve that supports a 'single signon' user experience on a 
whole cluster"
+    domain="Catalina"
+    group="Valve"
+    type="org.apache.catalina.cluster.authenticator.ClusterSingleSignOn">
+    <attribute
+      name="className"
+      description="Fully qualified class name of the managed object"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="requireReauthentication"
+      description="Should we attempt to reauthenticate each request against 
the security Realm?"
+      type="boolean"/>
+    <attribute
+      name="cookieDomain"
+      description="(Optiona) Domain to be used by sso cookies"
+      type="java.lang.String"/>
   </mbean>
-
 </mbeans-descriptors>

Modified: tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml 
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml Wed 
Aug  8 18:54:34 2007
@@ -1,11 +1,10 @@
 <?xml version="1.0"?>
 <mbeans-descriptors>
-  <mbean         
+  <mbean
     name="FarmWarDeployer"
     className="org.apache.catalina.mbeans.ClassNameMBean"
     description="Farm Deployer - Broken"
     domain="Catalina"
     group="Cluster"
-    type="org.apache.catalina.ha.deploy.FarmWarDeployer">
-  </mbean>
+    type="org.apache.catalina.ha.deploy.FarmWarDeployer">  </mbean>
 </mbeans-descriptors>

Added: tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java?view=auto&rev=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java (added)
+++ tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java Wed Aug  
8 18:54:34 2007
@@ -0,0 +1,130 @@
+/*
+ * 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.
+ */
+package org.apache.catalina.ha.jmx;
+
+import org.apache.tomcat.util.modeler.Registry;
+import org.apache.catalina.ha.CatalinaCluster;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
+import org.apache.catalina.ha.tcp.SimpleTcpCluster;
+import org.apache.catalina.ha.session.DeltaManager;
+import org.apache.catalina.ha.deploy.FarmWarDeployer;
+import org.apache.catalina.ha.authenticator.ClusterSingleSignOn;
+import org.apache.catalina.core.StandardHost;
+import javax.management.ObjectName;
+import org.apache.catalina.core.StandardEngine;
+import javax.management.MBeanServerFactory;
+import javax.management.MBeanServer;
+import javax.management.modelmbean.ModelMBean;
+import org.apache.tomcat.util.modeler.ManagedBean;
+import javax.management.DynamicMBean;
+
+public class ClusterJmxHelper {
+    
+    protected static Registry registry = Registry.getRegistry(null,null);
+    
+    protected static Log log = LogFactory.getLog(ClusterJmxHelper.class);
+    
+    protected static boolean jmxEnabled = true;
+    
+    protected static MBeanServer mbeanServer = null;
+    
+    public static Registry getRegistry() {
+        return registry;
+    }
+
+    public static MBeanServer getMBeanServer() throws Exception {
+        if (mbeanServer == null) {
+            if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
+                mbeanServer = (MBeanServer) 
MBeanServerFactory.findMBeanServer(null).get(0);
+            } else {
+                mbeanServer = MBeanServerFactory.createMBeanServer();
+            }
+        }
+        return mbeanServer;
+    }
+    
+    protected static boolean initMetaData(Class clazz) {
+        try {
+            if (clazz==null) return false;
+            
getRegistry().loadMetadata(clazz.getResourceAsStream("mbeans-descriptors.xml"));
+        }catch (Exception x) {
+            log.warn("Unable to load meta data for class:"+clazz.getName());
+            return false;
+        }
+        return true;
+    }
+    
+    public static DynamicMBean getManagedBean(Object object) throws Exception {
+        DynamicMBean mbean = null;
+        if (getRegistry() != null) {
+            ManagedBean managedBean = 
registry.findManagedBean(object.getClass().getName());
+            mbean = managedBean.createMBean(object);
+        }
+        return mbean;
+    }
+
+    
+    protected static void initDefaultCluster() {
+        initMetaData(SimpleTcpCluster.class);
+        initMetaData(DeltaManager.class);
+        initMetaData(FarmWarDeployer.class); //not functional yet
+        initMetaData(ClusterSingleSignOn.class); //not functional yet
+    }
+    
+    public static boolean registerDefaultCluster(SimpleTcpCluster cluster)  {
+        try {
+            initDefaultCluster();
+            ObjectName clusterName = getDefaultClusterName(cluster);
+            if (!getMBeanServer().isRegistered(clusterName)) {
+                getMBeanServer().registerMBean(getManagedBean(cluster), 
clusterName);
+            }
+            return true;
+        }catch ( Exception x ) {
+            log.warn("Unable to register default cluster implementation with 
JMX",x);
+            return false;
+        }
+    }
+
+    public static boolean unregisterDefaultCluster(SimpleTcpCluster cluster) 
throws Exception {
+        ObjectName clusterName = getDefaultClusterName(cluster);
+        if (getMBeanServer().isRegistered(clusterName)) {
+            getMBeanServer().unregisterMBean(clusterName);
+        }
+        return true;
+    }
+
+    private static ObjectName getDefaultClusterName(SimpleTcpCluster cluster) 
throws Exception {
+        String domain = getMBeanServer().getDefaultDomain();
+        String type = ":type=";
+        boolean hostParent = false;
+        //Step 1. Register the Cluster MBean
+        String clusterType= type+"Cluster";
+        if (cluster.getContainer() instanceof StandardHost) {
+            domain = ((StandardHost) cluster.getContainer()).getDomain();
+            clusterType += ",host=" + cluster.getContainer().getName();
+            hostParent = true;
+        } else {
+            if (cluster.getContainer() instanceof StandardEngine) {
+                domain = ((StandardEngine) cluster.getContainer()).getDomain();
+            }
+        }
+        ObjectName clusterName = new ObjectName(domain + clusterType);
+        return clusterName;
+    }
+    
+}
\ No newline at end of file

Modified: tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml (original)
+++ tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml Wed Aug  8 
18:54:34 2007
@@ -1,90 +1,4 @@
 <?xml version="1.0"?>
 <mbeans-descriptors>
-
-  <mbean         name="SimpleTcpCluster"
-            className="org.apache.catalina.mbeans.ClassNameMBean"
-          description="Tcp Cluster implementation"
-               domain="Catalina"
-                group="Cluster"
-                 type="org.apache.catalina.ha.tcp.SimpleTcpCluster">
-
-  </mbean>
-
-
-  <mbean         name="SimpleTcpReplicationManager"
-            className="org.apache.catalina.mbeans.ClassNameMBean"
-          description="Clustered implementation of the Manager interface"
-               domain="Catalina"
-                group="Manager"
-                 type="org.apache.catalina.ha.tcp.SimpleTcpReplicationManager">
-
-    <attribute   name="algorithm"
-          description="The message digest algorithm to be used when generating
-                       session identifiers"
-                 type="java.lang.String"/>
-
-    <attribute   name="checkInterval"
-          description="The interval (in seconds) between checks for expired
-                       sessions"
-                 type="int"/>
-
-    <attribute   name="className"
-          description="Fully qualified class name of the managed object"
-                 type="java.lang.String"
-            writeable="false"/>
-
-    <attribute   name="distributable"
-          description="The distributable flag for Sessions created by this
-                       Manager"
-                 type="boolean"/>
-
-    <attribute   name="entropy"
-          description="A String initialization parameter used to increase the
-                       entropy of the initialization of our random number
-                       generator"
-                 type="java.lang.String"/>
-
-    <attribute   name="managedResource"
-          description="The managed resource this MBean is associated with"
-                 type="java.lang.Object"/>
-
-    <attribute   name="maxActiveSessions"
-          description="The maximum number of active Sessions allowed, or -1
-                       for no limit"
-                 type="int"/>
-
-    <attribute   name="maxInactiveInterval"
-          description="The default maximum inactive interval for Sessions
-                       created by this Manager"
-                 type="int"/>
-
-    <attribute   name="name"
-          description="The descriptive name of this Manager implementation
-                       (for logging)"
-                 type="java.lang.String"
-            writeable="false"/>
-
-  </mbean>
-
-
-
-<mbean         name="ReplicationValve"
-            className="org.apache.catalina.mbeans.ClassNameMBean"
-          description="Valve for simple tcp replication"
-               domain="Catalina"
-                group="Valve"
-                 type="org.apache.catalina.ha.tcp.ReplicationValve">
-
-    <attribute   name="className"
-          description="Fully qualified class name of the managed object"
-                 type="java.lang.String"
-            writeable="false"/>
-
-    <attribute   name="debug"
-          description="The debugging detail level for this component"
-                 type="int"/>
-
-  </mbean>
-
-
+  
 </mbeans-descriptors>

Modified: 
tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml 
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml Wed 
Aug  8 18:54:34 2007
@@ -3,318 +3,386 @@
    "-//Apache Software Foundation//DTD Model MBeans Configuration File"
    "http://jakarta.apache.org/commons/dtds/mbeans-descriptors.dtd";>
 <mbeans-descriptors>
-    <mbean name="JvmRouteBinderValve" description="mod_jk jvmRoute jsessionid 
cookie backup correction" domain="Catalina"
-        group="Valve" 
type="org.apache.catalina.ha.session.JvmRouteBinderValve">
-        <attribute name="className"
-               description="Fully qualified class name of the managed object"
-               type="java.lang.String"
-               writeable="false"/>        
-        <attribute name="info" 
-                          description="describe version" 
type="java.lang.String" writeable="false"/>
-        <attribute name="enabled" 
-                          description="enable a jvm Route check" 
type="boolean"/>
-        <attribute name="numberOfSessions"
-                          description="number of jvmRoute session corrections" 
type="long" writeable="false"/>
-        <attribute name="sessionIdAttribute" 
-                   description="Name of attribute with sessionid value before 
turnover a session" 
-                   type="java.lang.String" 
-                   />
-        <operation name="start" description="Stops the Cluster 
JvmRouteBinderValve" 
-                          impact="ACTION" returnType="void"/>
-        <operation name="stop" description="Stops the Cluster 
JvmRouteBinderValve" 
-                          impact="ACTION" returnType="void"/>
-    </mbean>
-       <mbean name="JvmRouteSessionIDBinderListener"
-               description="Monitors the jvmRoute activity"
-               domain="Catalina"
-        group="Listener"
-               
type="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
-        <attribute name="info" 
-                          description="describe version" 
type="java.lang.String" writeable="false"/>
-        <attribute name="numberOfSessions" 
-                   description="number of jvmRoute session corrections" 
-                   type="long" 
-                   writeable="false"/>
-    </mbean>
-    
-   <mbean        name="DeltaManager"
-          description="Cluster Manager implementation of the Manager interface"
-               domain="Catalina"
-                group="Manager"
-                 type="org.apache.catalina.ha.session.DeltaManager">
-
-    <attribute   name="info" 
-                 description="describe version"
-                        type="java.lang.String"
-                   writeable="false"/>
-                   
-    <attribute   name="algorithm"
-          description="The message digest algorithm to be used when generating
+  <mbean
+    name="JvmRouteBinderValve"
+    description="mod_jk jvmRoute jsessionid cookie backup correction"
+    domain="Catalina"
+    group="Valve"
+    type="org.apache.catalina.ha.session.JvmRouteBinderValve">
+    <attribute
+      name="className"
+      description="Fully qualified class name of the managed object"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="info"
+      description="describe version"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="enabled"
+      description="enable a jvm Route check"
+      type="boolean"/>
+    <attribute
+      name="numberOfSessions"
+      description="number of jvmRoute session corrections"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="sessionIdAttribute"
+      description="Name of attribute with sessionid value before turnover a 
session"
+      type="java.lang.String"/>
+    <operation
+      name="start"
+      description="Stops the Cluster JvmRouteBinderValve"
+      impact="ACTION"
+      returnType="void"/>
+    <operation
+      name="stop"
+      description="Stops the Cluster JvmRouteBinderValve"
+      impact="ACTION"
+      returnType="void"/>
+  </mbean>
+  <mbean
+    name="JvmRouteSessionIDBinderListener"
+    description="Monitors the jvmRoute activity"
+    domain="Catalina"
+    group="Listener"
+    type="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
+    <attribute
+      name="info"
+      description="describe version"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="numberOfSessions"
+      description="number of jvmRoute session corrections"
+      type="long"
+      writeable="false"/>
+  </mbean>
+  <mbean
+    name="DeltaManager"
+    description="Cluster Manager implementation of the Manager interface"
+    domain="Catalina"
+    group="Manager"
+    type="org.apache.catalina.ha.session.DeltaManager">
+    <attribute
+      name="info"
+      description="describe version"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="algorithm"
+      description="The message digest algorithm to be used when generating
                        session identifiers"
-                 type="java.lang.String"/>
-                 
-    <attribute   name="randomFile"
-          description="File source of random - /dev/urandom or a pipe"
-                 type="java.lang.String"/>
-
-    <attribute   name="className"
-          description="Fully qualified class name of the managed object"
-                 type="java.lang.String"
-            writeable="false"/>
-
-    <attribute   name="distributable"
-          description="The distributable flag for Sessions created by this
+      type="java.lang.String"/>
+    <attribute
+      name="randomFile"
+      description="File source of random - /dev/urandom or a pipe"
+      type="java.lang.String"/>
+    <attribute
+      name="className"
+      description="Fully qualified class name of the managed object"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="distributable"
+      description="The distributable flag for Sessions created by this
                        Manager"
-                 type="boolean"/>
-
-    <attribute   name="entropy"
-          description="A String initialization parameter used to increase the
+      type="boolean"/>
+    <attribute
+      name="entropy"
+      description="A String initialization parameter used to increase the
                        entropy of the initialization of our random number
                        generator"
-                 type="java.lang.String"/>
-
-    <attribute   name="maxActiveSessions"
-          description="The maximum number of active Sessions allowed, or -1
+      type="java.lang.String"/>
+    <attribute
+      name="maxActiveSessions"
+      description="The maximum number of active Sessions allowed, or -1
                        for no limit"
-                 type="int"/>
-
-    <attribute   name="maxInactiveInterval"
-          description="The default maximum inactive interval for Sessions
+      type="int"/>
+    <attribute
+      name="maxInactiveInterval"
+      description="The default maximum inactive interval for Sessions
                        created by this Manager"
-                 type="int"/>
-
-    <attribute name="processExpiresFrequency"
-               description="The frequency of the manager checks (expiration 
and passivation)"
-               type="int"/>
-               
-    <attribute   name="sessionIdLength"
-          description="The session id length (in bytes) of Sessions
+      type="int"/>
+    <attribute
+      name="processExpiresFrequency"
+      description="The frequency of the manager checks (expiration and 
passivation)"
+      type="int"/>
+    <attribute
+      name="sessionIdLength"
+      description="The session id length (in bytes) of Sessions
                        created by this Manager"
-                 type="int"/>
-
-    <attribute   name="name"
-          description="The descriptive name of this Manager implementation
+      type="int"/>
+    <attribute
+      name="name"
+      description="The descriptive name of this Manager implementation
                        (for logging)"
-                 type="java.lang.String"
-            writeable="false"/>
-
-    <attribute   name="activeSessions"
-          description="Number of active sessions at this moment"
-                 type="int" 
-            writeable="false"/>
-
-    <attribute   name="sessionCounter"
-          description="Total number of sessions created by this manager"
-                 type="int" />
-
-    <attribute   name="sessionReplaceCounter"
-          description="Total number of replaced sessions that load from 
external nodes"
-                 type="long" />
-
-    <attribute   name="maxActive"
-          description="Maximum number of active sessions so far"
-                 type="int" />
-
-    <attribute   name="sessionMaxAliveTime"
-          description="Longest time an expired session had been alive"
-                 type="int" />
-
-    <attribute   name="sessionAverageAliveTime"
-          description="Average time an expired session had been alive"
-                 type="int" />
-
-    <attribute   name="sendClusterDomainOnly"
-                   is="true"
-          description="The sendClusterDomainOnly flag send sessions only to 
members as same cluster domain"
-                 type="boolean"/>
-
-    <attribute   name="rejectedSessions"
-          description="Number of sessions we rejected due to maxActive beeing 
reached"
-                 type="int" />
-
-    <attribute   name="expiredSessions"
-          description="Number of sessions that expired ( doesn't include 
explicit invalidations )"
-                 type="int" />
-
-    <attribute   name="stateTransferTimeout"
-          description="state transfer timeout in sec"
-                 type="int"/>
-
-    <attribute   name="processingTime"
-          description="Time spent doing housekeeping and expiration"
-                 type="long" />
-
-    <attribute   name="duplicates"
-          description="Number of duplicated session ids generated"
-                 type="int" />
-
-    <attribute   name="counterReceive_EVT_GET_ALL_SESSIONS"
-          description="Count receive EVT_GET_ALL_SESSIONS messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterReceive_EVT_ALL_SESSION_DATA"
-          description="Count receive EVT_ALL_SESSION_DATA messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterReceive_EVT_SESSION_CREATED"
-          description="Count receive EVT_SESSION_CREATED messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterReceive_EVT_SESSION_DELTA"
-          description="Count receive EVT_SESSION_DELTA messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterReceive_EVT_SESSION_ACCESSED"
-          description="Count receive EVT_SESSION_ACCESSED messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterReceive_EVT_SESSION_EXPIRED"
-          description="Count receive EVT_SESSION_EXPIRED messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE"
-          description="Count receive EVT_ALL_SESSION_TRANSFERCOMPLETE messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterSend_EVT_GET_ALL_SESSIONS"
-          description="Count send EVT_GET_ALL_SESSIONS messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterSend_EVT_ALL_SESSION_DATA"
-          description="Count send EVT_ALL_SESSION_DATA messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterSend_EVT_SESSION_CREATED"
-          description="Count send EVT_SESSION_CREATED messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterSend_EVT_SESSION_DELTA"
-          description="Count send EVT_SESSION_DELTA messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterSend_EVT_SESSION_ACCESSED"
-          description="Count send EVT_SESSION_ACCESSED messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterSend_EVT_SESSION_EXPIRED"
-          description="Count send EVT_SESSION_EXPIRED messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE"
-          description="Count send EVT_ALL_SESSION_TRANSFERCOMPLETE messages"
-                 type="long"
-            writeable="false" />
-
-    <attribute   name="counterNoStateTransfered"
-          description="Count the failed session transfers noStateTransfered"
-                 type="int"
-            writeable="false" />
-            
-    <attribute   name="receivedQueueSize"
-          description="length of receive queue size when session received from 
other node"
-                 type="int"
-            writeable="false" />            
-
-    <attribute   name="expireSessionsOnShutdown"
-                   is="true"
-          description="exipre all sessions cluster wide as one node goes down"
-                 type="boolean" />
-
-    <attribute   name="notifyListenersOnReplication"
-                   is="true"
-          description="Send session attribute change events on backup nodes"
-                 type="boolean" />
-
-    <attribute   name="notifySessionListenersOnReplication"
-                   is="true"
-          description="Send session start/stop events on backup nodes"
-                 type="boolean" />
-
-    <attribute   name="sendAllSessions"
-                   is="true"
-          description="Send all sessions at one big block"
-                 type="boolean" />
-
-    <attribute   name="sendAllSessionsSize"
-          description="session block size when sendAllSessions=false 
(default=1000)"
-                 type="int" />
-
-    <attribute   name="sendAllSessionsWaitTime"
-          description="wait time between send session block (default 2 sec)"
-                 type="int" />
-
-    <operation   name="listSessionIds"
-          description="Return the list of active session ids"
-               impact="ACTION"
-           returnType="java.lang.String">
-    </operation>
-
-    <operation   name="getSessionAttribute"
-          description="Return a session attribute"
-               impact="ACTION"
-           returnType="java.lang.String">
-      <parameter name="sessionId"
-          description="Id of the session"
-                 type="java.lang.String"/>
-      <parameter name="key"
-          description="key of the attribute"
-                 type="java.lang.String"/>
-    </operation>
-
-    <operation   name="expireSession"
-          description="Expire a session"
-               impact="ACTION"
-           returnType="void">
-      <parameter name="sessionId"
-          description="Id of the session"
-                 type="java.lang.String"/>
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="activeSessions"
+      description="Number of active sessions at this moment"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="sessionCounter"
+      description="Total number of sessions created by this manager"
+      type="int"/>
+    <attribute
+      name="sessionReplaceCounter"
+      description="Total number of replaced sessions that load from external 
nodes"
+      type="long"/>
+    <attribute
+      name="maxActive"
+      description="Maximum number of active sessions so far"
+      type="int"/>
+    <attribute
+      name="sessionMaxAliveTime"
+      description="Longest time an expired session had been alive"
+      type="int"/>
+    <attribute
+      name="sessionAverageAliveTime"
+      description="Average time an expired session had been alive"
+      type="int"/>
+    <attribute
+      name="sendClusterDomainOnly"
+      is="true"
+      description="The sendClusterDomainOnly flag send sessions only to 
members as same cluster domain"
+      type="boolean"/>
+    <attribute
+      name="rejectedSessions"
+      description="Number of sessions we rejected due to maxActive beeing 
reached"
+      type="int"/>
+    <attribute
+      name="expiredSessions"
+      description="Number of sessions that expired ( doesn't include explicit 
invalidations )"
+      type="int"/>
+    <attribute
+      name="stateTransferTimeout"
+      description="state transfer timeout in sec"
+      type="int"/>
+    <attribute
+      name="processingTime"
+      description="Time spent doing housekeeping and expiration"
+      type="long"/>
+    <attribute
+      name="duplicates"
+      description="Number of duplicated session ids generated"
+      type="int"/>
+    <attribute
+      name="counterReceive_EVT_GET_ALL_SESSIONS"
+      description="Count receive EVT_GET_ALL_SESSIONS messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterReceive_EVT_ALL_SESSION_DATA"
+      description="Count receive EVT_ALL_SESSION_DATA messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterReceive_EVT_SESSION_CREATED"
+      description="Count receive EVT_SESSION_CREATED messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterReceive_EVT_SESSION_DELTA"
+      description="Count receive EVT_SESSION_DELTA messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterReceive_EVT_SESSION_ACCESSED"
+      description="Count receive EVT_SESSION_ACCESSED messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterReceive_EVT_SESSION_EXPIRED"
+      description="Count receive EVT_SESSION_EXPIRED messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE"
+      description="Count receive EVT_ALL_SESSION_TRANSFERCOMPLETE messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterSend_EVT_GET_ALL_SESSIONS"
+      description="Count send EVT_GET_ALL_SESSIONS messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterSend_EVT_ALL_SESSION_DATA"
+      description="Count send EVT_ALL_SESSION_DATA messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterSend_EVT_SESSION_CREATED"
+      description="Count send EVT_SESSION_CREATED messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterSend_EVT_SESSION_DELTA"
+      description="Count send EVT_SESSION_DELTA messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterSend_EVT_SESSION_ACCESSED"
+      description="Count send EVT_SESSION_ACCESSED messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterSend_EVT_SESSION_EXPIRED"
+      description="Count send EVT_SESSION_EXPIRED messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE"
+      description="Count send EVT_ALL_SESSION_TRANSFERCOMPLETE messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="counterNoStateTransfered"
+      description="Count the failed session transfers noStateTransfered"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="receivedQueueSize"
+      description="length of receive queue size when session received from 
other node"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="expireSessionsOnShutdown"
+      is="true"
+      description="exipre all sessions cluster wide as one node goes down"
+      type="boolean"/>
+    <attribute
+      name="notifyListenersOnReplication"
+      is="true"
+      description="Send session attribute change events on backup nodes"
+      type="boolean"/>
+    <attribute
+      name="notifySessionListenersOnReplication"
+      is="true"
+      description="Send session start/stop events on backup nodes"
+      type="boolean"/>
+    <attribute
+      name="sendAllSessions"
+      is="true"
+      description="Send all sessions at one big block"
+      type="boolean"/>
+    <attribute
+      name="sendAllSessionsSize"
+      description="session block size when sendAllSessions=false 
(default=1000)"
+      type="int"/>
+    <attribute
+      name="sendAllSessionsWaitTime"
+      description="wait time between send session block (default 2 sec)"
+      type="int"/>
+    <operation
+      name="listSessionIds"
+      description="Return the list of active session ids"
+      impact="ACTION"
+      returnType="java.lang.String">    </operation>
+    <operation
+      name="getSessionAttribute"
+      description="Return a session attribute"
+      impact="ACTION"
+      returnType="java.lang.String">
+      <parameter
+        name="sessionId"
+        description="Id of the session"
+        type="java.lang.String"/>
+      <parameter
+        name="key"
+        description="key of the attribute"
+        type="java.lang.String"/>
     </operation>
-
-    <operation   name="getLastAccessedTime"
-          description="Get the last access time"
-               impact="ACTION"
-           returnType="java.lang.String">
-      <parameter name="sessionId"
-          description="Id of the session"
-                 type="java.lang.String"/>
+    <operation
+      name="expireSession"
+      description="Expire a session"
+      impact="ACTION"
+      returnType="void">
+      <parameter
+        name="sessionId"
+        description="Id of the session"
+        type="java.lang.String"/>
     </operation>
-    
-       <operation name="expireAllLocalSessions"
-               description="Exipre all active local sessions and replicate the 
invalid sessions"
-               impact="ACTION"
-               returnType="void">
+    <operation
+      name="getLastAccessedTime"
+      description="Get the last access time"
+      impact="ACTION"
+      returnType="java.lang.String">
+      <parameter
+        name="sessionId"
+        description="Id of the session"
+        type="java.lang.String"/>
     </operation>
-
-       <operation name="processExpires"
-               description="force process to expire sessions"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-    
-       <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="getAllClusterSessions"
-               description="send to oldest cluster member that this node need 
all cluster sessions (resync member)"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-
+    <operation
+      name="expireAllLocalSessions"
+      description="Exipre all active local sessions and replicate the invalid 
sessions"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="processExpires"
+      description="force process to expire sessions"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="getAllClusterSessions"
+      description="send to oldest cluster member that this node need all 
cluster sessions (resync member)"
+      impact="ACTION"
+      returnType="void">    </operation>
+  </mbean>
+<mbean
+    name="SimpleTcpReplicationManager"
+    className="org.apache.catalina.mbeans.ClassNameMBean"
+    description="Clustered implementation of the Manager interface"
+    domain="Catalina"
+    group="Manager"
+    type="org.apache.catalina.ha.tcp.SimpleTcpReplicationManager">
+    <attribute
+      name="algorithm"
+      description="The message digest algorithm to be used when generating 
session identifiers"
+      type="java.lang.String"/>
+    <attribute
+      name="checkInterval"
+      description="The interval (in seconds) between checks for expired 
sessions"
+      type="int"/>
+    <attribute
+      name="className"
+      description="Fully qualified class name of the managed object"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="distributable"
+      description="The distributable flag for Sessions created by this Manager"
+      type="boolean"/>
+    <attribute
+      name="entropy"
+      description="A String initialization parameter used to increase the 
entropy of the initialization of our random number generator"
+      type="java.lang.String"/>
+    <attribute
+      name="managedResource"
+      description="The managed resource this MBean is associated with"
+      type="java.lang.Object"/>
+    <attribute
+      name="maxActiveSessions"
+      description="The maximum number of active Sessions allowed, or -1 for no 
limit"
+      type="int"/>
+    <attribute
+      name="maxInactiveInterval"
+      description="The default maximum inactive interval for Sessions created 
by this Manager"
+      type="int"/>
+    <attribute
+      name="name"
+      description="The descriptive name of this Manager implementation (for 
logging)"
+      type="java.lang.String"
+      writeable="false"/>
   </mbean>
-
 </mbeans-descriptors>

Modified: tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
URL: 
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java 
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java Wed Aug  
8 18:54:34 2007
@@ -57,6 +57,7 @@
 import org.apache.catalina.tribes.group.interceptors.TcpFailureDetector;
 import org.apache.catalina.ha.session.JvmRouteBinderValve;
 import org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener;
+import org.apache.catalina.ha.jmx.ClusterJmxHelper;
 
 /**
  * A <b>Cluster </b> implementation using simple multicast. Responsible for
@@ -689,6 +690,8 @@
             channel.start(channel.DEFAULT);
             if (clusterDeployer != null) clusterDeployer.start();
             this.started = true;
+            //register JMX objects
+            ClusterJmxHelper.registerDefaultCluster(this);
             // Notify our interested LifecycleListeners
             lifecycle.fireLifecycleEvent(AFTER_START_EVENT, this);
         } catch (Exception x) {
@@ -784,6 +787,9 @@
             channel.removeChannelListener(this);
             channel.removeMembershipListener(this);
             this.unregisterClusterValve();
+            //unregister JMX objects
+            ClusterJmxHelper.unregisterDefaultCluster(this);
+
         } catch (Exception x) {
             log.error("Unable to stop cluster valve.", x);
         }



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to