Author: fhanik
Date: Wed Aug 8 18:54:34 2007
New Revision: 564069
URL: http://svn.apache.org/viewvc?view=rev&rev=564069
Log:
Setup framework for cluster JMX operations
Added:
tomcat/trunk/java/org/apache/catalina/ha/jmx/
tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java
Modified:
tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml
tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
tomcat/trunk/java/org/apache/catalina/ha/tcp/mbeans-descriptors.xml
Modified:
tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
---
tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
(original)
+++
tomcat/trunk/java/org/apache/catalina/ha/authenticator/mbeans-descriptors.xml
Wed Aug 8 18:54:34 2007
@@ -1,25 +1,23 @@
<?xml version="1.0"?>
<mbeans-descriptors>
-
- <mbean name="ClusterSingleSignOn"
- description="A Valve that supports a 'single signon' user experience
on a whole cluster"
- domain="Catalina"
- group="Valve"
- type="org.apache.catalina.cluster.authenticator.ClusterSingleSignOn">
-
- <attribute name="className"
- description="Fully qualified class name of the managed object"
- type="java.lang.String"
- writeable="false"/>
-
- <attribute name="requireReauthentication"
- description="Should we attempt to reauthenticate each request
against the security Realm?"
- type="boolean"/>
-
- <attribute name="cookieDomain"
- description="(Optiona) Domain to be used by sso cookies"
- type="java.lang.String" />
-
+ <mbean
+ name="ClusterSingleSignOn"
+ description="A Valve that supports a 'single signon' user experience on a
whole cluster"
+ domain="Catalina"
+ group="Valve"
+ type="org.apache.catalina.cluster.authenticator.ClusterSingleSignOn">
+ <attribute
+ name="className"
+ description="Fully qualified class name of the managed object"
+ type="java.lang.String"
+ writeable="false"/>
+ <attribute
+ name="requireReauthentication"
+ description="Should we attempt to reauthenticate each request against
the security Realm?"
+ type="boolean"/>
+ <attribute
+ name="cookieDomain"
+ description="(Optiona) Domain to be used by sso cookies"
+ type="java.lang.String"/>
</mbean>
-
</mbeans-descriptors>
Modified: tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/deploy/mbeans-descriptors.xml Wed
Aug 8 18:54:34 2007
@@ -1,11 +1,10 @@
<?xml version="1.0"?>
<mbeans-descriptors>
- <mbean
+ <mbean
name="FarmWarDeployer"
className="org.apache.catalina.mbeans.ClassNameMBean"
description="Farm Deployer - Broken"
domain="Catalina"
group="Cluster"
- type="org.apache.catalina.ha.deploy.FarmWarDeployer">
- </mbean>
+ type="org.apache.catalina.ha.deploy.FarmWarDeployer"> </mbean>
</mbeans-descriptors>
Added: tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java?view=auto&rev=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java (added)
+++ tomcat/trunk/java/org/apache/catalina/ha/jmx/ClusterJmxHelper.java Wed Aug
8 18:54:34 2007
@@ -0,0 +1,130 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.catalina.ha.jmx;
+
+import org.apache.tomcat.util.modeler.Registry;
+import org.apache.catalina.ha.CatalinaCluster;
+import org.apache.juli.logging.Log;
+import org.apache.juli.logging.LogFactory;
+import org.apache.catalina.ha.tcp.SimpleTcpCluster;
+import org.apache.catalina.ha.session.DeltaManager;
+import org.apache.catalina.ha.deploy.FarmWarDeployer;
+import org.apache.catalina.ha.authenticator.ClusterSingleSignOn;
+import org.apache.catalina.core.StandardHost;
+import javax.management.ObjectName;
+import org.apache.catalina.core.StandardEngine;
+import javax.management.MBeanServerFactory;
+import javax.management.MBeanServer;
+import javax.management.modelmbean.ModelMBean;
+import org.apache.tomcat.util.modeler.ManagedBean;
+import javax.management.DynamicMBean;
+
+public class ClusterJmxHelper {
+
+ protected static Registry registry = Registry.getRegistry(null,null);
+
+ protected static Log log = LogFactory.getLog(ClusterJmxHelper.class);
+
+ protected static boolean jmxEnabled = true;
+
+ protected static MBeanServer mbeanServer = null;
+
+ public static Registry getRegistry() {
+ return registry;
+ }
+
+ public static MBeanServer getMBeanServer() throws Exception {
+ if (mbeanServer == null) {
+ if (MBeanServerFactory.findMBeanServer(null).size() > 0) {
+ mbeanServer = (MBeanServer)
MBeanServerFactory.findMBeanServer(null).get(0);
+ } else {
+ mbeanServer = MBeanServerFactory.createMBeanServer();
+ }
+ }
+ return mbeanServer;
+ }
+
+ protected static boolean initMetaData(Class clazz) {
+ try {
+ if (clazz==null) return false;
+
getRegistry().loadMetadata(clazz.getResourceAsStream("mbeans-descriptors.xml"));
+ }catch (Exception x) {
+ log.warn("Unable to load meta data for class:"+clazz.getName());
+ return false;
+ }
+ return true;
+ }
+
+ public static DynamicMBean getManagedBean(Object object) throws Exception {
+ DynamicMBean mbean = null;
+ if (getRegistry() != null) {
+ ManagedBean managedBean =
registry.findManagedBean(object.getClass().getName());
+ mbean = managedBean.createMBean(object);
+ }
+ return mbean;
+ }
+
+
+ protected static void initDefaultCluster() {
+ initMetaData(SimpleTcpCluster.class);
+ initMetaData(DeltaManager.class);
+ initMetaData(FarmWarDeployer.class); //not functional yet
+ initMetaData(ClusterSingleSignOn.class); //not functional yet
+ }
+
+ public static boolean registerDefaultCluster(SimpleTcpCluster cluster) {
+ try {
+ initDefaultCluster();
+ ObjectName clusterName = getDefaultClusterName(cluster);
+ if (!getMBeanServer().isRegistered(clusterName)) {
+ getMBeanServer().registerMBean(getManagedBean(cluster),
clusterName);
+ }
+ return true;
+ }catch ( Exception x ) {
+ log.warn("Unable to register default cluster implementation with
JMX",x);
+ return false;
+ }
+ }
+
+ public static boolean unregisterDefaultCluster(SimpleTcpCluster cluster)
throws Exception {
+ ObjectName clusterName = getDefaultClusterName(cluster);
+ if (getMBeanServer().isRegistered(clusterName)) {
+ getMBeanServer().unregisterMBean(clusterName);
+ }
+ return true;
+ }
+
+ private static ObjectName getDefaultClusterName(SimpleTcpCluster cluster)
throws Exception {
+ String domain = getMBeanServer().getDefaultDomain();
+ String type = ":type=";
+ boolean hostParent = false;
+ //Step 1. Register the Cluster MBean
+ String clusterType= type+"Cluster";
+ if (cluster.getContainer() instanceof StandardHost) {
+ domain = ((StandardHost) cluster.getContainer()).getDomain();
+ clusterType += ",host=" + cluster.getContainer().getName();
+ hostParent = true;
+ } else {
+ if (cluster.getContainer() instanceof StandardEngine) {
+ domain = ((StandardEngine) cluster.getContainer()).getDomain();
+ }
+ }
+ ObjectName clusterName = new ObjectName(domain + clusterType);
+ return clusterName;
+ }
+
+}
\ No newline at end of file
Modified: tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml (original)
+++ tomcat/trunk/java/org/apache/catalina/ha/mbeans-descriptors.xml Wed Aug 8
18:54:34 2007
@@ -1,90 +1,4 @@
<?xml version="1.0"?>
<mbeans-descriptors>
-
- <mbean name="SimpleTcpCluster"
- className="org.apache.catalina.mbeans.ClassNameMBean"
- description="Tcp Cluster implementation"
- domain="Catalina"
- group="Cluster"
- type="org.apache.catalina.ha.tcp.SimpleTcpCluster">
-
- </mbean>
-
-
- <mbean name="SimpleTcpReplicationManager"
- className="org.apache.catalina.mbeans.ClassNameMBean"
- description="Clustered implementation of the Manager interface"
- domain="Catalina"
- group="Manager"
- type="org.apache.catalina.ha.tcp.SimpleTcpReplicationManager">
-
- <attribute name="algorithm"
- description="The message digest algorithm to be used when generating
- session identifiers"
- type="java.lang.String"/>
-
- <attribute name="checkInterval"
- description="The interval (in seconds) between checks for expired
- sessions"
- type="int"/>
-
- <attribute name="className"
- description="Fully qualified class name of the managed object"
- type="java.lang.String"
- writeable="false"/>
-
- <attribute name="distributable"
- description="The distributable flag for Sessions created by this
- Manager"
- type="boolean"/>
-
- <attribute name="entropy"
- description="A String initialization parameter used to increase the
- entropy of the initialization of our random number
- generator"
- type="java.lang.String"/>
-
- <attribute name="managedResource"
- description="The managed resource this MBean is associated with"
- type="java.lang.Object"/>
-
- <attribute name="maxActiveSessions"
- description="The maximum number of active Sessions allowed, or -1
- for no limit"
- type="int"/>
-
- <attribute name="maxInactiveInterval"
- description="The default maximum inactive interval for Sessions
- created by this Manager"
- type="int"/>
-
- <attribute name="name"
- description="The descriptive name of this Manager implementation
- (for logging)"
- type="java.lang.String"
- writeable="false"/>
-
- </mbean>
-
-
-
-<mbean name="ReplicationValve"
- className="org.apache.catalina.mbeans.ClassNameMBean"
- description="Valve for simple tcp replication"
- domain="Catalina"
- group="Valve"
- type="org.apache.catalina.ha.tcp.ReplicationValve">
-
- <attribute name="className"
- description="Fully qualified class name of the managed object"
- type="java.lang.String"
- writeable="false"/>
-
- <attribute name="debug"
- description="The debugging detail level for this component"
- type="int"/>
-
- </mbean>
-
-
+
</mbeans-descriptors>
Modified:
tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/session/mbeans-descriptors.xml Wed
Aug 8 18:54:34 2007
@@ -3,318 +3,386 @@
"-//Apache Software Foundation//DTD Model MBeans Configuration File"
"http://jakarta.apache.org/commons/dtds/mbeans-descriptors.dtd">
<mbeans-descriptors>
- <mbean name="JvmRouteBinderValve" description="mod_jk jvmRoute jsessionid
cookie backup correction" domain="Catalina"
- group="Valve"
type="org.apache.catalina.ha.session.JvmRouteBinderValve">
- <attribute name="className"
- description="Fully qualified class name of the managed object"
- type="java.lang.String"
- writeable="false"/>
- <attribute name="info"
- description="describe version"
type="java.lang.String" writeable="false"/>
- <attribute name="enabled"
- description="enable a jvm Route check"
type="boolean"/>
- <attribute name="numberOfSessions"
- description="number of jvmRoute session corrections"
type="long" writeable="false"/>
- <attribute name="sessionIdAttribute"
- description="Name of attribute with sessionid value before
turnover a session"
- type="java.lang.String"
- />
- <operation name="start" description="Stops the Cluster
JvmRouteBinderValve"
- impact="ACTION" returnType="void"/>
- <operation name="stop" description="Stops the Cluster
JvmRouteBinderValve"
- impact="ACTION" returnType="void"/>
- </mbean>
- <mbean name="JvmRouteSessionIDBinderListener"
- description="Monitors the jvmRoute activity"
- domain="Catalina"
- group="Listener"
-
type="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
- <attribute name="info"
- description="describe version"
type="java.lang.String" writeable="false"/>
- <attribute name="numberOfSessions"
- description="number of jvmRoute session corrections"
- type="long"
- writeable="false"/>
- </mbean>
-
- <mbean name="DeltaManager"
- description="Cluster Manager implementation of the Manager interface"
- domain="Catalina"
- group="Manager"
- type="org.apache.catalina.ha.session.DeltaManager">
-
- <attribute name="info"
- description="describe version"
- type="java.lang.String"
- writeable="false"/>
-
- <attribute name="algorithm"
- description="The message digest algorithm to be used when generating
+ <mbean
+ name="JvmRouteBinderValve"
+ description="mod_jk jvmRoute jsessionid cookie backup correction"
+ domain="Catalina"
+ group="Valve"
+ type="org.apache.catalina.ha.session.JvmRouteBinderValve">
+ <attribute
+ name="className"
+ description="Fully qualified class name of the managed object"
+ type="java.lang.String"
+ writeable="false"/>
+ <attribute
+ name="info"
+ description="describe version"
+ type="java.lang.String"
+ writeable="false"/>
+ <attribute
+ name="enabled"
+ description="enable a jvm Route check"
+ type="boolean"/>
+ <attribute
+ name="numberOfSessions"
+ description="number of jvmRoute session corrections"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="sessionIdAttribute"
+ description="Name of attribute with sessionid value before turnover a
session"
+ type="java.lang.String"/>
+ <operation
+ name="start"
+ description="Stops the Cluster JvmRouteBinderValve"
+ impact="ACTION"
+ returnType="void"/>
+ <operation
+ name="stop"
+ description="Stops the Cluster JvmRouteBinderValve"
+ impact="ACTION"
+ returnType="void"/>
+ </mbean>
+ <mbean
+ name="JvmRouteSessionIDBinderListener"
+ description="Monitors the jvmRoute activity"
+ domain="Catalina"
+ group="Listener"
+ type="org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener">
+ <attribute
+ name="info"
+ description="describe version"
+ type="java.lang.String"
+ writeable="false"/>
+ <attribute
+ name="numberOfSessions"
+ description="number of jvmRoute session corrections"
+ type="long"
+ writeable="false"/>
+ </mbean>
+ <mbean
+ name="DeltaManager"
+ description="Cluster Manager implementation of the Manager interface"
+ domain="Catalina"
+ group="Manager"
+ type="org.apache.catalina.ha.session.DeltaManager">
+ <attribute
+ name="info"
+ description="describe version"
+ type="java.lang.String"
+ writeable="false"/>
+ <attribute
+ name="algorithm"
+ description="The message digest algorithm to be used when generating
session identifiers"
- type="java.lang.String"/>
-
- <attribute name="randomFile"
- description="File source of random - /dev/urandom or a pipe"
- type="java.lang.String"/>
-
- <attribute name="className"
- description="Fully qualified class name of the managed object"
- type="java.lang.String"
- writeable="false"/>
-
- <attribute name="distributable"
- description="The distributable flag for Sessions created by this
+ type="java.lang.String"/>
+ <attribute
+ name="randomFile"
+ description="File source of random - /dev/urandom or a pipe"
+ type="java.lang.String"/>
+ <attribute
+ name="className"
+ description="Fully qualified class name of the managed object"
+ type="java.lang.String"
+ writeable="false"/>
+ <attribute
+ name="distributable"
+ description="The distributable flag for Sessions created by this
Manager"
- type="boolean"/>
-
- <attribute name="entropy"
- description="A String initialization parameter used to increase the
+ type="boolean"/>
+ <attribute
+ name="entropy"
+ description="A String initialization parameter used to increase the
entropy of the initialization of our random number
generator"
- type="java.lang.String"/>
-
- <attribute name="maxActiveSessions"
- description="The maximum number of active Sessions allowed, or -1
+ type="java.lang.String"/>
+ <attribute
+ name="maxActiveSessions"
+ description="The maximum number of active Sessions allowed, or -1
for no limit"
- type="int"/>
-
- <attribute name="maxInactiveInterval"
- description="The default maximum inactive interval for Sessions
+ type="int"/>
+ <attribute
+ name="maxInactiveInterval"
+ description="The default maximum inactive interval for Sessions
created by this Manager"
- type="int"/>
-
- <attribute name="processExpiresFrequency"
- description="The frequency of the manager checks (expiration
and passivation)"
- type="int"/>
-
- <attribute name="sessionIdLength"
- description="The session id length (in bytes) of Sessions
+ type="int"/>
+ <attribute
+ name="processExpiresFrequency"
+ description="The frequency of the manager checks (expiration and
passivation)"
+ type="int"/>
+ <attribute
+ name="sessionIdLength"
+ description="The session id length (in bytes) of Sessions
created by this Manager"
- type="int"/>
-
- <attribute name="name"
- description="The descriptive name of this Manager implementation
+ type="int"/>
+ <attribute
+ name="name"
+ description="The descriptive name of this Manager implementation
(for logging)"
- type="java.lang.String"
- writeable="false"/>
-
- <attribute name="activeSessions"
- description="Number of active sessions at this moment"
- type="int"
- writeable="false"/>
-
- <attribute name="sessionCounter"
- description="Total number of sessions created by this manager"
- type="int" />
-
- <attribute name="sessionReplaceCounter"
- description="Total number of replaced sessions that load from
external nodes"
- type="long" />
-
- <attribute name="maxActive"
- description="Maximum number of active sessions so far"
- type="int" />
-
- <attribute name="sessionMaxAliveTime"
- description="Longest time an expired session had been alive"
- type="int" />
-
- <attribute name="sessionAverageAliveTime"
- description="Average time an expired session had been alive"
- type="int" />
-
- <attribute name="sendClusterDomainOnly"
- is="true"
- description="The sendClusterDomainOnly flag send sessions only to
members as same cluster domain"
- type="boolean"/>
-
- <attribute name="rejectedSessions"
- description="Number of sessions we rejected due to maxActive beeing
reached"
- type="int" />
-
- <attribute name="expiredSessions"
- description="Number of sessions that expired ( doesn't include
explicit invalidations )"
- type="int" />
-
- <attribute name="stateTransferTimeout"
- description="state transfer timeout in sec"
- type="int"/>
-
- <attribute name="processingTime"
- description="Time spent doing housekeeping and expiration"
- type="long" />
-
- <attribute name="duplicates"
- description="Number of duplicated session ids generated"
- type="int" />
-
- <attribute name="counterReceive_EVT_GET_ALL_SESSIONS"
- description="Count receive EVT_GET_ALL_SESSIONS messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterReceive_EVT_ALL_SESSION_DATA"
- description="Count receive EVT_ALL_SESSION_DATA messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterReceive_EVT_SESSION_CREATED"
- description="Count receive EVT_SESSION_CREATED messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterReceive_EVT_SESSION_DELTA"
- description="Count receive EVT_SESSION_DELTA messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterReceive_EVT_SESSION_ACCESSED"
- description="Count receive EVT_SESSION_ACCESSED messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterReceive_EVT_SESSION_EXPIRED"
- description="Count receive EVT_SESSION_EXPIRED messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE"
- description="Count receive EVT_ALL_SESSION_TRANSFERCOMPLETE messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterSend_EVT_GET_ALL_SESSIONS"
- description="Count send EVT_GET_ALL_SESSIONS messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterSend_EVT_ALL_SESSION_DATA"
- description="Count send EVT_ALL_SESSION_DATA messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterSend_EVT_SESSION_CREATED"
- description="Count send EVT_SESSION_CREATED messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterSend_EVT_SESSION_DELTA"
- description="Count send EVT_SESSION_DELTA messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterSend_EVT_SESSION_ACCESSED"
- description="Count send EVT_SESSION_ACCESSED messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterSend_EVT_SESSION_EXPIRED"
- description="Count send EVT_SESSION_EXPIRED messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE"
- description="Count send EVT_ALL_SESSION_TRANSFERCOMPLETE messages"
- type="long"
- writeable="false" />
-
- <attribute name="counterNoStateTransfered"
- description="Count the failed session transfers noStateTransfered"
- type="int"
- writeable="false" />
-
- <attribute name="receivedQueueSize"
- description="length of receive queue size when session received from
other node"
- type="int"
- writeable="false" />
-
- <attribute name="expireSessionsOnShutdown"
- is="true"
- description="exipre all sessions cluster wide as one node goes down"
- type="boolean" />
-
- <attribute name="notifyListenersOnReplication"
- is="true"
- description="Send session attribute change events on backup nodes"
- type="boolean" />
-
- <attribute name="notifySessionListenersOnReplication"
- is="true"
- description="Send session start/stop events on backup nodes"
- type="boolean" />
-
- <attribute name="sendAllSessions"
- is="true"
- description="Send all sessions at one big block"
- type="boolean" />
-
- <attribute name="sendAllSessionsSize"
- description="session block size when sendAllSessions=false
(default=1000)"
- type="int" />
-
- <attribute name="sendAllSessionsWaitTime"
- description="wait time between send session block (default 2 sec)"
- type="int" />
-
- <operation name="listSessionIds"
- description="Return the list of active session ids"
- impact="ACTION"
- returnType="java.lang.String">
- </operation>
-
- <operation name="getSessionAttribute"
- description="Return a session attribute"
- impact="ACTION"
- returnType="java.lang.String">
- <parameter name="sessionId"
- description="Id of the session"
- type="java.lang.String"/>
- <parameter name="key"
- description="key of the attribute"
- type="java.lang.String"/>
- </operation>
-
- <operation name="expireSession"
- description="Expire a session"
- impact="ACTION"
- returnType="void">
- <parameter name="sessionId"
- description="Id of the session"
- type="java.lang.String"/>
+ type="java.lang.String"
+ writeable="false"/>
+ <attribute
+ name="activeSessions"
+ description="Number of active sessions at this moment"
+ type="int"
+ writeable="false"/>
+ <attribute
+ name="sessionCounter"
+ description="Total number of sessions created by this manager"
+ type="int"/>
+ <attribute
+ name="sessionReplaceCounter"
+ description="Total number of replaced sessions that load from external
nodes"
+ type="long"/>
+ <attribute
+ name="maxActive"
+ description="Maximum number of active sessions so far"
+ type="int"/>
+ <attribute
+ name="sessionMaxAliveTime"
+ description="Longest time an expired session had been alive"
+ type="int"/>
+ <attribute
+ name="sessionAverageAliveTime"
+ description="Average time an expired session had been alive"
+ type="int"/>
+ <attribute
+ name="sendClusterDomainOnly"
+ is="true"
+ description="The sendClusterDomainOnly flag send sessions only to
members as same cluster domain"
+ type="boolean"/>
+ <attribute
+ name="rejectedSessions"
+ description="Number of sessions we rejected due to maxActive beeing
reached"
+ type="int"/>
+ <attribute
+ name="expiredSessions"
+ description="Number of sessions that expired ( doesn't include explicit
invalidations )"
+ type="int"/>
+ <attribute
+ name="stateTransferTimeout"
+ description="state transfer timeout in sec"
+ type="int"/>
+ <attribute
+ name="processingTime"
+ description="Time spent doing housekeeping and expiration"
+ type="long"/>
+ <attribute
+ name="duplicates"
+ description="Number of duplicated session ids generated"
+ type="int"/>
+ <attribute
+ name="counterReceive_EVT_GET_ALL_SESSIONS"
+ description="Count receive EVT_GET_ALL_SESSIONS messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterReceive_EVT_ALL_SESSION_DATA"
+ description="Count receive EVT_ALL_SESSION_DATA messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterReceive_EVT_SESSION_CREATED"
+ description="Count receive EVT_SESSION_CREATED messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterReceive_EVT_SESSION_DELTA"
+ description="Count receive EVT_SESSION_DELTA messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterReceive_EVT_SESSION_ACCESSED"
+ description="Count receive EVT_SESSION_ACCESSED messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterReceive_EVT_SESSION_EXPIRED"
+ description="Count receive EVT_SESSION_EXPIRED messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE"
+ description="Count receive EVT_ALL_SESSION_TRANSFERCOMPLETE messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterSend_EVT_GET_ALL_SESSIONS"
+ description="Count send EVT_GET_ALL_SESSIONS messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterSend_EVT_ALL_SESSION_DATA"
+ description="Count send EVT_ALL_SESSION_DATA messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterSend_EVT_SESSION_CREATED"
+ description="Count send EVT_SESSION_CREATED messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterSend_EVT_SESSION_DELTA"
+ description="Count send EVT_SESSION_DELTA messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterSend_EVT_SESSION_ACCESSED"
+ description="Count send EVT_SESSION_ACCESSED messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterSend_EVT_SESSION_EXPIRED"
+ description="Count send EVT_SESSION_EXPIRED messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE"
+ description="Count send EVT_ALL_SESSION_TRANSFERCOMPLETE messages"
+ type="long"
+ writeable="false"/>
+ <attribute
+ name="counterNoStateTransfered"
+ description="Count the failed session transfers noStateTransfered"
+ type="int"
+ writeable="false"/>
+ <attribute
+ name="receivedQueueSize"
+ description="length of receive queue size when session received from
other node"
+ type="int"
+ writeable="false"/>
+ <attribute
+ name="expireSessionsOnShutdown"
+ is="true"
+ description="exipre all sessions cluster wide as one node goes down"
+ type="boolean"/>
+ <attribute
+ name="notifyListenersOnReplication"
+ is="true"
+ description="Send session attribute change events on backup nodes"
+ type="boolean"/>
+ <attribute
+ name="notifySessionListenersOnReplication"
+ is="true"
+ description="Send session start/stop events on backup nodes"
+ type="boolean"/>
+ <attribute
+ name="sendAllSessions"
+ is="true"
+ description="Send all sessions at one big block"
+ type="boolean"/>
+ <attribute
+ name="sendAllSessionsSize"
+ description="session block size when sendAllSessions=false
(default=1000)"
+ type="int"/>
+ <attribute
+ name="sendAllSessionsWaitTime"
+ description="wait time between send session block (default 2 sec)"
+ type="int"/>
+ <operation
+ name="listSessionIds"
+ description="Return the list of active session ids"
+ impact="ACTION"
+ returnType="java.lang.String"> </operation>
+ <operation
+ name="getSessionAttribute"
+ description="Return a session attribute"
+ impact="ACTION"
+ returnType="java.lang.String">
+ <parameter
+ name="sessionId"
+ description="Id of the session"
+ type="java.lang.String"/>
+ <parameter
+ name="key"
+ description="key of the attribute"
+ type="java.lang.String"/>
</operation>
-
- <operation name="getLastAccessedTime"
- description="Get the last access time"
- impact="ACTION"
- returnType="java.lang.String">
- <parameter name="sessionId"
- description="Id of the session"
- type="java.lang.String"/>
+ <operation
+ name="expireSession"
+ description="Expire a session"
+ impact="ACTION"
+ returnType="void">
+ <parameter
+ name="sessionId"
+ description="Id of the session"
+ type="java.lang.String"/>
</operation>
-
- <operation name="expireAllLocalSessions"
- description="Exipre all active local sessions and replicate the
invalid sessions"
- impact="ACTION"
- returnType="void">
+ <operation
+ name="getLastAccessedTime"
+ description="Get the last access time"
+ impact="ACTION"
+ returnType="java.lang.String">
+ <parameter
+ name="sessionId"
+ description="Id of the session"
+ type="java.lang.String"/>
</operation>
-
- <operation name="processExpires"
- description="force process to expire sessions"
- impact="ACTION"
- returnType="void">
- </operation>
-
- <operation name="resetStatistics"
- description="Reset all statistics"
- impact="ACTION"
- returnType="void">
- </operation>
- <operation name="getAllClusterSessions"
- description="send to oldest cluster member that this node need
all cluster sessions (resync member)"
- impact="ACTION"
- returnType="void">
- </operation>
-
+ <operation
+ name="expireAllLocalSessions"
+ description="Exipre all active local sessions and replicate the invalid
sessions"
+ impact="ACTION"
+ returnType="void"> </operation>
+ <operation
+ name="processExpires"
+ description="force process to expire sessions"
+ impact="ACTION"
+ returnType="void"> </operation>
+ <operation
+ name="resetStatistics"
+ description="Reset all statistics"
+ impact="ACTION"
+ returnType="void"> </operation>
+ <operation
+ name="getAllClusterSessions"
+ description="send to oldest cluster member that this node need all
cluster sessions (resync member)"
+ impact="ACTION"
+ returnType="void"> </operation>
+ </mbean>
+<mbean
+ name="SimpleTcpReplicationManager"
+ className="org.apache.catalina.mbeans.ClassNameMBean"
+ description="Clustered implementation of the Manager interface"
+ domain="Catalina"
+ group="Manager"
+ type="org.apache.catalina.ha.tcp.SimpleTcpReplicationManager">
+ <attribute
+ name="algorithm"
+ description="The message digest algorithm to be used when generating
session identifiers"
+ type="java.lang.String"/>
+ <attribute
+ name="checkInterval"
+ description="The interval (in seconds) between checks for expired
sessions"
+ type="int"/>
+ <attribute
+ name="className"
+ description="Fully qualified class name of the managed object"
+ type="java.lang.String"
+ writeable="false"/>
+ <attribute
+ name="distributable"
+ description="The distributable flag for Sessions created by this Manager"
+ type="boolean"/>
+ <attribute
+ name="entropy"
+ description="A String initialization parameter used to increase the
entropy of the initialization of our random number generator"
+ type="java.lang.String"/>
+ <attribute
+ name="managedResource"
+ description="The managed resource this MBean is associated with"
+ type="java.lang.Object"/>
+ <attribute
+ name="maxActiveSessions"
+ description="The maximum number of active Sessions allowed, or -1 for no
limit"
+ type="int"/>
+ <attribute
+ name="maxInactiveInterval"
+ description="The default maximum inactive interval for Sessions created
by this Manager"
+ type="int"/>
+ <attribute
+ name="name"
+ description="The descriptive name of this Manager implementation (for
logging)"
+ type="java.lang.String"
+ writeable="false"/>
</mbean>
-
</mbeans-descriptors>
Modified: tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
URL:
http://svn.apache.org/viewvc/tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java?view=diff&rev=564069&r1=564068&r2=564069
==============================================================================
--- tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java
(original)
+++ tomcat/trunk/java/org/apache/catalina/ha/tcp/SimpleTcpCluster.java Wed Aug
8 18:54:34 2007
@@ -57,6 +57,7 @@
import org.apache.catalina.tribes.group.interceptors.TcpFailureDetector;
import org.apache.catalina.ha.session.JvmRouteBinderValve;
import org.apache.catalina.ha.session.JvmRouteSessionIDBinderListener;
+import org.apache.catalina.ha.jmx.ClusterJmxHelper;
/**
* A <b>Cluster </b> implementation using simple multicast. Responsible for
@@ -689,6 +690,8 @@
channel.start(channel.DEFAULT);
if (clusterDeployer != null) clusterDeployer.start();
this.started = true;
+ //register JMX objects
+ ClusterJmxHelper.registerDefaultCluster(this);
// Notify our interested LifecycleListeners
lifecycle.fireLifecycleEvent(AFTER_START_EVENT, this);
} catch (Exception x) {
@@ -784,6 +787,9 @@
channel.removeChannelListener(this);
channel.removeMembershipListener(this);
this.unregisterClusterValve();
+ //unregister JMX objects
+ ClusterJmxHelper.unregisterDefaultCluster(this);
+
} catch (Exception x) {
log.error("Unable to stop cluster valve.", x);
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]