DeltaManager (Apache Tomcat 9.0.121 API Documentation)
Description: declaration: package: org.apache.catalina.ha.session, class: DeltaManager

# Class DeltaManager

java.lang.Object
org.apache.catalina.util.LifecycleBase
org.apache.catalina.util.LifecycleMBeanBase
org.apache.catalina.session.ManagerBase
org.apache.catalina.ha.session.ClusterManagerBase
org.apache.catalina.ha.session.DeltaManager

All Implemented Interfaces:
  `MBeanRegistration, ClusterManager, JmxEnabled, Lifecycle, Manager`

public class DeltaManager extends ClusterManagerBase
The DeltaManager manages replicated sessions by only replicating the deltas in data. For applications written to handle this, the DeltaManager is the optimal way of replicating data.

This code is almost identical to StandardManager with a difference in how it persists sessions and some modifications to it.

IMPLEMENTATION NOTE : Correct behavior of session storing and reloading depends upon external calls to the `start()` and `stop()` methods of this class at the correct times.

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from class ManagerBase

  `ManagerBase.SessionTiming`

  ### Nested classes/interfaces inherited from interface Lifecycle

  `Lifecycle.SingleUse`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `final Log`
  `log`
  The log instance for this class.
  `protected String`
  `name`
  The name of this manager.
  `protected static final StringManager`
  `sm`
  The string manager for this package.

  ### Fields inherited from class ClusterManagerBase

  `cluster`

  ### Fields inherited from class ManagerBase

  `duplicates, expiredSessions, maxActive, maxActiveSessions, processExpiresFrequency, processingTime, rejectedSessions, secureRandomAlgorithm, secureRandomClass, secureRandomProvider, sessionCounter, sessionCreationTiming, sessionExpirationTiming, sessionIdGenerator, sessionIdGeneratorClass, sessionMaxAliveTime, sessions, support, TIMING_STATS_CACHE_SIZE`

  ### Fields inherited from class LifecycleMBeanBase

  `mserver`

  ### Fields inherited from interface Lifecycle

  `AFTER_DESTROY_EVENT, AFTER_INIT_EVENT, AFTER_START_EVENT, AFTER_STOP_EVENT, BEFORE_DESTROY_EVENT, BEFORE_INIT_EVENT, BEFORE_START_EVENT, BEFORE_STOP_EVENT, CONFIGURE_START_EVENT, CONFIGURE_STOP_EVENT, PERIODIC_EVENT, START_EVENT, STOP_EVENT`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `DeltaManager()`
  Default constructor.

