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
`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
`MessageDispatchInterceptor()`

### Method Summary

All Methods Instance Methods Concrete Methods
`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