Setup framework for cluster JMX operations
authorfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 9 Aug 2007 01:54:34 +0000 (01:54 +0000)
committerfhanik <fhanik@13f79535-47bb-0310-9956-ffa450edef68>
Thu, 9 Aug 2007 01:54:34 +0000 (01:54 +0000)
git-svn-id: https://svn.apache.org/repos/asf/tomcat/trunk@564069 13f79535-47bb-0310-9956-ffa450edef68

java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java [new file with mode: 0644]
java/org/apache/catalina/ha/mbeans-descriptors.xml
java/org/apache/catalina/ha/session/mbeans-descriptors.xml
java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml

index 7920f98..6243060 100644 (file)
@@ -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>
index 378b962..6ac06e2 100644 (file)
@@ -1,11 +1,10 @@
 <?xml version="1.0"?>\r
 <mbeans-descriptors>\r
-  <mbean         \r
+  <mbean\r
     name="FarmWarDeployer"\r
     className="org.apache.catalina.mbeans.ClassNameMBean"\r
     description="Farm Deployer - Broken"\r
     domain="Catalina"\r
     group="Cluster"\r
-    type="org.apache.catalina.ha.deploy.FarmWarDeployer">\r
-  </mbean>\r
+    type="org.apache.catalina.ha.deploy.FarmWarDeployer">  </mbean>\r
 </mbeans-descriptors>\r
diff --git a/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java b/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java
new file mode 100644 (file)
index 0000000..2dd3409
--- /dev/null
@@ -0,0 +1,130 @@
+/*\r
+ * Licensed to the Apache Software Foundation (ASF) under one or more\r
+ * contributor license agreements.  See the NOTICE file distributed with\r
+ * this work for additional information regarding copyright ownership.\r
+ * The ASF licenses this file to You under the Apache License, Version 2.0\r
+ * (the "License"); you may not use this file except in compliance with\r
+ * the License.  You may obtain a copy of the License at\r
+ * \r
+ *      http://www.apache.org/licenses/LICENSE-2.0\r
+ * \r
+ * Unless required by applicable law or agreed to in writing, software\r
+ * distributed under the License is distributed on an "AS IS" BASIS,\r
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\r
+ * See the License for the specific language governing permissions and\r
+ * limitations under the License.\r
+ */\r
+package org.apache.catalina.ha.jmx;\r
+\r
+import org.apache.tomcat.util.modeler.Registry;\r
+import org.apache.catalina.ha.CatalinaCluster;\r
+import org.apache.juli.logging.Log;\r
+import org.apache.juli.logging.LogFactory;\r
+import org.apache.catalina.ha.tcp.SimpleTcpCluster;\r
+import org.apache.catalina.ha.session.DeltaManager;\r
+import org.apache.catalina.ha.deploy.FarmWarDeployer;\r
+import org.apache.catalina.ha.authenticator.ClusterSingleSignOn;\r
+import org.apache.catalina.core.StandardHost;\r
+import javax.management.ObjectName;\r
+import org.apache.catalina.core.StandardEngine;\r
+import javax.management.MBeanServerFactory;\r
+import javax.management.MBeanServer;\r
+import javax.management.modelmbean.ModelMBean;\r
+import org.apache.tomcat.util.modeler.ManagedBean;\r
+import javax.management.DynamicMBean;\r
+\r
+public class ClusterJmxHelper {\r
+    \r
+    protected static Registry registry = Registry.getRegistry(null,null);\r
+    \r
+    protected static Log log = LogFactory.getLog(ClusterJmxHelper.class);\r
+    \r
+    protected static boolean jmxEnabled = true;\r
+    \r
+    protected static MBeanServer mbeanServer = null;\r
+    \r
+    public static Registry getRegistry() {\r
+        return registry;\r
+    }\r
+\r
+    public static MBeanServer getMBeanServer() throws Exception {\r
+        if (mbeanServer == null) {\r
+            if (MBeanServerFactory.findMBeanServer(null).size() > 0) {\r
+                mbeanServer = (MBeanServer) MBeanServerFactory.findMBeanServer(null).get(0);\r
+            } else {\r
+                mbeanServer = MBeanServerFactory.createMBeanServer();\r
+            }\r
+        }\r
+        return mbeanServer;\r
+    }\r
+    \r
+    protected static boolean initMetaData(Class clazz) {\r
+        try {\r
+            if (clazz==null) return false;\r
+            getRegistry().loadMetadata(clazz.getResourceAsStream("mbeans-descriptors.xml"));\r
+        }catch (Exception x) {\r
+            log.warn("Unable to load meta data for class:"+clazz.getName());\r
+            return false;\r
+        }\r
+        return true;\r
+    }\r
+    \r
+    public static DynamicMBean getManagedBean(Object object) throws Exception {\r
+        DynamicMBean mbean = null;\r
+        if (getRegistry() != null) {\r
+            ManagedBean managedBean = registry.findManagedBean(object.getClass().getName());\r
+            mbean = managedBean.createMBean(object);\r
+        }\r
+        return mbean;\r
+    }\r
+\r
+    \r
+    protected static void initDefaultCluster() {\r
+        initMetaData(SimpleTcpCluster.class);\r
+        initMetaData(DeltaManager.class);\r
+        initMetaData(FarmWarDeployer.class); //not functional yet\r
+        initMetaData(ClusterSingleSignOn.class); //not functional yet\r
+    }\r
+    \r
+    public static boolean registerDefaultCluster(SimpleTcpCluster cluster)  {\r
+        try {\r
+            initDefaultCluster();\r
+            ObjectName clusterName = getDefaultClusterName(cluster);\r
+            if (!getMBeanServer().isRegistered(clusterName)) {\r
+                getMBeanServer().registerMBean(getManagedBean(cluster), clusterName);\r
+            }\r
+            return true;\r
+        }catch ( Exception x ) {\r
+            log.warn("Unable to register default cluster implementation with JMX",x);\r
+            return false;\r
+        }\r
+    }\r
+\r
+    public static boolean unregisterDefaultCluster(SimpleTcpCluster cluster) throws Exception {\r
+        ObjectName clusterName = getDefaultClusterName(cluster);\r
+        if (getMBeanServer().isRegistered(clusterName)) {\r
+            getMBeanServer().unregisterMBean(clusterName);\r
+        }\r
+        return true;\r
+    }\r
+\r
+    private static ObjectName getDefaultClusterName(SimpleTcpCluster cluster) throws Exception {\r
+        String domain = getMBeanServer().getDefaultDomain();\r
+        String type = ":type=";\r
+        boolean hostParent = false;\r
+        //Step 1. Register the Cluster MBean\r
+        String clusterType= type+"Cluster";\r
+        if (cluster.getContainer() instanceof StandardHost) {\r
+            domain = ((StandardHost) cluster.getContainer()).getDomain();\r
+            clusterType += ",host=" + cluster.getContainer().getName();\r
+            hostParent = true;\r
+        } else {\r
+            if (cluster.getContainer() instanceof StandardEngine) {\r
+                domain = ((StandardEngine) cluster.getContainer()).getDomain();\r
+            }\r
+        }\r
+        ObjectName clusterName = new ObjectName(domain + clusterType);\r
+        return clusterName;\r
+    }\r
+    \r
+}
\ No newline at end of file
index 8a4f610..07e95fd 100644 (file)
@@ -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>
index f062121..28567f7 100644 (file)
    "-//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>
