<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<!DOCTYPE document [
  <!ENTITY project SYSTEM "project.xml">
]>
<document url="cluster-manager.html">

  &project;

  <properties>
    <author email="fhanik@apache.org">Filip Hanik</author>
    <title>The ClusterManager object</title>
  </properties>

<body>

<section name="Table of Contents">
<toc/>
</section>

<section name="Introduction">
  <p>A cluster manager is an extension to Tomcat's session manager interface,
  <code>org.apache.catalina.Manager</code>.
  A cluster manager must implement the
  <code>org.apache.catalina.ha.ClusterManager</code> and is solely  responsible
  for how the session is replicated.<br/>
  There are currently two different managers, the
  <code>org.apache.catalina.ha.session.DeltaManager</code> replicates deltas of
  session data to all members in the cluster. This implementation is proven and
  works very well, but has a limitation as it requires the cluster members to be
  homogeneous, all nodes must deploy the same applications and be exact
  replicas. The <code>org.apache.catalina.ha.session.BackupManager</code> also
  replicates deltas but only to one backup node. The location of the backup node
  is known to all nodes in the cluster. It also supports heterogeneous
  deployments, so the manager knows at what locations the web application is
  deployed.</p>
</section>

<section name="The &lt;Manager&gt;">
  <p>The <code>&lt;Manager&gt;</code> element defined inside the
  <code>&lt;Cluster&gt;</code> element is the template defined for all web
  applications that are marked <code>&lt;distributable/&gt;</code> in their
  <code>web.xml</code> file. However, you can still override the manager
  implementation on a per web application basis, by putting the
  <code>&lt;Manager&gt;</code> inside the <code>&lt;Context&gt;</code> element
  either in the <code><a href="context.html">context.xml</a></code> file or the
  <code><a href="index.html">server.xml</a></code> file.</p>
</section>

