| The Apache Tomcat 5.5 Servlet/JSP ContainerMonitoring and Managing Tomcat| Introduction |  | 
  Monitoring is a very important question today. Looking inside the running
        server, grab some statistic data or reconfigure some aspects are 
        daily administration tasks. | 
 | Manage Tomcat with JMX remote Ant Tasks |  | 
   To simplify JMX usage with Apache Ant 1.6.x, a set of tasks is provided
   that may be used with antlib. The tasks can also be defined explicitly. An
   Ant project that defines the tasks is provided and can be imported into
   your project. antlib support: Copy your catalina-ant.jar from $CATALINA_HOME/server/lib to $ANT_HOME/lib. The following example shows the JMX Accessor usage: 
   | 
<project name="Catalina Ant JMX" 
        xmlns:jmx="antlib:org.apache.catalina.ant.jmx" 
        default="state"
        basedir=".">
    <property name="jmx.server.name" value="localhost" />
    <property name="jmx.server.port" value="9012" />
    <property name="cluster.server.address" value="192.168.1.75" />
    <property name="cluster.server.port" value="9025" />
 
    <target name="state" description="Show JMX Cluster state">
        <jmx:open
            host="${jmx.server.name}"
            port="${jmx.server.port}"
            username="controlRole"
            password="tomcat"/>
        <jmx:get
            name="Catalina:type=IDataSender,host=localhost,senderAddress=${cluster.server.address},senderPort=${cluster.server.port}" 
            attribute="connected"
            resultproperty="IDataSender.backup.connected"
            echo="false"
        />
       <jmx:get
            name="Catalina:type=ClusterSender,host=localhost" 
            attribute="senderObjectNames"
            resultproperty="senderObjectNames"
            echo="false"
        />
        <!-- get current maxActiveSession from ClusterTest application
             echo it to ant output and store at 
             property <em>clustertest.maxActiveSessions.orginal</em>
        -->
       <jmx:get
            name="Catalina:type=Manager,path=/ClusterTest,host=localhost" 
            attribute="maxActiveSessions"
            resultproperty="clustertest.maxActiveSessions.orginal"
            echo="true"
        />
        <!-- set maxActiveSession to 100
        -->
        <jmx:set
            name="Catalina:type=Manager,path=/ClusterTest,host=localhost" 
            attribute="maxActiveSessions"
            value="100"
            type="int"
        />
        <!-- get all sessions and split result as delimiter <em>SPACE</em> for easy
             access all session ids directly with ant property sessions.[0..n].
        -->
        <jmx:invoke
            name="Catalina:type=Manager,path=/ClusterTest,host=localhost" 
            operation="listSessionIds"
            resultproperty="sessions"
            echo="false"
            delimiter=" "
        />
        <!-- Access session attribute <em>Hello</em> from first session.
        -->
        <jmx:invoke
            name="Catalina:type=Manager,path=/ClusterTest,host=localhost" 
            operation="getSessionAttribute"
            resultproperty="Hello"
            echo="false"
        >
          <arg value="${sessions.0}"/>
          <arg value="Hello"/>
        </jmx:invoke> 
        <!-- Query for all application manager.of the server from all hosts
             and bind all attributes from all found manager mbeans.
        -->
        <jmx:query
            name="Catalina:type=Manager,*" 
            resultproperty="manager"
            echo="true"
            attributebinding="true"
        />
        <!-- echo the create properties -->
        <echo>
           senderObjectNames: ${senderObjectNames.0}
           IDataSender.backup.connected: ${IDataSender.backup.connected}
           session: ${sessions.0}
           manager.length: ${manager.length}
           manager.0.name: ${manager.0.name}
           manager.1.name: ${manager.1.name}
           hello: ${Hello}
           manager.ClusterTest.0.name: ${manager.ClusterTest.0.name}
           manager.ClusterTest.0.activeSessions: ${manager.ClusterTest.0.activeSessions}
           manager.ClusterTest.0.counterSend_EVT_SESSION_EXPIRED: ${manager.ClusterTest.0.counterSend_EVT_SESSION_EXPIRED}
           manager.ClusterTest.0.counterSend_EVT_GET_ALL_SESSIONS: ${manager.ClusterTest.0.counterSend_EVT_GET_ALL_SESSIONS}
        </echo>   
    </target>
 
</project>
    |  import: Import the JMX Accessor Project with 
   <import file="${CATALINA.HOME}/bin/jmxaccessor-tasks.xml" /> and
   reference the tasks with jmxOpen, jmxSet, jmxGet,
    jmxQuery, jmxInvoke,jmxEquals and jmxCondition.  | 
 |