Package org.apache.catalina.tribes.group.interceptors

## 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 org.apache.catalina.tribes.ChannelInterceptor

      `ChannelInterceptor.InterceptorEvent`

  - ### Field Summary

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

    - ### Fields inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase

      `optionFlag`

  - ### Constructor Summary

    Constructors
    Constructor | Description
    --- | ---
    `MessageDispatchInterceptor()` |

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    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 org.apache.catalina.tribes.group.ChannelInterceptorBase

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

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

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

    - ### Methods inherited from interface org.apache.catalina.tribes.group.interceptors.MessageDispatchInterceptorMBean

      `getOptionFlag`

- - ### Field Detail

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

    - #### MessageDispatchInterceptor

          public MessageDispatchInterceptor()

  - ### Method Detail

    - #### 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 class: `ChannelInterceptorBase`
      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` - int value of
        DEFAULT - will start all services
        MBR_RX_SEQ - starts the membership receiver
        MBR_TX_SEQ - starts the membership broadcaster
        SND_TX_SEQ - starts the replication transmitter
        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 class: `ChannelInterceptorBase`
      Shuts down the channel. This can be called multiple times for individual services to shutdown 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` - int value of
        DEFAULT - will shutdown all services
        MBR_RX_SEQ - stops the membership receiver
        MBR_TX_SEQ - stops the membership broadcaster
        SND_TX_SEQ - stops the replication transmitter
        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