<section name="Attributes">
  <subsection name="Common Attributes">
    <attributes>
      <attribute name="className" required="true">
      </attribute>
      <attribute name="name" required="false">
        <b>The name of this cluster manager, the name is used to identify a
        session manager on a node. The name might get modified by the
        <code>Cluster</code> element to make it unique in the container.</b>
      </attribute>
      <attribute name="notifyListenersOnReplication" required="false">
        Set to <code>true</code> if you wish to have session listeners notified
        when session attributes are being replicated or removed across Tomcat
        nodes in the cluster.
      </attribute>
      <attribute name="sessionAttributeFilter" required="false">
        A regular expression used to filter, which session attributes will
        be replicated. An attribute will only be replicated, if its name
        matches this pattern. If the pattern is not set (default), all
        attributes are eligible for replication. As an example, the value
        <code>^(userName|sessionHistory)$</code> will only replicate the two
        session attributes named <code>userName</code> and
        <code>sessionHistory</code>.
      </attribute>
      <attribute name="maxInactiveInterval" required="false">
        <p>The initial maximum time interval, in seconds,
        between client requests before a session is invalidated. A negative value
        will result in sessions never timing out. If the attribute is not provided,
        a default of 1800 seconds (30 minutes) is used.</p>

        <p>This attribute provides the initial value whenever a
        new session is created, but the interval may be dynamically
        varied by a servlet via the
        <code>setMaxInactiveInterval</code> method of the <code>HttpSession</code> object.</p>
      </attribute>
      <attribute name="sessionIdLength" required="false">
       <p>The length of session ids created by this Manager, measured in bytes,
        excluding subsequent conversion to a hexadecimal string and
        excluding any JVM route information used for load balancing.
        This attribute is deprecated. Set the length on a nested
        <strong>SessionIdGenerator</strong> element instead.</p>
      </attribute>
      <attribute name="processExpiresFrequency" required="false">
        <p>Frequency of the session expiration, and related manager operations.
        Manager operations will be done once for the specified amount of
        backgroundProcess calls (i.e., the lower the amount, the more often the
        checks will occur). The minimum value is 1, and the default value is 6.
        </p>
      </attribute>
      <attribute name="secureRandomClass" required="false">
        <p>Name of the Java class that extends
        <code>java.security.SecureRandom</code> to use to generate session IDs.
        If not specified, the default value is
        <code>java.security.SecureRandom</code>.</p>
      </attribute>
      <attribute name="secureRandomProvider" required="false">
        <p>Name of the provider to use to create the
        <code>java.security.SecureRandom</code> instances that generate session
        IDs. If an invalid algorithm and/or provider is specified, the Manager
        will use the platform default provider and the default algorithm. If not
        specified, the platform default provider will be used.</p>
      </attribute>
      <attribute name="secureRandomAlgorithm" required="false">
        <p>Name of the algorithm to use to create the
        <code>java.security.SecureRandom</code> instances that generate session
        IDs. If an invalid algorithm and/or provider is specified, the Manager
        will use the platform default provider and the default algorithm. If not
        specified, the default algorithm of SHA1PRNG will be used. If the
        default algorithm is not supported, the platform default will be used.
        To specify that the platform default should be used, do not set the
        secureRandomProvider attribute and set this attribute to the empty
        string.</p>
      </attribute>
    </attributes>
  </subsection>
  <subsection name="org.apache.catalina.ha.session.DeltaManager Attributes">
    <attributes>
      <attribute name="expireSessionsOnShutdown" required="false">
        When a web application is being shutdown, Tomcat issues an expire call
        to each session to notify all the listeners. If you wish for all
        sessions to expire on all nodes when a shutdown occurs on one node, set
        this value to <code>true</code>.
        Default value is <code>false</code>.
      </attribute>
      <attribute name="maxActiveSessions" required="false">
        The maximum number of active sessions that will be created by this
        Manager, or -1 (the default) for no limit. For this manager, all
        sessions are counted as active sessions irrespective if whether or not
        the current node is the primary node for the session.
      </attribute>
      <attribute name="notifySessionListenersOnReplication" required="false">
        Set to <code>true</code> if you wish to have session listeners notified
        when sessions are created and expired across Tomcat nodes in the
        cluster.
      </attribute>
      <attribute name="notifyContainerListenersOnReplication" required="false">
        Set to <code>true</code> if you wish to have container listeners notified
        across Tomcat nodes in the cluster.
      </attribute>
      <attribute name="stateTransferTimeout" required="false">
        The time in seconds to wait for a session state transfer to complete
        from another node when a node is starting up.
        Default value is <code>60</code> seconds.
      </attribute>
      <attribute name="sendAllSessions" required="false">
        Flag whether send sessions as split blocks.
        If set to <code>true</code>, send all sessions as one big block.
        If set to <code>false</code>, send sessions as split blocks.
        Default value is <code>true</code>.
      </attribute>
      <attribute name="sendAllSessionsSize" required="false">
        The number of sessions in a session block message. This value is
        effective only when <code>sendAllSessions</code> is <code>false</code>.
        Default is <code>1000</code>.
      </attribute>
      <attribute name="sendAllSessionsWaitTime" required="false">
        Wait time between sending of session block messages. This value is
        effective only when <code>sendAllSessions</code> is <code>false</code>.
        Default is <code>2000</code> milliseconds.
      </attribute>
      <attribute name="stateTimestampDrop" required="false">
        When this node sends a <code>GET_ALL_SESSIONS</code> message to other
        node, all session messages that are received as a response are queued.
        If this attribute is set to <code>true</code>, the received session
        messages (except any <code>GET_ALL_SESSIONS</code> sent by other nodes)
        are filtered by their timestamp. A message is dropped if it is not a
        <code>GET_ALL_SESSIONS</code> message and its timestamp is earlier than
        the timestamp of our <code>GET_ALL_SESSIONS</code> message.
        If set to <code>false</code>, all queued session messages are handled.
        Default is <code>true</code>.
      </attribute>
    </attributes>
  </subsection>
  <subsection name="org.apache.catalina.ha.session.BackupManager Attributes">
    <attributes>
      <attribute name="mapSendOptions" required="false">
        The backup manager uses a replicated map, this map is sending and
        receiving messages. You can setup the flag for how this map is sending
        messages, the default value is <code>6</code>(synchronous).<br/>
        Note that if you use asynchronous messaging it is possible for update
        messages for a session to be processed by the receiving node in a
        different order to the order in which they were sent.
      </attribute>
      <attribute name="maxActiveSessions" required="false">
        The maximum number of active sessions that will be created by this
        Manager, or -1 (the default) for no limit. For this manager, only
        sessions where the current node is the primary node for the session are
        considered active sessions.
      </attribute>
      <attribute name="rpcTimeout" required="false">
        Timeout for RPC message used for broadcast and transfer state from
        another map.
        Default value is <code>15000</code> milliseconds.
      </attribute>
      <attribute name="terminateOnStartFailure" required="false">
        Set to true if you wish to terminate replication map when replication
        map fails to start. If replication map is terminated, associated context
        will fail to start. If you set this attribute to false, replication map
        does not end. It will try to join the map membership in the heartbeat.
        Default value is <code>false</code> .
      </attribute>
    </attributes>
  </subsection>
</section>
</body>
</document>