index 68aa271..613b555 100644 (file)
@@ -57,6 +57,7 @@ import org.apache.catalina.tribes.group.interceptors.MessageDispatch15Intercepto
 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 @@ public class SimpleTcpCluster
             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 @@ public class SimpleTcpCluster
             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);
         }
index e051aee..3a4ba7b 100644 (file)
    "-//Apache Software Foundation//DTD Model MBeans Configuration File"
    "http://jakarta.apache.org/commons/dtds/mbeans-descriptors.dtd">
 <mbeans-descriptors>
-
-  <mbean         name="SimpleTcpCluster"
-           description="Tcp Cluster implementation"
-               domain="Catalina"
-                group="Cluster"
-                 type="org.apache.catalina.ha.tcp.SimpleTcpCluster">
-    <attribute   name="info"
-          description="Class version info"
-                 type="java.lang.String"
-                 writeable="false"/>
-    <attribute   name="notifyLifecycleListenerOnFailure"
-          description="notify lifecycleListener from message transfer failure"
-                            is="true"
-                 type="boolean"/>  
-    <attribute   name="heartbeatBackgroundEnabled"
-          description="enable that container background thread call channel heartbeat, default is that channel mangage heartbeat itself."
-                            is="true"
-                 type="boolean"/>  
-     <attribute   name="clusterName"
-          description="name of cluster"
-                 type="java.lang.String"/>
-    <attribute   name="managerClassName"
-          description="session mananager classname"
-                 type="java.lang.String"/>
-    <attribute   name="clusterLogName"
-          description="Name of cluster transfer log device"
-                 type="java.lang.String"/>
-    <attribute   name="doClusterLog"
-                            is="true"
-          description="enable cluster log transfer logging"
-                 type="boolean"/>
-    <operation   name="setProperty"
-               description="set a property to all cluster managers (with prefix 'manager.')"
-               impact="ACTION"
-               returnType="void">
-      <parameter name="key"
-                 description="Property name"
-                 type="java.lang.String"/>
-      <parameter name="value"
-                 description="Property value"
-                 type="java.lang.String"/>
+  <mbean
+    name="SimpleTcpCluster"
+    description="Tcp Cluster implementation"
+    domain="Catalina"
+    group="Cluster"
+    type="org.apache.catalina.ha.tcp.SimpleTcpCluster">
+    <attribute
+      name="info"
+      description="Class version info"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="notifyLifecycleListenerOnFailure"
+      description="notify lifecycleListener from message transfer failure"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="heartbeatBackgroundEnabled"
+      description="enable that container background thread call channel heartbeat, default is that channel mangage heartbeat itself."
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="clusterName"
+      description="name of cluster"
+      type="java.lang.String"/>
+    <attribute
+      name="managerClassName"
+      description="session mananager classname"
+      type="java.lang.String"/>
+    <attribute
+      name="clusterLogName"
+      description="Name of cluster transfer log device"
+      type="java.lang.String"/>
+    <attribute
+      name="doClusterLog"
+      is="true"
+      description="enable cluster log transfer logging"
+      type="boolean"/>
+    <operation
+      name="setProperty"
+      description="set a property to all cluster managers (with prefix 'manager.')"
+      impact="ACTION"
+      returnType="void">
+      <parameter
+        name="key"
+        description="Property name"
+        type="java.lang.String"/>
+      <parameter
+        name="value"
+        description="Property value"
+        type="java.lang.String"/>
     </operation>
-
-    <operation   name="send"
-               description="send message to all cluster members"
-               impact="ACTION"
-               returnType="void">
-      <parameter name="message"
-                 description="replication message"
-                 type="org.apache.catalina.ha.ClusterMessage"/>
+    <operation
+      name="send"
+      description="send message to all cluster members"
+      impact="ACTION"
+      returnType="void">
+      <parameter
+        name="message"
+        description="replication message"
+        type="org.apache.catalina.ha.ClusterMessage"/>
     </operation>
-    
-    <operation   name="sendClusterDomain"
-               description="send message to all cluster members with same domain"
-               impact="ACTION"
-               returnType="void">
-      <parameter name="message"
-                 description="replication message"
-                 type="org.apache.catalina.ha.ClusterMessage"/>
+    <operation
+      name="sendClusterDomain"
+      description="send message to all cluster members with same domain"
+      impact="ACTION"
+      returnType="void">
+      <parameter
+        name="message"
+        description="replication message"
+        type="org.apache.catalina.ha.ClusterMessage"/>
     </operation>
-        
-    <operation   name="start"
-               description="Start the cluster"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-    
-    <operation name="stop"
-               description="Stop the cluster"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-                 
+    <operation
+      name="start"
+      description="Start the cluster"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="stop"
+      description="Stop the cluster"
+      impact="ACTION"
+      returnType="void">    </operation>
   </mbean>
