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]