MessageDispatchInterceptor (Apache Tomcat 9.0.118 API Documentation)
Description: declaration: package: org.apache.catalina.tribes.group.interceptors, class: MessageDispatchInterceptor

# Class MessageDispatchInterceptor

java.lang.Object
org.apache.catalina.tribes.group.ChannelInterceptorBase
org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptor

All Implemented Interfaces:
  `ChannelInterceptor, MessageDispatchInterceptorMBean, Heartbeat, MembershipListener`

public class MessageDispatchInterceptor extends ChannelInterceptorBase implements MessageDispatchInterceptorMBean
The message dispatcher is a way to enable asynchronous communication through a channel. The dispatcher will look for the `Channel.SEND_OPTIONS_ASYNCHRONOUS` flag to be set, if it is, it will queue the message for delivery and immediately return to the sender.

- ## Nested Class Summary

  ### Nested classes/interfaces inherited from interface ChannelInterceptor

  `ChannelInterceptor.InterceptorEvent`

- ## Field Summary

  Fields
  Modifier and Type
  Field
  Description
  `protected boolean`
  `alwaysSend`
  `protected final AtomicLong`
  `currentSize`
  `protected ExecutorService`
  `executor`
  `protected long`
  `keepAliveTime`
  `protected long`
  `maxQueueSize`
  `protected int`
  `maxSpareThreads`
  `protected int`
  `maxThreads`
  `protected boolean`
  `run`
  `protected static final StringManager`
  `sm`
  `protected boolean`
  `useDeepClone`

  ### Fields inherited from class ChannelInterceptorBase

  `optionFlag`

- ## Constructor Summary

  Constructors
  Constructor
  Description
  `MessageDispatchInterceptor()`

- ## Method Summary

  Modifier and Type
  Method
  Description
  `long`
  `addAndGetCurrentSize(long inc)`
  `boolean`
  `addToQueue(ChannelMessage msg, Member[] destination, InterceptorPayload payload)`
  `int`
  `getActiveCount()`
  Return the current number of threads that are in use.
  `long`
  `getCompletedTaskCount()`
  Return the total number of tasks that have completed execution by the pool.
  `long`
  `getCurrentSize()`
  `long`
  `getKeepAliveTime()`
  `long`
  `getMaxQueueSize()`
  `int`
  `getMaxSpareThreads()`
  `int`
  `getMaxThreads()`
  `int`
  `getPoolSize()`
  Return the current number of threads that are managed by the pool.
  `long`
  `getTaskCount()`
  Return the total number of tasks that have ever been scheduled for execution by the pool.
  `boolean`
  `getUseDeepClone()`
  `boolean`
  `isAlwaysSend()`
  `protected void`
  `sendAsyncData(ChannelMessage msg, Member[] destination, InterceptorPayload payload)`
  `void`
  `sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload)`
  The `sendMessage` method is called when a message is being sent to one more destinations.
  `void`
  `setAlwaysSend(boolean alwaysSend)`
  `long`
  `setAndGetCurrentSize(long value)`
  `void`
  `setKeepAliveTime(long keepAliveTime)`
  `void`
  `setMaxQueueSize(long maxQueueSize)`
  `void`
  `setMaxSpareThreads(int maxSpareThreads)`
  `void`
  `setMaxThreads(int maxThreads)`
  `void`
  `setOptionFlag(int flag)`
  Sets the option flag
  `void`
  `setUseDeepClone(boolean useDeepClone)`
  `void`
  `start(int svc)`
  Starts up the channel.
  `void`
  `startQueue()`
  `void`
  `stop(int svc)`
  Shuts down the channel.
  `void`
  `stopQueue()`

  ### Methods inherited from class ChannelInterceptorBase

  `fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, heartbeat, memberAdded, memberDisappeared, messageReceived, okToProcess, setChannel, setNext, setPrevious`

  ### Methods inherited from class Object

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

  ### Methods inherited from interface MessageDispatchInterceptorMBean

  `getOptionFlag`

- ## Field Details

  - ### sm

    protected static final StringManager sm

  - ### maxQueueSize

    protected long maxQueueSize

  - ### run

    protected volatile boolean run

  - ### useDeepClone

    protected boolean useDeepClone

  - ### alwaysSend

    protected boolean alwaysSend

  - ### currentSize

    protected final AtomicLong currentSize

  - ### executor

    protected ExecutorService executor

  - ### maxThreads

    protected int maxThreads

  - ### maxSpareThreads

    protected int maxSpareThreads

  - ### keepAliveTime

    protected long keepAliveTime

- ## Constructor Details

  - ### MessageDispatchInterceptor

    public MessageDispatchInterceptor()