-
-  <mbean         name="ClusterReceiverBase"
-           description="Tcp Cluster ReplicationListener implementation"
-               domain="Catalina"
-                group="Cluster"
-                 type="org.apache.catalina.ha.tcp.ClusterReceiverBase">
-    <attribute   name="info"
-          description="Class version info"
-                 type="java.lang.String"
-                 writeable="false"/>
-    <attribute   name="tcpListenAddress"
-          description="tcp listener address"
-                 type="java.lang.String"/>
-    <attribute   name="tcpListenPort"
-          description="tcp listener port"
-                 type="int"/>
-    <attribute   name="tcpThreadCount"
-          description="number of tcp listener worker threads"
-                 type="int"/>
-    <attribute   name="tcpSelectorTimeout"
-          description="tcp listener Selector timeout"
-                 type="long"/>
-    <attribute   name="nrOfMsgsReceived"
-          description="number of messages received from other nodes"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="receivedTime"
-          description="total time message send time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="receivedProcessingTime"
-          description="received processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minReceivedProcessingTime"
-          description="minimal received processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgReceivedProcessingTime"
-          description="received processing time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxReceivedProcessingTime"
-          description="maximal received processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doReceivedProcessingStats"
-          description="create received processing time stats"
-                            is="true"
-                 type="boolean" />                
-    <attribute   name="avgTotalReceivedBytes"
-          description="received totalReceivedBytes / nrOfMsgsReceived"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalReceivedBytes"
-          description="number of bytes received"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="sendAck"
-          description="send ack after data received"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-    <attribute   name="compress"
-          description="data received compressed"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-    <attribute   name="doListen"
-          description="is port really started"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-                 
-       <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>       
-
-    <operation   name="start"
-               description="Start the cluster"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-    
-    <operation name="stop"
-               description="Stop the cluster"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-                 
+  <mbean
+    name="ClusterReceiverBase"
+    description="Tcp Cluster ReplicationListener implementation"
+    domain="Catalina"
+    group="Cluster"
+    type="org.apache.catalina.ha.tcp.ClusterReceiverBase">
+    <attribute
+      name="info"
+      description="Class version info"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="tcpListenAddress"
+      description="tcp listener address"
+      type="java.lang.String"/>
+    <attribute
+      name="tcpListenPort"
+      description="tcp listener port"
+      type="int"/>
+    <attribute
+      name="tcpThreadCount"
+      description="number of tcp listener worker threads"
+      type="int"/>
+    <attribute
+      name="tcpSelectorTimeout"
+      description="tcp listener Selector timeout"
+      type="long"/>
+    <attribute
+      name="nrOfMsgsReceived"
+      description="number of messages received from other nodes"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="receivedTime"
+      description="total time message send time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="receivedProcessingTime"
+      description="received processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minReceivedProcessingTime"
+      description="minimal received processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgReceivedProcessingTime"
+      description="received processing time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxReceivedProcessingTime"
+      description="maximal received processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doReceivedProcessingStats"
+      description="create received processing time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="avgTotalReceivedBytes"
+      description="received totalReceivedBytes / nrOfMsgsReceived"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalReceivedBytes"
+      description="number of bytes received"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="sendAck"
+      description="send ack after data received"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="compress"
+      description="data received compressed"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="doListen"
+      description="is port really started"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="start"
+      description="Start the cluster"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="stop"
+      description="Stop the cluster"
+      impact="ACTION"
+      returnType="void">    </operation>
   </mbean>
-
-  <mbean         name="SocketReplicationListener"
-           description="Tcp Cluster SocketReplicationListener implementation"
-               domain="Catalina"
-                group="Cluster"
-                 type="org.apache.catalina.ha.tcp.SocketReplicationListener">
-    <attribute   name="info"
-          description="Class version info"
-                 type="java.lang.String"
-                 writeable="false"/>
-    <attribute   name="tcpListenAddress"
-          description="tcp listener address"
-                 type="java.lang.String"/>
-    <attribute   name="tcpListenPort"
-          description="tcp listener port"
-                 type="int"/>
-    <attribute   name="tcpListenMaxPort"
-          description="max tcp listen used port"
-                 type="int"/>
-    <attribute   name="tcpListenTimeout"
-          description="max tcp listen timeout (sec) wait for ServerSocket start"
-                 type="int"/>                
-    <attribute   name="nrOfMsgsReceived"
-          description="number of messages received from other nodes"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="receivedTime"
-          description="total time message send time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="receivedProcessingTime"
-          description="received processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minReceivedProcessingTime"
-          description="minimal received processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgReceivedProcessingTime"
-          description="received processing time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxReceivedProcessingTime"
-          description="maximal received processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doReceivedProcessingStats"
-          description="create received processing time stats"
-                            is="true"
-                 type="boolean" />                
-    <attribute   name="avgTotalReceivedBytes"
-          description="received totalReceivedBytes / nrOfMsgsReceived"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalReceivedBytes"
-          description="number of bytes received"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="sendAck"
-          description="send ack after data received"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-   <attribute   name="compress"
-          description="data received compressed"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-   <attribute   name="doListen"
-          description="is port really started"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-                 
-       <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>       
-
-    <operation   name="start"
-               description="Start the cluster"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-    
-    <operation name="stop"
-               description="Stop the cluster"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-                 
+  <mbean
+    name="SocketReplicationListener"
+    description="Tcp Cluster SocketReplicationListener implementation"
+    domain="Catalina"
+    group="Cluster"
+    type="org.apache.catalina.ha.tcp.SocketReplicationListener">
+    <attribute
+      name="info"
+      description="Class version info"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="tcpListenAddress"
+      description="tcp listener address"
+      type="java.lang.String"/>
+    <attribute
+      name="tcpListenPort"
+      description="tcp listener port"
+      type="int"/>
+    <attribute
+      name="tcpListenMaxPort"
+      description="max tcp listen used port"
+      type="int"/>
+    <attribute
+      name="tcpListenTimeout"
+      description="max tcp listen timeout (sec) wait for ServerSocket start"
+      type="int"/>
+    <attribute
+      name="nrOfMsgsReceived"
+      description="number of messages received from other nodes"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="receivedTime"
+      description="total time message send time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="receivedProcessingTime"
+      description="received processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minReceivedProcessingTime"
+      description="minimal received processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgReceivedProcessingTime"
+      description="received processing time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxReceivedProcessingTime"
+      description="maximal received processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doReceivedProcessingStats"
+      description="create received processing time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="avgTotalReceivedBytes"
+      description="received totalReceivedBytes / nrOfMsgsReceived"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalReceivedBytes"
+      description="number of bytes received"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="sendAck"
+      description="send ack after data received"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="compress"
+      description="data received compressed"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="doListen"
+      description="is port really started"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="start"
+      description="Start the cluster"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="stop"
+      description="Stop the cluster"
+      impact="ACTION"
+      returnType="void">    </operation>
   </mbean>
