org.apache.catalina.ha.session

## 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, 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.
  Author:
    Filip Hanik, Craig R. McClanahan, Jean-Francois Arcand, Peter Rossbach

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from class org.apache.catalina.session.ManagerBase

      `ManagerBase.SessionTiming`

    - ### Nested classes/interfaces inherited from interface org.apache.catalina.Lifecycle

      `Lifecycle.SingleUse`

  - ### Field Summary

    Fields
    Modifier and Type | Field and Description
    --- | ---
    `Log` | `log`
    `protected static String` | `managerName` The descriptive name of this Manager implementation (for logging).
    `protected String` | `name`
    `protected static StringManager` | `sm` The string manager for this package.

    - ### Fields inherited from class org.apache.catalina.ha.session.ClusterManagerBase

      `cluster`

    - ### Fields inherited from class org.apache.catalina.session.ManagerBase

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

    - ### Fields inherited from class org.apache.catalina.util.LifecycleMBeanBase

      `mserver`

    - ### Fields inherited from interface org.apache.catalina.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 and Description
    `DeltaManager()`

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `changeSessionId(Session session)` Change the session ID of the current session to a new randomly generated session ID.
    `void` | `changeSessionId(Session session, boolean notify)`
    `ClusterManager` | `cloneFromTemplate()`
    `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)` Load Deltarequest from external node Load the Class at container classloader
    `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()`
    `long` | `getCounterReceive_EVT_ALL_SESSION_DATA()`
    `long` | `getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER()`
    `int` | `getCounterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE()`
    `long` | `getCounterReceive_EVT_CHANGE_SESSION_ID()`
    `long` | `getCounterReceive_EVT_GET_ALL_SESSIONS()`
    `long` | `getCounterReceive_EVT_SESSION_ACCESSED()`
    `long` | `getCounterReceive_EVT_SESSION_CREATED()`
    `long` | `getCounterReceive_EVT_SESSION_DELTA()`
    `long` | `getCounterReceive_EVT_SESSION_EXPIRED()`
    `long` | `getCounterSend_EVT_ALL_SESSION_DATA()`
    `int` | `getCounterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE()`
    `long` | `getCounterSend_EVT_CHANGE_SESSION_ID()`
    `long` | `getCounterSend_EVT_GET_ALL_SESSIONS()`
    `long` | `getCounterSend_EVT_SESSION_ACCESSED()`
    `long` | `getCounterSend_EVT_SESSION_CREATED()`
    `long` | `getCounterSend_EVT_SESSION_DELTA()`
    `long` | `getCounterSend_EVT_SESSION_EXPIRED()`
    `String` | `getInfo()` Return descriptive information about this Manager implementation and the corresponding version number, in the format `<description>/<version>`.
    `String[]` | `getInvalidatedSessions()` When the manager expires session not tied to a request.
    `String` | `getName()` Return the name of the manager, at host /context name and at engine hostname+/context.
    `protected DeltaSession` | `getNewDeltaSession()` Get new session class to be used in the doLoad() method.
    `long` | `getProcessingTime()`
    `int` | `getReceivedQueueSize()`
    `int` | `getSendAllSessionsSize()`
    `int` | `getSendAllSessionsWaitTime()`
    `long` | `getSessionReplaceCounter()`
    `boolean` | `getStateTransfered()` is session state transfered complete?
    `int` | `getStateTransferTimeout()`
    `protected void` | `handleALL_SESSION_DATA(SessionMessage msg, Member sender)` handle receive sessions from other not ( 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 transfered
    `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 receive that other node want all sessions ( restart ) a) send all sessions with one message b) send session at blocks After sending send state is complete transfered
    `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 expire at other node ( expire session also here)
    `boolean` | `isExpireSessionsOnShutdown()`
    `boolean` | `isNoContextManagerReceived()`
    `boolean` | `isNotifyContainerListenersOnReplication()`
    `boolean` | `isNotifySessionListenersOnReplication()`
    `boolean` | `isSendAllSessions()`
    `boolean` | `isStateTimestampDrop()`
    `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
    `protected void` | `send(SessionMessage msg)` Send messages to other backup member (domain or all)
    `protected void` | `sendCreateSession(String sessionId, DeltaSession session)` Send create session evt 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)` serialize DeltaRequest
    `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` | `setExpireSessionsOnShutdown(boolean expireSessionsOnShutdown)`
    `void` | `setName(String name)` Set the name of the manager, at host /context name and at engine hostname+/context
    `void` | `setNoContextManagerReceived(boolean noContextManagerReceived)`
    `void` | `setNotifyContainerListenersOnReplication(boolean notifyContainerListenersOnReplication)`
    `void` | `setNotifySessionListenersOnReplication(boolean notifyListenersCreateSessionOnReplication)`
    `void` | `setSendAllSessions(boolean sendAllSessions)`
    `void` | `setSendAllSessionsSize(int sendAllSessionsSize)`
    `void` | `setSendAllSessionsWaitTime(int sendAllSessionsWaitTime)`
    `void` | `setStateTimestampDrop(boolean isTimestampDrop)`
    `void` | `setStateTransfered(boolean stateTransfered)` set that state ist complete transfered
    `void` | `setStateTransferTimeout(int timeoutAllSession)`
    `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 transfer or timeout after 60 Sec With stateTransferTimeout == -1 wait that backup is transfered (forever mode)

    - ### Methods inherited from class org.apache.catalina.ha.session.ClusterManagerBase

      `clone, getClassLoaders, getClassLoaders, getCluster, getReplicationStream, getReplicationStream, getSessionAttributeFilter, isNotifyListenersOnReplication, isRecordAllActions, load, registerSessionAtReplicationValve, setCluster, setNotifyListenersOnReplication, setRecordAllActions, setSessionAttributeFilter, unload, willAttributeDistribute`

    - ### Methods inherited from class org.apache.catalina.session.ManagerBase

      `add, addPropertyChangeListener, backgroundProcess, expireSession, findSession, findSessions, generateSessionId, getActiveSessions, getClassName, getContainer, getCreationTime, getCreationTimestamp, getDistributable, getDomainInternal, getDuplicates, getEngine, getExpiredSessions, getJvmRoute, getLastAccessedTime, getLastAccessedTimestamp, getMaxActive, getMaxActiveSessions, getMaxInactiveInterval, getNewSession, getObjectNameKeyProperties, getProcessExpiresFrequency, getRejectedSessions, getSecureRandomAlgorithm, getSecureRandomClass, getSecureRandomProvider, getSession, getSessionAttribute, getSessionAttributeNameFilter, getSessionAttributeNamePattern, getSessionAttributeValueClassNameFilter, getSessionAttributeValueClassNamePattern, getSessionAverageAliveTime, getSessionCounter, getSessionCreateRate, getSessionExpireRate, getSessionIdGenerator, getSessionIdLength, getSessionMaxAliveTime, getThisAccessedTime, getThisAccessedTimestamp, getWarnOnSessionAttributeFilterFailure, initInternal, listSessionIds, processExpires, remove, remove, removePropertyChangeListener, setContainer, setDistributable, setDuplicates, setExpiredSessions, setMaxActive, setMaxActiveSessions, setMaxInactiveInterval, setProcessExpiresFrequency, setProcessingTime, setSecureRandomAlgorithm, setSecureRandomClass, setSecureRandomProvider, setSessionAttributeNameFilter, setSessionAttributeValueClassNameFilter, setSessionCounter, setSessionIdGenerator, setSessionIdLength, setSessionMaxAliveTime, setWarnOnSessionAttributeFilterFailure, toString, updateSessionMaxAliveTime, willAttributeDistribute`

    - ### Methods inherited from class org.apache.catalina.util.LifecycleMBeanBase

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

    - ### Methods inherited from class org.apache.catalina.util.LifecycleBase

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

    - ### Methods inherited from class java.lang.Object

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

    - ### Methods inherited from interface org.apache.catalina.Manager

      `add, addPropertyChangeListener, backgroundProcess, findSession, findSessions, getActiveSessions, getContainer, getDistributable, getExpiredSessions, getMaxActive, getMaxInactiveInterval, getRejectedSessions, getSessionAverageAliveTime, getSessionCounter, getSessionCreateRate, getSessionExpireRate, getSessionIdLength, getSessionMaxAliveTime, remove, remove, removePropertyChangeListener, setContainer, setDistributable, setExpiredSessions, setMaxActive, setMaxInactiveInterval, setSessionCounter, setSessionIdLength, setSessionMaxAliveTime, willAttributeDistribute`

- - ### Field Detail

    - #### log

          public final Log log

    - #### sm

          protected static final StringManager sm

      The string manager for this package.

    - #### managerName

          protected static String managerName

      The descriptive name of this Manager implementation (for logging).

    - #### name

          protected String name

  - ### Constructor Detail

    - #### DeltaManager

          public DeltaManager()

  - ### Method Detail

    - #### getInfo

          public String getInfo()

      Return descriptive information about this Manager implementation and the corresponding version number, in the format `<description>/<version>`.
      Specified by:
        `getInfo` in interface `Manager`
      Overrides:
        `getInfo` in class `ManagerBase`

    - #### 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

    - #### getName

          public String getName()

      Description copied from interface: `ClusterManager`
      Return the name of the manager, at host /context name and at engine hostname+/context.
      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()

      Returns:
        Returns the counterSend_EVT_GET_ALL_SESSIONS.

    - #### getCounterSend_EVT_SESSION_ACCESSED

          public long getCounterSend_EVT_SESSION_ACCESSED()

      Returns:
        Returns the counterSend_EVT_SESSION_ACCESSED.

    - #### getCounterSend_EVT_SESSION_CREATED

          public long getCounterSend_EVT_SESSION_CREATED()

      Returns:
        Returns the counterSend_EVT_SESSION_CREATED.

    - #### getCounterSend_EVT_SESSION_DELTA

          public long getCounterSend_EVT_SESSION_DELTA()

      Returns:
        Returns the counterSend_EVT_SESSION_DELTA.

    - #### getCounterSend_EVT_SESSION_EXPIRED

          public long getCounterSend_EVT_SESSION_EXPIRED()

      Returns:
        Returns the counterSend_EVT_SESSION_EXPIRED.

    - #### getCounterSend_EVT_ALL_SESSION_DATA

          public long getCounterSend_EVT_ALL_SESSION_DATA()

      Returns:
        Returns the counterSend_EVT_ALL_SESSION_DATA.

    - #### getCounterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE

          public int getCounterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE()

      Returns:
        Returns the counterSend_EVT_ALL_SESSION_TRANSFERCOMPLETE.

    - #### getCounterSend_EVT_CHANGE_SESSION_ID

          public long getCounterSend_EVT_CHANGE_SESSION_ID()

      Returns:
        Returns the counterSend_EVT_CHANGE_SESSION_ID.

    - #### getCounterReceive_EVT_ALL_SESSION_DATA

          public long getCounterReceive_EVT_ALL_SESSION_DATA()

      Returns:
        Returns the counterReceive_EVT_ALL_SESSION_DATA.

    - #### getCounterReceive_EVT_GET_ALL_SESSIONS

          public long getCounterReceive_EVT_GET_ALL_SESSIONS()

      Returns:
        Returns the counterReceive_EVT_GET_ALL_SESSIONS.

    - #### getCounterReceive_EVT_SESSION_ACCESSED

          public long getCounterReceive_EVT_SESSION_ACCESSED()

      Returns:
        Returns the counterReceive_EVT_SESSION_ACCESSED.

    - #### getCounterReceive_EVT_SESSION_CREATED

          public long getCounterReceive_EVT_SESSION_CREATED()

      Returns:
        Returns the counterReceive_EVT_SESSION_CREATED.

    - #### getCounterReceive_EVT_SESSION_DELTA

          public long getCounterReceive_EVT_SESSION_DELTA()

      Returns:
        Returns the counterReceive_EVT_SESSION_DELTA.

    - #### getCounterReceive_EVT_SESSION_EXPIRED

          public long getCounterReceive_EVT_SESSION_EXPIRED()

      Returns:
        Returns the counterReceive_EVT_SESSION_EXPIRED.

    - #### getCounterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE

          public int getCounterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE()

      Returns:
        Returns the counterReceive_EVT_ALL_SESSION_TRANSFERCOMPLETE.

    - #### getCounterReceive_EVT_CHANGE_SESSION_ID

          public long getCounterReceive_EVT_CHANGE_SESSION_ID()

      Returns:
        Returns the counterReceive_EVT_CHANGE_SESSION_ID.

    - #### getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER

          public long getCounterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER()

      Returns:
        Returns the counterReceive_EVT_ALL_SESSION_NOCONTEXTMANAGER.

    - #### getProcessingTime

          public long getProcessingTime()

      Overrides:
        `getProcessingTime` in class `ManagerBase`
      Returns:
        Returns the processingTime.

    - #### getSessionReplaceCounter

          public long getSessionReplaceCounter()

      Returns:
        Returns the sessionReplaceCounter.

    - #### getCounterNoStateTransfered

          public int getCounterNoStateTransfered()

      Returns:
        Returns the counterNoStateTransfered.

    - #### getReceivedQueueSize

          public int getReceivedQueueSize()

    - #### getStateTransferTimeout

          public int getStateTransferTimeout()

      Returns:
        Returns the stateTransferTimeout.

    - #### setStateTransferTimeout

          public void setStateTransferTimeout(int timeoutAllSession)

      Parameters:
        `timeoutAllSession` - The timeout

    - #### getStateTransfered

          public boolean getStateTransfered()

      is session state transfered complete?

    - #### setStateTransfered

          public void setStateTransfered(boolean stateTransfered)

      set that state ist complete transfered
      Parameters:
        `stateTransfered` -

    - #### isNoContextManagerReceived

          public boolean isNoContextManagerReceived()

    - #### setNoContextManagerReceived

          public void setNoContextManagerReceived(boolean noContextManagerReceived)

    - #### getSendAllSessionsWaitTime

          public int getSendAllSessionsWaitTime()

      Returns:
        Returns the sendAllSessionsWaitTime in msec

    - #### setSendAllSessionsWaitTime

          public void setSendAllSessionsWaitTime(int sendAllSessionsWaitTime)

      Parameters:
        `sendAllSessionsWaitTime` - The sendAllSessionsWaitTime to set at msec.

    - #### isStateTimestampDrop

          public boolean isStateTimestampDrop()

      Returns:
        Returns the stateTimestampDrop.

    - #### setStateTimestampDrop

          public void setStateTimestampDrop(boolean isTimestampDrop)

      Parameters:
        `isTimestampDrop` - The new flag value

    - #### isSendAllSessions

          public boolean isSendAllSessions()

      Returns:
        Returns the sendAllSessions.

    - #### setSendAllSessions

          public void setSendAllSessions(boolean sendAllSessions)

      Parameters:
        `sendAllSessions` - The sendAllSessions to set.

    - #### getSendAllSessionsSize

          public int getSendAllSessionsSize()

      Returns:
        Returns the sendAllSessionsSize.

    - #### setSendAllSessionsSize

          public void setSendAllSessionsSize(int sendAllSessionsSize)

      Parameters:
        `sendAllSessionsSize` - The sendAllSessionsSize to set.

    - #### isNotifySessionListenersOnReplication

          public boolean isNotifySessionListenersOnReplication()

      Returns:
        Returns the notifySessionListenersOnReplication.

    - #### setNotifySessionListenersOnReplication

          public void setNotifySessionListenersOnReplication(boolean notifyListenersCreateSessionOnReplication)

      Parameters:
        `notifyListenersCreateSessionOnReplication` - The notifySessionListenersOnReplication to set.

    - #### isExpireSessionsOnShutdown

          public boolean isExpireSessionsOnShutdown()

    - #### setExpireSessionsOnShutdown

          public void setExpireSessionsOnShutdown(boolean expireSessionsOnShutdown)

    - #### isNotifyContainerListenersOnReplication

          public boolean isNotifyContainerListenersOnReplication()

    - #### setNotifyContainerListenersOnReplication

          public void setNotifyContainerListenersOnReplication(boolean notifyContainerListenersOnReplication)

    - #### 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.

    - #### createSession

          public Session createSession(String sessionId,
                              boolean distribute)

      Create new session with check maxActiveSessions and send session creation to other cluster nodes.
      Parameters:
        `distribute` -
      Returns:
        The session

    - #### sendCreateSession

          protected void sendCreateSession(String sessionId,
                               DeltaSession session)

      Send create session evt to all backup node
      Parameters:
        `sessionId` -
        `session` -

    - #### 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`

    - #### getNewDeltaSession

          protected DeltaSession getNewDeltaSession()

      Get new session class to be used in the doLoad() method.

    - #### 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

    - #### changeSessionId

          public void changeSessionId(Session session,
                             boolean notify)

    - #### serializeSessionId

          protected byte[] serializeSessionId(String sessionId)
                                       throws IOException

      serialize sessionID
      Throws:
        `IOException` - if an input/output error occurs

    - #### deserializeSessionId

          protected String deserializeSessionId(byte[] data)
                                         throws IOException

      Load sessionID
      Throws:
        `IOException` - if an input/output error occurs

    - #### deserializeDeltaRequest

          protected DeltaRequest deserializeDeltaRequest(DeltaSession session,
                                             byte[] data)
                                                  throws ClassNotFoundException,
                                                         IOException

      Load Deltarequest from external node Load the Class at container classloader
      Parameters:
        `session` -
        `data` - message data
      Returns:
        The request
      Throws:
        `ClassNotFoundException`
        `IOException`
      See Also:
        `DeltaRequest.readExternal(java.io.ObjectInput)`

    - #### serializeDeltaRequest

          protected byte[] serializeDeltaRequest(DeltaSession session,
                                     DeltaRequest deltaRequest)
                                          throws IOException

      serialize DeltaRequest
      Parameters:
        `deltaRequest` -
      Returns:
        serialized delta request
      Throws:
        `IOException`
      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!
      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.
      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 transfer or timeout after 60 Sec With stateTransferTimeout == -1 wait that backup is transfered (forever mode)

    - #### 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)

      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)

      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 transfered
      Parameters:
        `msg` -
        `sender` -

    - #### handleSESSION_DELTA

          protected void handleSESSION_DELTA(SessionMessage msg,
                                 Member sender)
                                      throws IOException,
                                             ClassNotFoundException

      handle receive session delta
      Parameters:
        `msg` -
        `sender` -
      Throws:
        `IOException`
        `ClassNotFoundException`

    - #### 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` -
        `sender` -
      Throws:
        `IOException`

    - #### handleSESSION_EXPIRED

          protected void handleSESSION_EXPIRED(SessionMessage msg,
                                   Member sender)
                                        throws IOException

      handle receive session is expire at other node ( expire session also here)
      Parameters:
        `msg` -
        `sender` -
      Throws:
        `IOException`

    - #### 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` -
        `sender` -

    - #### handleALL_SESSION_DATA

          protected void handleALL_SESSION_DATA(SessionMessage msg,
                                    Member sender)
                                         throws ClassNotFoundException,
                                                IOException

      handle receive sessions from other not ( restart )
      Parameters:
        `msg` -
        `sender` -
      Throws:
        `ClassNotFoundException`
        `IOException`

    - #### handleGET_ALL_SESSIONS

          protected void handleGET_ALL_SESSIONS(SessionMessage msg,
                                    Member sender)
                                         throws IOException

      handle receive that other node want all sessions ( restart ) a) send all sessions with one message b) send session at blocks After sending send state is complete transfered
      Parameters:
        `msg` -
        `sender` -
      Throws:
        `IOException`

    - #### handleCHANGE_SESSION_ID

          protected void handleCHANGE_SESSION_ID(SessionMessage msg,
                                     Member sender)
                                          throws IOException

      handle receive change sessionID at other node
      Parameters:
        `msg` -
        `sender` -
      Throws:
        `IOException`

    - #### handleALL_SESSION_NOCONTEXTMANAGER

          protected void handleALL_SESSION_NOCONTEXTMANAGER(SessionMessage msg,
                                                Member sender)

      handle receive no context manager.
      Parameters:
        `msg` -
        `sender` -

    - #### sendSessions

          protected void sendSessions(Member sender,
                          Session[] currentSessions,
                          long sendTimestamp)
                               throws IOException

      send a block of session to sender
      Parameters:
        `sender` -
        `currentSessions` -
        `sendTimestamp` -
      Throws:
        `IOException`

    - #### cloneFromTemplate

          public ClusterManager cloneFromTemplate()

Copyright © 2000-2016 Apache Software Foundation. All Rights Reserved.