- ## Method Summary

  Modifier and Type
  Method
  Description
  `void`
  `changeSessionId(Session session)`
  Change the session ID of the current session to a new randomly generated session ID.
  `protected void`
  `changeSessionId(Session session, boolean notify)`
  Deprecated.
  Will be removed in Tomcat 10
  `void`
  `changeSessionId(Session session, String newId)`
  Change the session ID of the current session to a specified session ID.
  `protected void`
  `changeSessionId(Session session, String newId, boolean notify)`
  Change the session ID and optionally notify cluster members.
  `ClusterManager`
  `cloneFromTemplate()`
  Creates a clone of this manager from a template configuration.
  `Session`
  `createEmptySession()`
  Get a session from the recycled ones or create a new empty one.
  `Session`
  `createSession(String sessionId)`
  Construct and return a new session object, based on the default settings specified by this Manager's properties.
  `Session`
  `createSession(String sessionId, boolean distribute)`
  Create new session with check maxActiveSessions and send session creation to other cluster nodes.
  `protected DeltaRequest`
  `deserializeDeltaRequest(DeltaSession session, byte[] data)`
  Deprecated.
  Unused.
  `protected String`
  `deserializeSessionId(byte[] data)`
  Load sessionID
  `protected void`
  `deserializeSessions(byte[] data)`
  Load sessions from other cluster node.
  `void`
  `expireAllLocalSessions()`
  Expire all find sessions.
  `protected Member`
  `findSessionMasterMember()`
  Find the master of the session state
  `void`
  `getAllClusterSessions()`
  get from first session master the backup from all clustered sessions
  `int`
  `getCounterNoStateTransfered()`
  Deprecated.
  Use `getCounterNoStateTransferred()`.
  `int`
  `getCounterNoStateTransferred()`
  `long`
  `getCounterReceive_EVT_ALL_SESSION_DATA()`
  Get the receive counter for EVT_ALL_SESSION_DATA events.
  `long`
  `getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER()`
  Get the receive counter for EVT_ALL_SESSION_NOCONTEXTMANAGER events.
  `int`
  `getCounterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE()`
  Get the receive counter for EVT_ALL_SESSION_TRANSFERCOMPLETE events.
  `long`
  `getCounterReceive_EVT_CHANGE_SESSION_ID()`
  Get the receive counter for EVT_CHANGE_SESSION_ID events.
  `long`
  `getCounterReceive_EVT_GET_ALL_SESSIONS()`
  Get the receive counter for EVT_GET_ALL_SESSIONS events.
  `long`
  `getCounterReceive_EVT_SESSION_ACCESSED()`
  Get the receive counter for EVT_SESSION_ACCESSED events.
  `long`
  `getCounterReceive_EVT_SESSION_CREATED()`
  Get the receive counter for EVT_SESSION_CREATED events.
  `long`
  `getCounterReceive_EVT_SESSION_DELTA()`
  Get the receive counter for EVT_SESSION_DELTA events.
  `long`
  `getCounterReceive_EVT_SESSION_EXPIRED()`
  Get the receive counter for EVT_SESSION_EXPIRED events.
  `long`
  `getCounterSend_EVT_ALL_SESSION_DATA()`
  Get the send counter for EVT_ALL_SESSION_DATA events.
  `int`
  `getCounterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE()`
  Get the send counter for EVT_ALL_SESSION_TRANSFERCOMPLETE events.
  `long`
  `getCounterSend_EVT_CHANGE_SESSION_ID()`
  Get the send counter for EVT_CHANGE_SESSION_ID events.
  `long`
  `getCounterSend_EVT_GET_ALL_SESSIONS()`
  Get the send counter for EVT_GET_ALL_SESSIONS events.
  `long`
  `getCounterSend_EVT_SESSION_ACCESSED()`
  Get the send counter for EVT_SESSION_ACCESSED events.
  `long`
  `getCounterSend_EVT_SESSION_CREATED()`
  Get the send counter for EVT_SESSION_CREATED events.
  `long`
  `getCounterSend_EVT_SESSION_DELTA()`
  Get the send counter for EVT_SESSION_DELTA events.
  `long`
  `getCounterSend_EVT_SESSION_EXPIRED()`
  Get the send counter for EVT_SESSION_EXPIRED events.
  `boolean`
  `getEnableStatistics()`
  Check if statistics collection is enabled.
  `String[]`
  `getInvalidatedSessions()`
  When the manager expires session not tied to a request.
  `String`
  `getName()`
  Returns the descriptive short name of this Manager implementation.
  `protected DeltaSession`
  `getNewDeltaSession()`
  Deprecated.
  Unused.
  `int`
  `getReceivedQueueSize()`
  Get the current size of the received message queue.
  `int`
  `getSendAllSessionsSize()`
  Get the batch size for sending all sessions.
  `int`
  `getSendAllSessionsWaitTime()`
  Get the wait time for sending all sessions.
  `long`
  `getSessionReplaceCounter()`
  Get the session replace counter.
  `boolean`
  `getStateTransfered()`
  Deprecated.
  Use `getStateTransferred()`.
  `boolean`
  `getStateTransferred()`
  `int`
  `getStateTransferTimeout()`
  Get the state transfer timeout value.
  `protected void`
  `handleALL_SESSION_DATA(SessionMessage msg, Member sender)`
  Handle receive sessions from other node ( restart )
  `protected void`
  `handleALL_SESSION_NOCONTEXTMANAGER(SessionMessage msg, Member sender)`
  handle receive no context manager.
  `protected void`
  `handleALL_SESSION_TRANSFERCOMPLETE(SessionMessage msg, Member sender)`
  handle receive session state is complete transferred
  `protected void`
  `handleCHANGE_SESSION_ID(SessionMessage msg, Member sender)`
  handle receive change sessionID at other node
  `protected void`
  `handleGET_ALL_SESSIONS(SessionMessage msg, Member sender)`
  Handle a get all sessions message from another node.
  `protected void`
  `handleSESSION_ACCESSED(SessionMessage msg, Member sender)`
  handle receive session is access at other node ( primary session is now false)
  `protected void`
  `handleSESSION_CREATED(SessionMessage msg, Member sender)`
  handle receive new session is created at other node (create backup - primary false)
  `protected void`
  `handleSESSION_DELTA(SessionMessage msg, Member sender)`
  handle receive session delta
  `protected void`
  `handleSESSION_EXPIRED(SessionMessage msg, Member sender)`
  handle receive session is expired at other node ( expire session also here)
  `boolean`
  `isExpireSessionsOnShutdown()`
  Check if sessions should be expired on shutdown.
  `boolean`
  `isNoContextManagerReceived()`
  Check if a no-context-manager signal has been received.
  `boolean`
  `isNotifyContainerListenersOnReplication()`
  Check if container listeners are notified on replication.
  `boolean`
  `isNotifySessionListenersOnReplication()`
  Check if session listeners are notified on replication.
  `boolean`
  `isSendAllSessions()`
  Check if sending all sessions is enabled.
  `boolean`
  `isStateTimestampDrop()`
  Check if state timestamp drop is enabled.
  `void`
  `messageDataReceived(ClusterMessage cmsg)`
  A message was received from another node, this is the callback method to implement if you are interested in receiving replication messages.
  `protected void`
  `messageReceived(SessionMessage msg, Member sender)`
  This method is called by the received thread when a SessionMessage has been received from one of the other nodes in the cluster.
  `ClusterMessage`
  `requestCompleted(String sessionId)`
  When the request has been completed, the replication valve will notify the manager, and the manager will decide whether any replication is needed or not.
  `ClusterMessage`
  `requestCompleted(String sessionId, boolean expires)`
  When the request has been completed, the replication valve will notify the manager, and the manager will decide whether any replication is needed or not.
  `void`
  `resetStatistics()`
  Reset manager statistics
  `String`
  `rotateSessionId(Session session)`
  Change the session ID of the current session to a new randomly generated session ID.
  `protected String`
  `rotateSessionId(Session session, boolean notify)`
  `protected void`
  `send(SessionMessage msg)`
  Send messages to other backup member (domain or all)
  `protected void`
  `sendChangeSessionId(String newSessionID, String orgSessionID)`
  Send a session ID change notification to cluster members.
  `protected void`
  `sendCreateSession(String sessionId, DeltaSession session)`
  Send create session event to all backup node
  `protected void`
  `sendSessions(Member sender, Session[] currentSessions, long sendTimestamp)`
  send a block of session to sender
  `protected byte[]`
  `serializeDeltaRequest(DeltaSession session, DeltaRequest deltaRequest)`
  Deprecated.
  Unused.
  `protected byte[]`
  `serializeSessionId(String sessionId)`
  serialize sessionID
  `protected byte[]`
  `serializeSessions(Session[] currentSessions)`
  Save any currently active sessions in the appropriate persistence mechanism, if any.
  `protected void`
  `sessionExpired(String id)`
  send session expired to other cluster nodes
  `void`
  `setEnableStatistics(boolean enableStatistics)`
  Set whether statistics collection is enabled.
  `void`
  `setExpireSessionsOnShutdown(boolean expireSessionsOnShutdown)`
  Set whether to expire sessions on shutdown.
  `void`
  `setName(String name)`
  Set the name of the manager, at host /context name and at engine hostname+/context
  `void`
  `setNoContextManagerReceived(boolean noContextManagerReceived)`
  Set whether a no-context-manager signal has been received.
  `void`
  `setNotifyContainerListenersOnReplication(boolean notifyContainerListenersOnReplication)`
  Set whether to notify container listeners on replication.
  `void`
  `setNotifySessionListenersOnReplication(boolean notifySessionListenersOnReplication)`
  Set whether to notify session listeners on replication.
  `void`
  `setSendAllSessions(boolean sendAllSessions)`
  Set whether to send all sessions during replication.
  `void`
  `setSendAllSessionsSize(int sendAllSessionsSize)`
  Set the batch size for sending all sessions.
  `void`
  `setSendAllSessionsWaitTime(int sendAllSessionsWaitTime)`
  Set the wait time for sending all sessions.
  `void`
  `setStateTimestampDrop(boolean isTimestampDrop)`
  Set the state timestamp drop flag.
  `void`
  `setStateTransfered(boolean stateTransferred)`
  Deprecated.
  Use `setStateTransferred(boolean)`.
  `void`
  `setStateTransferred(boolean stateTransferred)`
  Set that state transferred is complete
  `void`
  `setStateTransferTimeout(int timeoutAllSession)`
  Set the state transfer timeout.
  `protected void`
  `startInternal()`
  Start this component and implement the requirements of `LifecycleBase.startInternal()`.
  `protected void`
  `stopInternal()`
  Stop this component and implement the requirements of `LifecycleBase.stopInternal()`.
  `protected void`
  `waitForSendAllSessions(long beforeSendTime)`
  Wait that cluster session state is transferred or timeout after 60 Sec With stateTransferTimeout == -1 wait that backup is transferred (forever mode)

  ### Methods inherited from class ClusterManagerBase

  `clone, getClassLoaders, getClassLoaders, getCluster, getDeltaRequestPool, getReplicationStream, getReplicationStream, isNotifyListenersOnReplication, isRecordAllActions, load, registerSessionAtReplicationValve, setCluster, setNotifyListenersOnReplication, setRecordAllActions, unload`

  ### Methods inherited from class ManagerBase

  `add, addPropertyChangeListener, backgroundProcess, changeSessionId, expireSession, findSession, findSessions, generateSessionId, getActiveSessions, getClassName, getContext, getCreationTime, getCreationTimestamp, getDomainInternal, getDuplicates, getEngine, getExpiredSessions, getJvmRoute, getLastAccessedTime, getLastAccessedTimestamp, getMaxActive, getMaxActiveSessions, getNewSession, getNotifyAttributeListenerOnUnchangedValue, getNotifyBindingListenerOnUnchangedValue, getObjectNameKeyProperties, getPersistAuthentication, getPersistAuthenticationNotes, getProcessExpiresFrequency, getProcessingTime, getRejectedSessions, getSecureRandomAlgorithm, getSecureRandomClass, getSecureRandomProvider, getSession, getSessionAttribute, getSessionAttributeNameFilter, getSessionAttributeNamePattern, getSessionAttributeValueClassNameFilter, getSessionAttributeValueClassNamePattern, getSessionAverageAliveTime, getSessionCounter, getSessionCreateRate, getSessionExpireRate, getSessionIdGenerator, getSessionMaxAliveTime, getThisAccessedTime, getThisAccessedTimestamp, getWarnOnSessionAttributeFilterFailure, initInternal, listSessionIds, processExpires, remove, remove, removePropertyChangeListener, setContext, setDuplicates, setExpiredSessions, setMaxActive, setMaxActiveSessions, setNotifyAttributeListenerOnUnchangedValue, setNotifyBindingListenerOnUnchangedValue, setPersistAuthentication, setPersistAuthenticationNotes, setProcessExpiresFrequency, setProcessingTime, setSecureRandomAlgorithm, setSecureRandomClass, setSecureRandomProvider, setSessionAttributeNameFilter, setSessionAttributeValueClassNameFilter, setSessionCounter, setSessionIdGenerator, setSessionMaxAliveTime, setWarnOnSessionAttributeFilterFailure, toString, updateSessionMaxAliveTime, willAttributeDistribute`

  ### Methods inherited from class LifecycleMBeanBase

  `destroyInternal, getDomain, getObjectName, postDeregister, postRegister, preDeregister, preRegister, register, setDomain, unregister, unregister`

  ### Methods inherited from class LifecycleBase

  `addLifecycleListener, destroy, findLifecycleListeners, fireLifecycleEvent, getState, getStateName, getThrowOnFailure, init, removeLifecycleListener, setState, setState, setThrowOnFailure, start, stop`

  ### Methods inherited from class Object

  `clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait`

  ### Methods inherited from interface Manager

  `add, addPropertyChangeListener, backgroundProcess, findSession, findSessions, getActiveSessions, getContext, getExpiredSessions, getMaxActive, getNotifyAttributeListenerOnUnchangedValue, getNotifyBindingListenerOnUnchangedValue, getRejectedSessions, getSessionAverageAliveTime, getSessionCounter, getSessionCreateRate, getSessionExpireRate, getSessionIdGenerator, getSessionMaxAliveTime, remove, remove, removePropertyChangeListener, setContext, setExpiredSessions, setMaxActive, setNotifyAttributeListenerOnUnchangedValue, setNotifyBindingListenerOnUnchangedValue, setSessionCounter, setSessionIdGenerator, setSessionMaxAliveTime, willAttributeDistribute`