-  
-  <mbean         name="ReplicationTransmitter"
-          description="Tcp replication transmitter"
-               domain="Catalina"
-                group="ClusterSender"
-                 type="org.apache.catalina.ha.tcp.ReplicationTransmitter">
-    <attribute   name="info"
-          description="Class version info"
-                 type="java.lang.String"
-                 writeable="false"/>
-    <attribute   name="replicationMode"
-          description="replication mode (synchnous,pooled.asynchnous,fastasyncqueue)"
-                 type="java.lang.String"/>
-    <attribute   name="ackTimeout"
-          description="acknowledge timeout"
-                 type="long"/>
-    <attribute   name="autoConnect"
-          description="is sender disabled, fork a new socket"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="waitForAck"
-          description="Wait for ack after data send"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-    <attribute   name="processingTime"
-          description="sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minProcessingTime"
-          description="minimal sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgProcessingTime"
-          description="processing time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxProcessingTime"
-          description="maximal sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doTransmitterProcessingStats"
-          description="create processing time stats"
-                            is="true"
-                 type="boolean" />                
-    <attribute   name="nrOfRequests"
-          description="number of send messages to other members"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalBytes"
-          description="number of bytes transfered"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="failureCounter"
-          description="number of wrong transfers"
-                 type="long"
-                 writeable="false"/>
-       <attribute name="senderObjectNames"
-               description="get all sender object names"
-               type="[Ljavax.management.ObjectName;"
-               writeable="false"/>
-    <operation   name="start"
-               description="Start the cluster"
-               impact="ACTION"
-               returnType="void">
-    </operation>    
-    <operation name="stop"
-               description="Stop the cluster"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>       
-       <operation name="checkKeepAlive"
-               description="Check all sender connection for close socket (keepalive)"
-               impact="ACTION"
-               returnType="void">
-    </operation>
+  <mbean
+    name="ReplicationTransmitter"
+    description="Tcp replication transmitter"
+    domain="Catalina"
+    group="ClusterSender"
+    type="org.apache.catalina.ha.tcp.ReplicationTransmitter">
+    <attribute
+      name="info"
+      description="Class version info"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="replicationMode"
+      description="replication mode (synchnous,pooled.asynchnous,fastasyncqueue)"
+      type="java.lang.String"/>
+    <attribute
+      name="ackTimeout"
+      description="acknowledge timeout"
+      type="long"/>
+    <attribute
+      name="autoConnect"
+      description="is sender disabled, fork a new socket"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="waitForAck"
+      description="Wait for ack after data send"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="processingTime"
+      description="sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minProcessingTime"
+      description="minimal sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgProcessingTime"
+      description="processing time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxProcessingTime"
+      description="maximal sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doTransmitterProcessingStats"
+      description="create processing time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="nrOfRequests"
+      description="number of send messages to other members"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalBytes"
+      description="number of bytes transfered"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="failureCounter"
+      description="number of wrong transfers"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="senderObjectNames"
+      description="get all sender object names"
+      type="[Ljavax.management.ObjectName;"
+      writeable="false"/>
+    <operation
+      name="start"
+      description="Start the cluster"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="stop"
+      description="Stop the cluster"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="checkKeepAlive"
+      description="Check all sender connection for close socket (keepalive)"
+      impact="ACTION"
+      returnType="void">    </operation>
   </mbean>
-
-  <mbean         name="AsyncSocketSender"
-          description="Async Cluster Sender"
-               domain="Catalina"
-                group="IDataSender"
-                 type="org.apache.catalina.ha.tcp.AsyncSocketSender">
-    <attribute   name="info"
-          description="Class version info"
-                 type="java.lang.String"
-                 writeable="false"/>
-    <attribute   name="address"
-          description="sender ip address"
-                 type="java.net.InetAddress"
-                 writeable="false"/>
-    <attribute   name="port"
-          description="sender port"
-                 type="int"
-                 writeable="false" />
-    <attribute   name="suspect"
-          description="Socket is gone"
-                 type="boolean"/>
-    <attribute   name="waitForAck"
-          description="Wait for ack after data send"
-                            is="true"
-                 type="boolean"
-                 writeable="false"/>
-    <attribute   name="ackTimeout"
-          description="acknowledge timeout"
-                 type="long"/>                 
-    <attribute   name="avgMessageSize"
-                 writeable="false"
-          description="avg message size (totalbytes/nrOfRequests"
-                 type="long"/>
-    <attribute   name="queueSize"
-                 writeable="false"
-          description="queue size"
-                 type="int"/>
-    <attribute   name="queuedNrOfBytes"
-                 writeable="false"
-          description="number of bytes over all queued messages"
-                 type="long"/>
-    <attribute   name="messageTransferStarted"
-          description="message is in transfer"
-                 type="boolean"
-                 is="true"
-                 writeable="false"/>
-    <attribute   name="keepAliveTimeout"
-          description="active socket keep alive timeout"
-                 type="long"/>
-    <attribute   name="keepAliveMaxRequestCount"
-          description="max request over this socket"
-                 type="int"/>
-    <attribute   name="keepAliveCount"
-          description="keep Alive request count"
-                 type="int"
-                 writeable="false"/>
-    <attribute   name="keepAliveConnectTime"
-          description="Connect time for keep alive"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="resend"
-          description="after send failure make a resend"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="connected"
-                 is="true"
-          description="socket connected"
-                 type="boolean"
-                 writeable="false"/>
-    <attribute   name="nrOfRequests"
-          description="number of send messages to other members"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalBytes"
-          description="number of bytes transfered"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="processingTime"
-          description="sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minProcessingTime"
-          description="minimal sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgProcessingTime"
-          description="processing time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxProcessingTime"
-          description="maximal sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doProcessingStats"
-          description="create processing time stats"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="waitAckTime"
-          description="sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minWaitAckTime"
-          description="minimal sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgWaitAckTime"
-          description="waitAck time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxWaitAckTime"
-          description="maximal sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doWaitAckStats"
-          description="create waitAck time stats"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="connectCounter"
-          description="counts connects"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="disconnectCounter"
-          description="counts disconnects"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="socketOpenCounter"
-          description="counts open socket (KeepAlive and connects)"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="socketOpenFailureCounter"
-          description="counts open socket failures"
-                 type="long"
-                 writeable="false"/>                                            
-    <attribute   name="socketCloseCounter"
-          description="counts closed socket (KeepAlive and disconnects)"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="missingAckCounter"
-          description="counts missing ack"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="dataResendCounter"
-          description="counts data resends"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="dataFailureCounter"
-          description="counts data send failures"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="inQueueCounter"
-          description="counts all queued messages"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="outQueueCounter"
-          description="counts all successfully sended messages"
-                 type="long"
-                 writeable="false"/>
-       <operation name="connect"
-               description="connect to other replication node"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="disconnect"
-               description="disconnect to other replication node"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="checkKeepAlive"
-               description="Check connection for close socket"
-               impact="ACTION"
-               returnType="boolean">
-    </operation>
-       <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-                                
+  <mbean
+    name="AsyncSocketSender"
+    description="Async Cluster Sender"
+    domain="Catalina"
+    group="IDataSender"
+    type="org.apache.catalina.ha.tcp.AsyncSocketSender">
+    <attribute
+      name="info"
+      description="Class version info"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="address"
+      description="sender ip address"
+      type="java.net.InetAddress"
+      writeable="false"/>
+    <attribute
+      name="port"
+      description="sender port"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="suspect"
+      description="Socket is gone"
+      type="boolean"/>
+    <attribute
+      name="waitForAck"
+      description="Wait for ack after data send"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="ackTimeout"
+      description="acknowledge timeout"
+      type="long"/>
+    <attribute
+      name="avgMessageSize"
+      writeable="false"
+      description="avg message size (totalbytes/nrOfRequests"
+      type="long"/>
+    <attribute
+      name="queueSize"
+      writeable="false"
+      description="queue size"
+      type="int"/>
+    <attribute
+      name="queuedNrOfBytes"
+      writeable="false"
+      description="number of bytes over all queued messages"
+      type="long"/>
+    <attribute
+      name="messageTransferStarted"
+      description="message is in transfer"
+      type="boolean"
+      is="true"
+      writeable="false"/>
+    <attribute
+      name="keepAliveTimeout"
+      description="active socket keep alive timeout"
+      type="long"/>
+    <attribute
+      name="keepAliveMaxRequestCount"
+      description="max request over this socket"
+      type="int"/>
+    <attribute
+      name="keepAliveCount"
+      description="keep Alive request count"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="keepAliveConnectTime"
+      description="Connect time for keep alive"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="resend"
+      description="after send failure make a resend"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="connected"
+      is="true"
+      description="socket connected"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="nrOfRequests"
+      description="number of send messages to other members"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalBytes"
+      description="number of bytes transfered"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="processingTime"
+      description="sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minProcessingTime"
+      description="minimal sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgProcessingTime"
+      description="processing time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxProcessingTime"
+      description="maximal sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doProcessingStats"
+      description="create processing time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="waitAckTime"
+      description="sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minWaitAckTime"
+      description="minimal sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgWaitAckTime"
+      description="waitAck time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxWaitAckTime"
+      description="maximal sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doWaitAckStats"
+      description="create waitAck time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="connectCounter"
+      description="counts connects"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="disconnectCounter"
+      description="counts disconnects"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketOpenCounter"
+      description="counts open socket (KeepAlive and connects)"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketOpenFailureCounter"
+      description="counts open socket failures"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketCloseCounter"
+      description="counts closed socket (KeepAlive and disconnects)"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="missingAckCounter"
+      description="counts missing ack"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="dataResendCounter"
+      description="counts data resends"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="dataFailureCounter"
+      description="counts data send failures"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="inQueueCounter"
+      description="counts all queued messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="outQueueCounter"
+      description="counts all successfully sended messages"
+      type="long"
+      writeable="false"/>
+    <operation
+      name="connect"
+      description="connect to other replication node"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="disconnect"
+      description="disconnect to other replication node"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="checkKeepAlive"
+      description="Check connection for close socket"
+      impact="ACTION"
+      returnType="boolean">    </operation>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
   </mbean>