- ## Method Details

  - ### sendMessage

    public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException
    Description copied from interface: `ChannelInterceptor`
    The `sendMessage` method is called when a message is being sent to one more destinations. The interceptor can modify any of the parameters and then pass on the message down the stack by invoking `getNext().sendMessage(destination,msg,payload)`.

    Alternatively the interceptor can stop the message from being sent by not invoking `getNext().sendMessage(destination,msg,payload)`.

    If the message is to be sent asynchronous the application can be notified of completion and errors by passing in an error handler attached to a payload object.

    The ChannelMessage.getAddress contains Channel.getLocalMember, and can be overwritten to simulate a message sent from another node.

    Specified by:
      `sendMessage` in interface `ChannelInterceptor`
    Overrides:
      `sendMessage` in class `ChannelInterceptorBase`
    Parameters:
      `destination` - Member[] - the destination for this message
      `msg` - ChannelMessage - the message to be sent
      `payload` - InterceptorPayload - the payload, carrying an error handler and future useful data, can be null
    Throws:
      `ChannelException` - if a serialization error happens.
    See Also:
      - `ErrorHandler`
      - `InterceptorPayload`

  - ### addToQueue

    public boolean addToQueue(ChannelMessage msg, Member[] destination, InterceptorPayload payload)

  - ### startQueue

    public void startQueue()

  - ### stopQueue

    public void stopQueue()

  - ### setOptionFlag

    public void setOptionFlag(int flag)
    Description copied from interface: `ChannelInterceptor`
    Sets the option flag
    Specified by:
      `setOptionFlag` in interface `ChannelInterceptor`
    Overrides:
      `setOptionFlag` in class `ChannelInterceptorBase`
    Parameters:
      `flag` - int
    See Also:
      - `ChannelInterceptor.getOptionFlag()`

  - ### setMaxQueueSize

    public void setMaxQueueSize(long maxQueueSize)

  - ### setUseDeepClone

    public void setUseDeepClone(boolean useDeepClone)

  - ### getMaxQueueSize

    public long getMaxQueueSize()
    Specified by:
      `getMaxQueueSize` in interface `MessageDispatchInterceptorMBean`

  - ### getUseDeepClone

    public boolean getUseDeepClone()

  - ### getCurrentSize

    public long getCurrentSize()
    Specified by:
      `getCurrentSize` in interface `MessageDispatchInterceptorMBean`

  - ### addAndGetCurrentSize

    public long addAndGetCurrentSize(long inc)

  - ### setAndGetCurrentSize

    public long setAndGetCurrentSize(long value)

  - ### getKeepAliveTime

    public long getKeepAliveTime()
    Specified by:
      `getKeepAliveTime` in interface `MessageDispatchInterceptorMBean`

  - ### getMaxSpareThreads

    public int getMaxSpareThreads()
    Specified by:
      `getMaxSpareThreads` in interface `MessageDispatchInterceptorMBean`

  - ### getMaxThreads

    public int getMaxThreads()
    Specified by:
      `getMaxThreads` in interface `MessageDispatchInterceptorMBean`

  - ### setKeepAliveTime

    public void setKeepAliveTime(long keepAliveTime)

  - ### setMaxSpareThreads

    public void setMaxSpareThreads(int maxSpareThreads)

  - ### setMaxThreads

    public void setMaxThreads(int maxThreads)

  - ### isAlwaysSend

    public boolean isAlwaysSend()
    Specified by:
      `isAlwaysSend` in interface `MessageDispatchInterceptorMBean`

  - ### setAlwaysSend

    public void setAlwaysSend(boolean alwaysSend)
    Specified by:
      `setAlwaysSend` in interface `MessageDispatchInterceptorMBean`

  - ### start

    public void start(int svc) throws ChannelException
    Description copied from interface: `ChannelInterceptor`
    Starts up the channel. This can be called multiple times for individual services to start The svc parameter can be the logical or value of any constants
    Specified by:
      `start` in interface `ChannelInterceptor`
    Overrides:
      `start` in class `ChannelInterceptorBase`
    Parameters:
      `svc` - one of:
      - Channel.DEFAULT - will start all services
      - Channel.MBR_RX_SEQ - starts the membership receiver
      - Channel.MBR_TX_SEQ - starts the membership broadcaster
      - Channel.SND_TX_SEQ - starts the replication transmitter
      - Channel.SND_RX_SEQ - starts the replication receiver
    Throws:
      `ChannelException` - if a startup error occurs or the service is already started.
    See Also:
      - `Channel`

  - ### stop

    public void stop(int svc) throws ChannelException
    Description copied from interface: `ChannelInterceptor`
    Shuts down the channel. This can be called multiple times for individual services to shut down. The svc parameter can be the logical or value of any constants
    Specified by:
      `stop` in interface `ChannelInterceptor`
    Overrides:
      `stop` in class `ChannelInterceptorBase`
    Parameters:
      `svc` - one of:
      - Channel.DEFAULT - will shut down all services
      - Channel.MBR_RX_SEQ - stops the membership receiver
      - Channel.MBR_TX_SEQ - stops the membership broadcaster
      - Channel.SND_TX_SEQ - stops the replication transmitter
      - Channel.SND_RX_SEQ - stops the replication receiver
    Throws:
      `ChannelException` - if a startup error occurs or the service is already started.
    See Also:
      - `Channel`

  - ### sendAsyncData

    protected void sendAsyncData(ChannelMessage msg, Member[] destination, InterceptorPayload payload)

  - ### getPoolSize

    public int getPoolSize()
    Return the current number of threads that are managed by the pool.
    Specified by:
      `getPoolSize` in interface `MessageDispatchInterceptorMBean`
    Returns:
      the current number of threads that are managed by the pool

  - ### getActiveCount

    public int getActiveCount()
    Return the current number of threads that are in use.
    Specified by:
      `getActiveCount` in interface `MessageDispatchInterceptorMBean`
    Returns:
      the current number of threads that are in use

  - ### getTaskCount

    public long getTaskCount()
    Return the total number of tasks that have ever been scheduled for execution by the pool.
    Specified by:
      `getTaskCount` in interface `MessageDispatchInterceptorMBean`
    Returns:
      the total number of tasks that have ever been scheduled for execution by the pool

  - ### getCompletedTaskCount

    public long getCompletedTaskCount()
    Return the total number of tasks that have completed execution by the pool.
    Specified by:
      `getCompletedTaskCount` in interface `MessageDispatchInterceptorMBean`
    Returns:
      the total number of tasks that have completed execution by the pool