- ## Field Details

  - ### log

    public final Log log
    The log instance for this class.

  - ### sm

    protected static final StringManager sm
    The string manager for this package.

  - ### name

    protected String name
    The name of this manager.

- ## Constructor Details

  - ### DeltaManager

    public DeltaManager()
    Default constructor.

- ## Method Details

  - ### setName

    public void setName(String name)
    Description copied from interface: `ClusterManager`
    Set the name of the manager, at host /context name and at engine hostname+/context
    Parameters:
      `name` - The manager name

  - ### getName

    public String getName()
    Description copied from class: `ManagerBase`
    Returns the descriptive short name of this Manager implementation.
    Specified by:
      `getName` in interface `ClusterManager`
    Overrides:
      `getName` in class `ManagerBase`
    Returns:
      The descriptive short name of this Manager implementation.

  - ### getCounterSend_EVT_GET_ALL_SESSIONS

    public long getCounterSend_EVT_GET_ALL_SESSIONS()
    Get the send counter for EVT_GET_ALL_SESSIONS events.
    Returns:
      the counterSend_EVT_GET_ALL_SESSIONS value.

  - ### getCounterSend_EVT_SESSION_ACCESSED

    public long getCounterSend_EVT_SESSION_ACCESSED()
    Get the send counter for EVT_SESSION_ACCESSED events.
    Returns:
      the counterSend_EVT_SESSION_ACCESSED value.

  - ### getCounterSend_EVT_SESSION_CREATED

    public long getCounterSend_EVT_SESSION_CREATED()
    Get the send counter for EVT_SESSION_CREATED events.
    Returns:
      the counterSend_EVT_SESSION_CREATED value.

  - ### getCounterSend_EVT_SESSION_DELTA

    public long getCounterSend_EVT_SESSION_DELTA()
    Get the send counter for EVT_SESSION_DELTA events.
    Returns:
      the counterSend_EVT_SESSION_DELTA value.

  - ### getCounterSend_EVT_SESSION_EXPIRED

    public long getCounterSend_EVT_SESSION_EXPIRED()
    Get the send counter for EVT_SESSION_EXPIRED events.
    Returns:
      the counterSend_EVT_SESSION_EXPIRED value.

  - ### getCounterSend_EVT_ALL_SESSION_DATA

    public long getCounterSend_EVT_ALL_SESSION_DATA()
    Get the send counter for EVT_ALL_SESSION_DATA events.
    Returns:
      the counterSend_EVT_ALL_SESSION_DATA value.

  - ### getCounterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE

    public int getCounterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE()
    Get the send counter for EVT_ALL_SESSION_TRANSFERCOMPLETE events.
    Returns:
      the counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE value.

  - ### getCounterSend_EVT_CHANGE_SESSION_ID

    public long getCounterSend_EVT_CHANGE_SESSION_ID()
    Get the send counter for EVT_CHANGE_SESSION_ID events.
    Returns:
      the counterSend_EVT_CHANGE_SESSION_ID value.

  - ### getCounterReceive_EVT_ALL_SESSION_DATA

    public long getCounterReceive_EVT_ALL_SESSION_DATA()
    Get the receive counter for EVT_ALL_SESSION_DATA events.
    Returns:
      the counterReceive_EVT_ALL_SESSION_DATA value.

  - ### getCounterReceive_EVT_GET_ALL_SESSIONS

    public long getCounterReceive_EVT_GET_ALL_SESSIONS()
    Get the receive counter for EVT_GET_ALL_SESSIONS events.
    Returns:
      the counterReceive_EVT_GET_ALL_SESSIONS value.

  - ### getCounterReceive_EVT_SESSION_ACCESSED

    public long getCounterReceive_EVT_SESSION_ACCESSED()
    Get the receive counter for EVT_SESSION_ACCESSED events.
    Returns:
      the counterReceive_EVT_SESSION_ACCESSED value.

  - ### getCounterReceive_EVT_SESSION_CREATED

    public long getCounterReceive_EVT_SESSION_CREATED()
    Get the receive counter for EVT_SESSION_CREATED events.
    Returns:
      the counterReceive_EVT_SESSION_CREATED value.

  - ### getCounterReceive_EVT_SESSION_DELTA

    public long getCounterReceive_EVT_SESSION_DELTA()
    Get the receive counter for EVT_SESSION_DELTA events.
    Returns:
      the counterReceive_EVT_SESSION_DELTA value.

  - ### getCounterReceive_EVT_SESSION_EXPIRED

    public long getCounterReceive_EVT_SESSION_EXPIRED()
    Get the receive counter for EVT_SESSION_EXPIRED events.
    Returns:
      the counterReceive_EVT_SESSION_EXPIRED value.

  - ### getCounterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE

    public int getCounterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE()
    Get the receive counter for EVT_ALL_SESSION_TRANSFERCOMPLETE events.
    Returns:
      the counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE value.

  - ### getCounterReceive_EVT_CHANGE_SESSION_ID

    public long getCounterReceive_EVT_CHANGE_SESSION_ID()
    Get the receive counter for EVT_CHANGE_SESSION_ID events.
    Returns:
      the counterReceive_EVT_CHANGE_SESSION_ID value.

  - ### getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER

    public long getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER()
    Get the receive counter for EVT_ALL_SESSION_NOCONTEXTMANAGER events.
    Returns:
      the counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER value.

  - ### getSessionReplaceCounter

    public long getSessionReplaceCounter()
    Get the session replace counter.
    Returns:
      the sessionReplaceCounter value.

  - ### getCounterNoStateTransfered

    @Deprecated public int getCounterNoStateTransfered()
    Deprecated.
    Use `getCounterNoStateTransferred()`. Will be removed in Tomcat 10 onwards.
    Returns:
      Returns the counterNoStateTransferred.

  - ### getCounterNoStateTransferred

    public int getCounterNoStateTransferred()
    Returns:
      Returns the counterNoStateTransferred.

  - ### getReceivedQueueSize

    public int getReceivedQueueSize()
    Get the current size of the received message queue.
    Returns:
      the queue size

  - ### getStateTransferTimeout

    public int getStateTransferTimeout()
    Get the state transfer timeout value.
    Returns:
      the stateTransferTimeout value.

  - ### setStateTransferTimeout

    public void setStateTransferTimeout(int timeoutAllSession)
    Set the state transfer timeout.
    Parameters:
      `timeoutAllSession` - The timeout value

  - ### getStateTransfered

    @Deprecated public boolean getStateTransfered()
    Deprecated.
    Use `getStateTransferred()`. Will be removed in Tomcat 10 onwards.
    Check if the state transfer is complete.
    Returns:
      `true` if the state transfer is complete.

  - ### setStateTransfered

    @Deprecated public void setStateTransfered(boolean stateTransferred)
    Deprecated.
    Use `setStateTransferred(boolean)`. Will be removed in Tomcat 10 onwards.
    Set that state transferred is complete
    Parameters:
      `stateTransferred` - Flag value

  - ### getStateTransferred

    public boolean getStateTransferred()
    Returns:
      `true` if the state transfer is complete.

  - ### setStateTransferred

    public void setStateTransferred(boolean stateTransferred)
    Set that state transferred is complete
    Parameters:
      `stateTransferred` - Flag value

  - ### isNoContextManagerReceived

    public boolean isNoContextManagerReceived()
    Check if a no-context-manager signal has been received.
    Returns:
      true if no context manager received

  - ### setNoContextManagerReceived

    public void setNoContextManagerReceived(boolean noContextManagerReceived)
    Set whether a no-context-manager signal has been received.
    Parameters:
      `noContextManagerReceived` - The flag value

  - ### getSendAllSessionsWaitTime

    public int getSendAllSessionsWaitTime()
    Get the wait time for sending all sessions.
    Returns:
      the sendAllSessionsWaitTime in milliseconds

  - ### setSendAllSessionsWaitTime

    public void setSendAllSessionsWaitTime(int sendAllSessionsWaitTime)
    Set the wait time for sending all sessions.
    Parameters:
      `sendAllSessionsWaitTime` - The wait time in milliseconds

  - ### isStateTimestampDrop

    public boolean isStateTimestampDrop()
    Check if state timestamp drop is enabled.
    Returns:
      the stateTimestampDrop flag

  - ### setStateTimestampDrop

    public void setStateTimestampDrop(boolean isTimestampDrop)
    Set the state timestamp drop flag.
    Parameters:
      `isTimestampDrop` - The new flag value

  - ### isSendAllSessions

    public boolean isSendAllSessions()
    Check if sending all sessions is enabled.
    Returns:
      the sendAllSessions flag

  - ### setSendAllSessions

    public void setSendAllSessions(boolean sendAllSessions)
    Set whether to send all sessions during replication.
    Parameters:
      `sendAllSessions` - The flag value

  - ### getSendAllSessionsSize

    public int getSendAllSessionsSize()
    Get the batch size for sending all sessions.
    Returns:
      the sendAllSessionsSize value

  - ### setSendAllSessionsSize

    public void setSendAllSessionsSize(int sendAllSessionsSize)
    Set the batch size for sending all sessions.
    Parameters:
      `sendAllSessionsSize` - The batch size value

  - ### isNotifySessionListenersOnReplication

    public boolean isNotifySessionListenersOnReplication()
    Check if session listeners are notified on replication.
    Returns:
      the notifySessionListenersOnReplication flag

  - ### setNotifySessionListenersOnReplication

    public void setNotifySessionListenersOnReplication(boolean notifySessionListenersOnReplication)
    Set whether to notify session listeners on replication.
    Parameters:
      `notifySessionListenersOnReplication` - The flag value

  - ### isExpireSessionsOnShutdown

    public boolean isExpireSessionsOnShutdown()
    Check if sessions should be expired on shutdown.
    Returns:
      true if sessions are expired on shutdown

  - ### setExpireSessionsOnShutdown

    public void setExpireSessionsOnShutdown(boolean expireSessionsOnShutdown)
    Set whether to expire sessions on shutdown.
    Parameters:
      `expireSessionsOnShutdown` - The flag value

  - ### isNotifyContainerListenersOnReplication

    public boolean isNotifyContainerListenersOnReplication()
    Check if container listeners are notified on replication.
    Returns:
      true if container listeners are notified on replication

  - ### setNotifyContainerListenersOnReplication

    public void setNotifyContainerListenersOnReplication(boolean notifyContainerListenersOnReplication)
    Set whether to notify container listeners on replication.
    Parameters:
      `notifyContainerListenersOnReplication` - The flag value

  - ### getEnableStatistics

    public boolean getEnableStatistics()
    Check if statistics collection is enabled.
    Returns:
      the enableStatistics flag

  - ### setEnableStatistics

    public void setEnableStatistics(boolean enableStatistics)
    Set whether statistics collection is enabled.
    Parameters:
      `enableStatistics` - The flag value

  - ### createSession

    public Session createSession(String sessionId)
    Description copied from interface: `Manager`
    Construct and return a new session object, based on the default settings specified by this Manager's properties. The session id specified will be used as the session id. If a new session cannot be created for any reason, return `null`.
    Specified by:
      `createSession` in interface `Manager`
    Overrides:
      `createSession` in class `ManagerBase`
    Parameters:
      `sessionId` - The session id which should be used to create the new session; if `null`, the session id will be assigned by this method, and available via the getId() method of the returned session.
    Returns:
      An empty Session object with the given ID or a newly created session ID if none was specified

  - ### createSession

    public Session createSession(String sessionId, boolean distribute)
    Create new session with check maxActiveSessions and send session creation to other cluster nodes.
    Parameters:
      `sessionId` - The session id that should be used for the session
      `distribute` - `true` to replicate the new session
    Returns:
      The session

  - ### sendCreateSession

    protected void sendCreateSession(String sessionId, DeltaSession session)
    Send create session event to all backup node
    Parameters:
      `sessionId` - The session id of the session
      `session` - The session object

  - ### send

    protected void send(SessionMessage msg)
    Send messages to other backup member (domain or all)
    Parameters:
      `msg` - Session message

  - ### createEmptySession

    public Session createEmptySession()
    Get a session from the recycled ones or create a new empty one. The PersistentManager manager does not need to create session data because it reads it from the Store.

    Creates new DeltaSession instance.

    Specified by:
      `createEmptySession` in interface `Manager`
    Overrides:
      `createEmptySession` in class `ManagerBase`
    Returns:
      An empty Session object

  - ### getNewDeltaSession

    @Deprecated protected DeltaSession getNewDeltaSession()
    Deprecated.
    Unused. This will be removed in Tomcat 10.
    Get new session class to be used in the doLoad() method.
    Returns:
      a new session

  - ### changeSessionId

    public void changeSessionId(Session session)
    Description copied from interface: `Manager`
    Change the session ID of the current session to a new randomly generated session ID.
    Specified by:
      `changeSessionId` in interface `Manager`
    Overrides:
      `changeSessionId` in class `ManagerBase`
    Parameters:
      `session` - The session to change the session ID for

  - ### rotateSessionId

    public String rotateSessionId(Session session)
    Description copied from interface: `Manager`
    Change the session ID of the current session to a new randomly generated session ID.
    Specified by:
      `rotateSessionId` in interface `Manager`
    Overrides:
      `rotateSessionId` in class `ManagerBase`
    Parameters:
      `session` - The session to change the session ID for
    Returns:
      The new session ID

  - ### changeSessionId

    public void changeSessionId(Session session, String newId)
    Description copied from interface: `Manager`
    Change the session ID of the current session to a specified session ID.
    Specified by:
      `changeSessionId` in interface `Manager`
    Overrides:
      `changeSessionId` in class `ManagerBase`
    Parameters:
      `session` - The session to change the session ID for
      `newId` - new session ID

  - ### changeSessionId

    @Deprecated protected void changeSessionId(Session session, boolean notify)
    Deprecated.
    Will be removed in Tomcat 10
    Parameters:
      `session` - The session
      `notify` - Notify change

  - ### rotateSessionId

    protected String rotateSessionId(Session session, boolean notify)

  - ### changeSessionId

    protected void changeSessionId(Session session, String newId, boolean notify)
    Change the session ID and optionally notify cluster members.
    Parameters:
      `session` - The session whose ID should be changed
      `newId` - The new session ID
      `notify` - Whether to notify cluster members of the change

  - ### sendChangeSessionId

    protected void sendChangeSessionId(String newSessionID, String orgSessionID)
    Send a session ID change notification to cluster members.
    Parameters:
      `newSessionID` - The new session ID
      `orgSessionID` - The original session ID

  - ### serializeSessionId

    protected byte[] serializeSessionId(String sessionId) throws IOException
    serialize sessionID
    Parameters:
      `sessionId` - Session id to serialize
    Returns:
      byte array with serialized session id
    Throws:
      `IOException` - if an input/output error occurs

  - ### deserializeSessionId

    protected String deserializeSessionId(byte[] data) throws IOException
    Load sessionID
    Parameters:
      `data` - serialized session id
    Returns:
      session id
    Throws:
      `IOException` - if an input/output error occurs

  - ### deserializeDeltaRequest

    @Deprecated protected DeltaRequest deserializeDeltaRequest(DeltaSession session, byte[] data) throws ClassNotFoundException, IOException
    Deprecated.
    Unused. This will be removed in Tomcat 10. Calling this method may result in a deadlock. See: https://bz.apache.org/bugzilla/show_bug.cgi?id=62841
    Load Deltarequest from external node Load the Class at container classloader
    Parameters:
      `session` - Corresponding session
      `data` - message data
    Returns:
      The request
    Throws:
      `ClassNotFoundException` - Serialization error
      `IOException` - IO error with serialization
    See Also:
      - `DeltaRequest.readExternal(java.io.ObjectInput)`

  - ### serializeDeltaRequest

    @Deprecated protected byte[] serializeDeltaRequest(DeltaSession session, DeltaRequest deltaRequest) throws IOException
    Deprecated.
    Unused. This will be removed in Tomcat 10. Calling this method may result in a deadlock. See: https://bz.apache.org/bugzilla/show_bug.cgi?id=62841
    serialize DeltaRequest
    Parameters:
      `session` - Associated session
      `deltaRequest` - The request to serialize
    Returns:
      serialized delta request
    Throws:
      `IOException` - IO error with serialization
    See Also:
      - `DeltaRequest.writeExternal(java.io.ObjectOutput)`

  - ### deserializeSessions

    protected void deserializeSessions(byte[] data) throws ClassNotFoundException, IOException
    Load sessions from other cluster node.

    FIXME replace currently sessions with same id without notification.

    FIXME SSO handling is not really correct with the session replacement!

    Parameters:
      `data` - Serialized data
    Throws:
      `ClassNotFoundException` - if a serialized class cannot be found during the reload
      `IOException` - if an input/output error occurs

  - ### serializeSessions

    protected byte[] serializeSessions(Session[] currentSessions) throws IOException
    Save any currently active sessions in the appropriate persistence mechanism, if any. If persistence is not supported, this method returns without doing anything.
    Parameters:
      `currentSessions` - Sessions to serialize
    Returns:
      serialized data
    Throws:
      `IOException` - if an input/output error occurs

  - ### startInternal

    protected void startInternal() throws LifecycleException
    Start this component and implement the requirements of `LifecycleBase.startInternal()`.
    Overrides:
      `startInternal` in class `ClusterManagerBase`
    Throws:
      `LifecycleException` - if this component detects a fatal error that prevents this component from being used

  - ### getAllClusterSessions

    public void getAllClusterSessions()
    get from first session master the backup from all clustered sessions
    See Also:
      - `findSessionMasterMember()`

  - ### findSessionMasterMember

    protected Member findSessionMasterMember()
    Find the master of the session state
    Returns:
      master member of sessions

  - ### waitForSendAllSessions

    protected void waitForSendAllSessions(long beforeSendTime)
    Wait that cluster session state is transferred or timeout after 60 Sec With stateTransferTimeout == -1 wait that backup is transferred (forever mode)
    Parameters:
      `beforeSendTime` - Start instant of the operation

  - ### stopInternal

    protected void stopInternal() throws LifecycleException
    Stop this component and implement the requirements of `LifecycleBase.stopInternal()`.
    Overrides:
      `stopInternal` in class `ClusterManagerBase`
    Throws:
      `LifecycleException` - if this component detects a fatal error that prevents this component from being used

  - ### messageDataReceived

    public void messageDataReceived(ClusterMessage cmsg)
    Description copied from interface: `ClusterManager`
    A message was received from another node, this is the callback method to implement if you are interested in receiving replication messages.
    Parameters:
      `cmsg` - - the message received.

  - ### requestCompleted

    public ClusterMessage requestCompleted(String sessionId)
    Description copied from interface: `ClusterManager`
    When the request has been completed, the replication valve will notify the manager, and the manager will decide whether any replication is needed or not. If there is a need for replication, the manager will create a session message and that will be replicated. The cluster determines where it gets sent.
    Parameters:
      `sessionId` - - the sessionId that just completed.
    Returns:
      a SessionMessage to be sent.

  - ### requestCompleted

    public ClusterMessage requestCompleted(String sessionId, boolean expires)
    When the request has been completed, the replication valve will notify the manager, and the manager will decide whether any replication is needed or not. If there is a need for replication, the manager will create a session message and that will be replicated. The cluster determines where it gets sent. Session expiration also calls this method, but with expires == true.
    Parameters:
      `sessionId` - - the sessionId that just completed.
      `expires` - - whether this method has been called during session expiration
    Returns:
      a SessionMessage to be sent,

  - ### resetStatistics

    public void resetStatistics()
    Reset manager statistics

  - ### sessionExpired

    protected void sessionExpired(String id)
    send session expired to other cluster nodes
    Parameters:
      `id` - session id

  - ### expireAllLocalSessions

    public void expireAllLocalSessions()
    Expire all find sessions.

  - ### getInvalidatedSessions

    public String[] getInvalidatedSessions()
    Description copied from interface: `ClusterManager`
    When the manager expires session not tied to a request. The cluster will periodically ask for a list of sessions that should expire and that should be sent across the wire.
    Returns:
      String[] The invalidated sessions

  - ### messageReceived

    protected void messageReceived(SessionMessage msg, Member sender)
    This method is called by the received thread when a SessionMessage has been received from one of the other nodes in the cluster.
    Parameters:
      `msg` - - the message received
      `sender` - - the sender of the message, this is used if we receive a EVT_GET_ALL_SESSION message, so that we only reply to the requesting node

  - ### handleALL_SESSION_TRANSFERCOMPLETE

    protected void handleALL_SESSION_TRANSFERCOMPLETE(SessionMessage msg, Member sender)
    handle receive session state is complete transferred
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message

  - ### handleSESSION_DELTA

    protected void handleSESSION_DELTA(SessionMessage msg, Member sender) throws IOException, ClassNotFoundException
    handle receive session delta
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message
    Throws:
      `IOException` - IO error with serialization
      `ClassNotFoundException` - Serialization error

  - ### handleSESSION_ACCESSED

    protected void handleSESSION_ACCESSED(SessionMessage msg, Member sender) throws IOException
    handle receive session is access at other node ( primary session is now false)
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message
    Throws:
      `IOException` - Propagated IO error

  - ### handleSESSION_EXPIRED

    protected void handleSESSION_EXPIRED(SessionMessage msg, Member sender) throws IOException
    handle receive session is expired at other node ( expire session also here)
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message
    Throws:
      `IOException` - Propagated IO error

  - ### handleSESSION_CREATED

    protected void handleSESSION_CREATED(SessionMessage msg, Member sender)
    handle receive new session is created at other node (create backup - primary false)
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message

  - ### handleALL_SESSION_DATA

    protected void handleALL_SESSION_DATA(SessionMessage msg, Member sender) throws ClassNotFoundException, IOException
    Handle receive sessions from other node ( restart )
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message
    Throws:
      `ClassNotFoundException` - Serialization error
      `IOException` - IO error with serialization

  - ### handleGET_ALL_SESSIONS

    protected void handleGET_ALL_SESSIONS(SessionMessage msg, Member sender) throws IOException
    Handle a get all sessions message from another node. Depending on `sendAllSessions`, sessions are either sent in a single message or in batches. Sending is complete when this method exits.
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message
    Throws:
      `IOException` - IO error sending messages

  - ### handleCHANGE_SESSION_ID

    protected void handleCHANGE_SESSION_ID(SessionMessage msg, Member sender) throws IOException
    handle receive change sessionID at other node
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message
    Throws:
      `IOException` - IO error with serialization

  - ### handleALL_SESSION_NOCONTEXTMANAGER

    protected void handleALL_SESSION_NOCONTEXTMANAGER(SessionMessage msg, Member sender)
    handle receive no context manager.
    Parameters:
      `msg` - Session message
      `sender` - Member which sent the message

  - ### sendSessions

    protected void sendSessions(Member sender, Session[] currentSessions, long sendTimestamp) throws IOException
    send a block of session to sender
    Parameters:
      `sender` - Sender member
      `currentSessions` - Sessions to send
      `sendTimestamp` - Timestamp
    Throws:
      `IOException` - IO error sending messages

  - ### cloneFromTemplate

    public ClusterManager cloneFromTemplate()
    Description copied from interface: `ClusterManager`
    Creates a clone of this manager from a template configuration.
    Returns:
      a clone of a template manager configuration