-
- <mbean         name="FastAsyncSocketSender"
-          description="Fast Async Cluster Sender"
-               domain="Catalina"
-                group="IDataSender"
-                 type="org.apache.catalina.ha.tcp.FastAsyncSocketSender">
-    <attribute   name="info"
-          description="Class version info"
-                 type="java.lang.String"
-                 writeable="false"/>
-    <attribute   name="threadPriority"
-          description="change queue thread priority"
-                 type="int"/>                 
-    <attribute   name="address"
-          description="sender ip address"
-                 type="java.net.InetAddress"
-                 writeable="false"/>
-    <attribute   name="port"
-          description="sender port"
-                 type="int"
-                 writeable="false" />
-    <attribute   name="suspect"
-          description="Socket is gone"
-                 type="boolean"/>
-    <attribute   name="waitForAck"
-          description="Wait for ack after data send"
-                            is="true"
-                 type="boolean"
-                 writeable="false"/>
-    <attribute   name="ackTimeout"
-          description="acknowledge timeout"
-                 type="long"/>
-    <attribute   name="avgMessageSize"
-                 writeable="false"
-          description="avg message size (totalbytes/nrOfRequests"
-                 type="long" />
-    <attribute   name="queueSize"
-                 writeable="false"
-          description="queue size"
-                 type="int"/>
-    <attribute   name="queuedNrOfBytes"
-                 writeable="false"
-          description="number of bytes over all queued messages"
-                 type="long"/>
-    <attribute   name="messageTransferStarted"
-          description="message is in transfer"
-                 type="boolean"
-                 is="true"
-                 writeable="false"/>
-    <attribute   name="keepAliveTimeout"
-          description="active socket keep alive timeout"
-                 type="long"/>
-    <attribute   name="keepAliveMaxRequestCount"
-          description="max request over this socket"
-                 type="int"/>
-    <attribute   name="queueAddWaitTimeout"
-          description="add wait timeout (default 10000 msec)"
-                 type="long"/>
-    <attribute   name="queueRemoveWaitTimeout"
-          description="remove wait timeout (default 30000 msec)"
-                 type="long"/>
-    <attribute   name="maxQueueLength"
-          description="max queue length"
-                 type="int"/>
-    <attribute   name="queueTimeWait"
-          description="remember queue wait times"
-                 is="true"
-                 type="boolean"/>
-    <attribute   name="queueCheckLock"
-          description="check to lost locks"
-                 is="true"
-                 type="boolean"/>
-    <attribute   name="queueDoStats"
-          description="activated queue stats"
-                 is="true"
-                 type="boolean"/>
-    <attribute   name="keepAliveCount"
-          description="keep Alive request count"
-                 type="int"
-                 writeable="false"/>
-    <attribute   name="keepAliveConnectTime"
-          description="Connect time for keep alive"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="resend"
-          description="after send failure make a resend"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="connected"
-                 is="true"
-          description="socket connected"
-                 type="boolean"
-                 writeable="false"/>
-    <attribute   name="nrOfRequests"
-          description="number of send messages to other members"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalBytes"
-          description="number of bytes transfered"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="processingTime"
-          description="sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minProcessingTime"
-          description="minimal sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgProcessingTime"
-          description="processing time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxProcessingTime"
-          description="maximal sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doProcessingStats"
-          description="create Processing time stats"
-                            is="true"
-                 type="boolean" />                 
-    <attribute   name="waitAckTime"
-          description="sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minWaitAckTime"
-          description="minimal sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgWaitAckTime"
-          description="waitAck time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxWaitAckTime"
-          description="maximal sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doWaitAckStats"
-          description="create waitAck time stats"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="connectCounter"
-          description="counts connects"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="disconnectCounter"
-          description="counts disconnects"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="socketOpenCounter"
-          description="counts open socket (KeepAlive and connects)"
-                 type="long"
-                 writeable="false"/>                            
-    <attribute   name="socketOpenFailureCounter"
-          description="counts open socket failures"
-                 type="long"
-                 writeable="false"/>                                            
-    <attribute   name="socketCloseCounter"
-          description="counts closed socket (KeepAlive and disconnects)"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="missingAckCounter"
-          description="counts missing ack"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="dataResendCounter"
-          description="counts data resends"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="dataFailureCounter"
-          description="counts data send failures"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="inQueueCounter"
-          description="counts all queued messages"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="outQueueCounter"
-          description="counts all successfully sended messages"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="queueAddWaitTime"
-          description="queue add wait time (tomcat thread waits)"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="queueRemoveWaitTime"
-          description="queue remove wait time (queue thread waits)"
-                 type="long"
-                 writeable="false"/>
-       <operation name="connect"
-               description="connect to other replication node"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="disconnect"
-               description="disconnect to other replication node"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="checkKeepAlive"
-               description="Check connection for close socket"
-               impact="ACTION"
-               returnType="boolean">
-    </operation>
-       <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-                                
+  <mbean
+    name="FastAsyncSocketSender"
+    description="Fast Async Cluster Sender"
+    domain="Catalina"
+    group="IDataSender"
+    type="org.apache.catalina.ha.tcp.FastAsyncSocketSender">
+    <attribute
+      name="info"
+      description="Class version info"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="threadPriority"
+      description="change queue thread priority"
+      type="int"/>
+    <attribute
+      name="address"
+      description="sender ip address"
+      type="java.net.InetAddress"
+      writeable="false"/>
+    <attribute
+      name="port"
+      description="sender port"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="suspect"
+      description="Socket is gone"
+      type="boolean"/>
+    <attribute
+      name="waitForAck"
+      description="Wait for ack after data send"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="ackTimeout"
+      description="acknowledge timeout"
+      type="long"/>
+    <attribute
+      name="avgMessageSize"
+      writeable="false"
+      description="avg message size (totalbytes/nrOfRequests"
+      type="long"/>
+    <attribute
+      name="queueSize"
+      writeable="false"
+      description="queue size"
+      type="int"/>
+    <attribute
+      name="queuedNrOfBytes"
+      writeable="false"
+      description="number of bytes over all queued messages"
+      type="long"/>
+    <attribute
+      name="messageTransferStarted"
+      description="message is in transfer"
+      type="boolean"
+      is="true"
+      writeable="false"/>
+    <attribute
+      name="keepAliveTimeout"
+      description="active socket keep alive timeout"
+      type="long"/>
+    <attribute
+      name="keepAliveMaxRequestCount"
+      description="max request over this socket"
+      type="int"/>
+    <attribute
+      name="queueAddWaitTimeout"
+      description="add wait timeout (default 10000 msec)"
+      type="long"/>
+    <attribute
+      name="queueRemoveWaitTimeout"
+      description="remove wait timeout (default 30000 msec)"
+      type="long"/>
+    <attribute
+      name="maxQueueLength"
+      description="max queue length"
+      type="int"/>
+    <attribute
+      name="queueTimeWait"
+      description="remember queue wait times"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="queueCheckLock"
+      description="check to lost locks"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="queueDoStats"
+      description="activated queue stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="keepAliveCount"
+      description="keep Alive request count"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="keepAliveConnectTime"
+      description="Connect time for keep alive"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="resend"
+      description="after send failure make a resend"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="connected"
+      is="true"
+      description="socket connected"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="nrOfRequests"
+      description="number of send messages to other members"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalBytes"
+      description="number of bytes transfered"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="processingTime"
+      description="sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minProcessingTime"
+      description="minimal sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgProcessingTime"
+      description="processing time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxProcessingTime"
+      description="maximal sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doProcessingStats"
+      description="create Processing time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="waitAckTime"
+      description="sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minWaitAckTime"
+      description="minimal sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgWaitAckTime"
+      description="waitAck time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxWaitAckTime"
+      description="maximal sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doWaitAckStats"
+      description="create waitAck time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="connectCounter"
+      description="counts connects"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="disconnectCounter"
+      description="counts disconnects"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketOpenCounter"
+      description="counts open socket (KeepAlive and connects)"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketOpenFailureCounter"
+      description="counts open socket failures"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketCloseCounter"
+      description="counts closed socket (KeepAlive and disconnects)"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="missingAckCounter"
+      description="counts missing ack"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="dataResendCounter"
+      description="counts data resends"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="dataFailureCounter"
+      description="counts data send failures"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="inQueueCounter"
+      description="counts all queued messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="outQueueCounter"
+      description="counts all successfully sended messages"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="queueAddWaitTime"
+      description="queue add wait time (tomcat thread waits)"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="queueRemoveWaitTime"
+      description="queue remove wait time (queue thread waits)"
+      type="long"
+      writeable="false"/>
+    <operation
+      name="connect"
+      description="connect to other replication node"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="disconnect"
+      description="disconnect to other replication node"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="checkKeepAlive"
+      description="Check connection for close socket"
+      impact="ACTION"
+      returnType="boolean">    </operation>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
   </mbean>
-
-  <mbean         name="PooledSocketSender"
-          description="Pooled Cluster Sender"
-               domain="Catalina"
-                group="IDataSender"
-                 type="org.apache.catalina.ha.tcp.PooledSocketSender">
-    <attribute   name="address"
-          description="sender ip address"
-                 type="java.net.InetAddress"
-                 writeable="false"/>
-    <attribute   name="port"
-          description="sender port"
-                 type="int"
-                 writeable="false" />
-    <attribute   name="suspect"
-          description="Socket is gone"
-                 type="boolean"/>
-    <attribute   name="ackTimeout"
-          description="acknowledge timeout"
-                 type="long"/>
-    <attribute   name="waitForAck"
-          description="Wait for ack after data send"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-    <attribute   name="maxPoolSocketLimit"
-          description="Max parallel sockets"
-                 type="int"/>
-    <attribute   name="keepAliveTimeout"
-          description="active socket keep alive timeout"
-                 type="long"/>
-    <attribute   name="keepAliveMaxRequestCount"
-          description="max request over this socket"
-                 type="int"/>
-    <attribute   name="resend"
-          description="after send failure make a resend"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="connected"
-                 is="true"
-          description="socket connected"
-                 type="boolean"
-                 writeable="false"/>
-    <attribute   name="avgMessageSize"
-                 writeable="false"
-          description="avg message size (totalbytes/nrOfRequests"
-                 type="long"/>
-    <attribute   name="nrOfRequests"
-          description="number of send messages to other members"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalBytes"
-          description="number of bytes transfered"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="connectCounter"
-          description="counts connects"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="disconnectCounter"
-          description="counts disconnects"
-                 type="long"
-                 writeable="false"/>
-       <operation name="connect"
-               description="start Queue to connect to ohter replication node"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="disconnect"
-               description="stop Queue to other replication node"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-                                
+  <mbean
+    name="PooledSocketSender"
+    description="Pooled Cluster Sender"
+    domain="Catalina"
+    group="IDataSender"
+    type="org.apache.catalina.ha.tcp.PooledSocketSender">
+    <attribute
+      name="address"
+      description="sender ip address"
+      type="java.net.InetAddress"
+      writeable="false"/>
+    <attribute
+      name="port"
+      description="sender port"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="suspect"
+      description="Socket is gone"
+      type="boolean"/>
+    <attribute
+      name="ackTimeout"
+      description="acknowledge timeout"
+      type="long"/>
+    <attribute
+      name="waitForAck"
+      description="Wait for ack after data send"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="maxPoolSocketLimit"
+      description="Max parallel sockets"
+      type="int"/>
+    <attribute
+      name="keepAliveTimeout"
+      description="active socket keep alive timeout"
+      type="long"/>
+    <attribute
+      name="keepAliveMaxRequestCount"
+      description="max request over this socket"
+      type="int"/>
+    <attribute
+      name="resend"
+      description="after send failure make a resend"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="connected"
+      is="true"
+      description="socket connected"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="avgMessageSize"
+      writeable="false"
+      description="avg message size (totalbytes/nrOfRequests"
+      type="long"/>
+    <attribute
+      name="nrOfRequests"
+      description="number of send messages to other members"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalBytes"
+      description="number of bytes transfered"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="connectCounter"
+      description="counts connects"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="disconnectCounter"
+      description="counts disconnects"
+      type="long"
+      writeable="false"/>
+    <operation
+      name="connect"
+      description="start Queue to connect to ohter replication node"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="disconnect"
+      description="stop Queue to other replication node"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
   </mbean>
-
-  <mbean         name="SocketSender"
-          description="Sync Cluster Sender"
-               domain="Catalina"
-                group="IDataSender"
-                 type="org.apache.catalina.ha.tcp.SocketSender">
-    <attribute   name="address"
-          description="sender ip address"
-                 type="java.net.InetAddress"
-                 writeable="false"/>
-    <attribute   name="port"
-          description="sender port"
-                 type="int"
-                 writeable="false" />
-    <attribute   name="suspect"
-          description="Socket is gone"
-                 type="boolean"/>
-    <attribute   name="ackTimeout"
-          description="acknowledge timeout"
-                 type="long"/>
-    <attribute   name="waitForAck"
-          description="Wait for ack after data send"
-                            is="true"
-                 type="boolean"
-                 writeable="false" />
-    <attribute   name="keepAliveTimeout"
-          description="active socket keep alive timeout"
-                 type="long"/>
-    <attribute   name="keepAliveMaxRequestCount"
-          description="max request over this socket"
-                 type="int"/>
-    <attribute   name="messageTransferStarted"
-          description="message is in transfer"
-                 type="boolean"
-                 is="true"
-                 writeable="false"/>
-    <attribute   name="keepAliveCount"
-          description="keep Alive request count"
-                 type="int"
-                 writeable="false"/>
-    <attribute   name="keepAliveConnectTime"
-          description="Connect time for keep alive"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="resend"
-          description="after send failure make a resend"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="connected"
-                 is="true"
-          description="socket connected"
-                 type="boolean"
-                 writeable="false"/>
-    <attribute   name="avgMessageSize"
-                 writeable="false"
-          description="avg message size (totalbytes/nrOfRequests"
-                 type="long"/>
-    <attribute   name="nrOfRequests"
-          description="number of send messages to other members"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalBytes"
-          description="number of bytes transfered"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="processingTime"
-          description="sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minProcessingTime"
-          description="minimal sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgProcessingTime"
-          description="processing time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxProcessingTime"
-          description="maximal sending processing time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doProcessingStats"
-          description="create Processing time stats"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="waitAckTime"
-          description="sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="minWaitAckTime"
-          description="minimal sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="avgWaitAckTime"
-          description="waitAck time / nrOfRequests"
-                 type="double"
-                 writeable="false"/>
-    <attribute   name="maxWaitAckTime"
-          description="maximal sending waitAck time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="doWaitAckStats"
-          description="create waitAck time stats"
-                            is="true"
-                 type="boolean" />
-    <attribute   name="connectCounter"
-          description="counts connects"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="disconnectCounter"
-          description="counts disconnects"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="socketCloseCounter"
-          description="counts closed socket (KeepAlive and disconnects)"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="socketOpenFailureCounter"
-          description="counts open socket failures"
-                 type="long"
-                 writeable="false"/>                                            
-    <attribute   name="socketOpenCounter"
-          description="counts open socket (KeepAlive and connects)"
-                 type="long"
-                 writeable="false"/>                            
-    <attribute   name="missingAckCounter"
-          description="counts missing ack"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="dataResendCounter"
-          description="counts data resends"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="dataFailureCounter"
-          description="counts data send failures"
-                 type="long"
-                 writeable="false"/>
-       <operation name="connect"
-               description="connect to other replication node"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="disconnect"
-               description="disconnect to other replication node"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-       <operation name="checkKeepAlive"
-               description="Check connection for close socket"
-               impact="ACTION"
-               returnType="boolean">
-    </operation>
-       <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-                                
+  <mbean
+    name="SocketSender"
+    description="Sync Cluster Sender"
+    domain="Catalina"
+    group="IDataSender"
+    type="org.apache.catalina.ha.tcp.SocketSender">
+    <attribute
+      name="address"
+      description="sender ip address"
+      type="java.net.InetAddress"
+      writeable="false"/>
+    <attribute
+      name="port"
+      description="sender port"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="suspect"
+      description="Socket is gone"
+      type="boolean"/>
+    <attribute
+      name="ackTimeout"
+      description="acknowledge timeout"
+      type="long"/>
+    <attribute
+      name="waitForAck"
+      description="Wait for ack after data send"
+      is="true"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="keepAliveTimeout"
+      description="active socket keep alive timeout"
+      type="long"/>
+    <attribute
+      name="keepAliveMaxRequestCount"
+      description="max request over this socket"
+      type="int"/>
+    <attribute
+      name="messageTransferStarted"
+      description="message is in transfer"
+      type="boolean"
+      is="true"
+      writeable="false"/>
+    <attribute
+      name="keepAliveCount"
+      description="keep Alive request count"
+      type="int"
+      writeable="false"/>
+    <attribute
+      name="keepAliveConnectTime"
+      description="Connect time for keep alive"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="resend"
+      description="after send failure make a resend"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="connected"
+      is="true"
+      description="socket connected"
+      type="boolean"
+      writeable="false"/>
+    <attribute
+      name="avgMessageSize"
+      writeable="false"
+      description="avg message size (totalbytes/nrOfRequests"
+      type="long"/>
+    <attribute
+      name="nrOfRequests"
+      description="number of send messages to other members"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalBytes"
+      description="number of bytes transfered"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="processingTime"
+      description="sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minProcessingTime"
+      description="minimal sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgProcessingTime"
+      description="processing time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxProcessingTime"
+      description="maximal sending processing time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doProcessingStats"
+      description="create Processing time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="waitAckTime"
+      description="sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="minWaitAckTime"
+      description="minimal sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="avgWaitAckTime"
+      description="waitAck time / nrOfRequests"
+      type="double"
+      writeable="false"/>
+    <attribute
+      name="maxWaitAckTime"
+      description="maximal sending waitAck time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="doWaitAckStats"
+      description="create waitAck time stats"
+      is="true"
+      type="boolean"/>
+    <attribute
+      name="connectCounter"
+      description="counts connects"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="disconnectCounter"
+      description="counts disconnects"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketCloseCounter"
+      description="counts closed socket (KeepAlive and disconnects)"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketOpenFailureCounter"
+      description="counts open socket failures"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="socketOpenCounter"
+      description="counts open socket (KeepAlive and connects)"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="missingAckCounter"
+      description="counts missing ack"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="dataResendCounter"
+      description="counts data resends"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="dataFailureCounter"
+      description="counts data send failures"
+      type="long"
+      writeable="false"/>
+    <operation
+      name="connect"
+      description="connect to other replication node"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="disconnect"
+      description="disconnect to other replication node"
+      impact="ACTION"
+      returnType="void">    </operation>
+    <operation
+      name="checkKeepAlive"
+      description="Check connection for close socket"
+      impact="ACTION"
+      returnType="boolean">    </operation>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
   </mbean>
-    
-  <mbean         name="ReplicationValve"
-          description="Valve for simple tcp replication"
-               domain="Catalina"
-                group="Valve"
-                 type="org.apache.catalina.ha.tcp.ReplicationValve">
-    <attribute   name="info"
-          description="Class version info"
-                 type="java.lang.String"
-                 writeable="false"/>
-    <attribute   name="filter"
-          description="resource filter to disable session replication check"
-                 type="java.lang.String"/>
-    <attribute   name="primaryIndicator"
-                            is="true"
-          description="set indicator that request processing is at primary session node"
-                 type="boolean"/>
-    <attribute   name="primaryIndicatorName"
-          description="Request attribute name to indicate that request processing is at primary session node"
-                 type="java.lang.String"/>
-    <attribute   name="doProcessingStats"
-                            is="true"
-          description="active statistics counting"
-                 type="boolean"/>
-       <attribute   name="nrOfRequests"
-          description="number of replicated requests"
-                 type="long"
-                 writeable="false"/>
-       <attribute   name="nrOfFilterRequests"
-          description="number of filtered requests"
-                 type="long"
-                 writeable="false"/>
-       <attribute   name="nrOfSendRequests"
-          description="number of send requests"
-                 type="long"
-                 writeable="false"/>
-       <attribute   name="nrOfCrossContextSendRequests"
-          description="number of send cross context session requests"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalRequestTime"
-          description="total replicated request time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="totalSendTime"
-          description="total replicated send time"
-                 type="long"
-                 writeable="false"/>
-    <attribute   name="lastSendTime"
-          description="last replicated request time"
-                 type="long"
-                 writeable="false"/>
-    <operation name="resetStatistics"
-               description="Reset all statistics"
-               impact="ACTION"
-               returnType="void">
-    </operation>
-                 
+  <mbean
+    name="ReplicationValve"
+    description="Valve for simple tcp replication"
+    domain="Catalina"
+    group="Valve"
+    type="org.apache.catalina.ha.tcp.ReplicationValve">
+    <attribute
+      name="info"
+      description="Class version info"
+      type="java.lang.String"
+      writeable="false"/>
+    <attribute
+      name="filter"
+      description="resource filter to disable session replication check"
+      type="java.lang.String"/>
+    <attribute
+      name="primaryIndicator"
+      is="true"
+      description="set indicator that request processing is at primary session node"
+      type="boolean"/>
+    <attribute
+      name="primaryIndicatorName"
+      description="Request attribute name to indicate that request processing is at primary session node"
+      type="java.lang.String"/>
+    <attribute
+      name="doProcessingStats"
+      is="true"
+      description="active statistics counting"
+      type="boolean"/>
+    <attribute
+      name="nrOfRequests"
+      description="number of replicated requests"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="nrOfFilterRequests"
+      description="number of filtered requests"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="nrOfSendRequests"
+      description="number of send requests"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="nrOfCrossContextSendRequests"
+      description="number of send cross context session requests"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalRequestTime"
+      description="total replicated request time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="totalSendTime"
+      description="total replicated send time"
+      type="long"
+      writeable="false"/>
+    <attribute
+      name="lastSendTime"
+      description="last replicated request time"
+      type="long"
+      writeable="false"/>
+    <operation
+      name="resetStatistics"
+      description="Reset all statistics"
+      impact="ACTION"
+      returnType="void">    </operation>
+  </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>