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 theChannel.SEND_OPTIONS_ASYNCHRONOUSflag 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 booleanalwaysSendprotected AtomicLongcurrentSizeprotected ExecutorServiceexecutorprotected longkeepAliveTimeprotected longmaxQueueSizeprotected intmaxSpareThreadsprotected intmaxThreadsprotected booleanrunprotected static StringManagersmprotected booleanuseDeepClone-
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 longaddAndGetCurrentSize(long inc)booleanaddToQueue(ChannelMessage msg, Member[] destination, InterceptorPayload payload)intgetActiveCount()Return the current number of threads that are in use.longgetCompletedTaskCount()Return the total number of tasks that have completed execution by the pool.longgetCurrentSize()longgetKeepAliveTime()longgetMaxQueueSize()intgetMaxSpareThreads()intgetMaxThreads()intgetPoolSize()Return the current number of threads that are managed by the pool.longgetTaskCount()Return the total number of tasks that have ever been scheduled for execution by the pool.booleangetUseDeepClone()booleanisAlwaysSend()protected voidsendAsyncData(ChannelMessage msg, Member[] destination, InterceptorPayload payload)voidsendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload)ThesendMessagemethod is called when a message is being sent to one more destinations.voidsetAlwaysSend(boolean alwaysSend)longsetAndGetCurrentSize(long value)voidsetKeepAliveTime(long keepAliveTime)voidsetMaxQueueSize(long maxQueueSize)voidsetMaxSpareThreads(int maxSpareThreads)voidsetMaxThreads(int maxThreads)voidsetOptionFlag(int flag)Sets the option flagvoidsetUseDeepClone(boolean useDeepClone)voidstart(int svc)Starts up the channel.voidstartQueue()voidstop(int svc)Shuts down the channel.voidstopQueue()-
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
-
-
Method Detail
-
sendMessage
public void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException
Description copied from interface:ChannelInterceptorThesendMessagemethod 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 invokinggetNext().sendMessage(destination,msg,payload)
Alternatively the interceptor can stop the message from being sent by not invokinggetNext().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:
sendMessagein interfaceChannelInterceptor- Overrides:
sendMessagein classChannelInterceptorBase- Parameters:
destination- Member[] - the destination for this messagemsg- ChannelMessage - the message to be sentpayload- 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:ChannelInterceptorSets the option flag- Specified by:
setOptionFlagin interfaceChannelInterceptor- Overrides:
setOptionFlagin classChannelInterceptorBase- 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:
getMaxQueueSizein interfaceMessageDispatchInterceptorMBean
-
getUseDeepClone
public boolean getUseDeepClone()
-
getCurrentSize
public long getCurrentSize()
- Specified by:
getCurrentSizein interfaceMessageDispatchInterceptorMBean
-
addAndGetCurrentSize
public long addAndGetCurrentSize(long inc)
-
setAndGetCurrentSize
public long setAndGetCurrentSize(long value)
-
getKeepAliveTime
public long getKeepAliveTime()
- Specified by:
getKeepAliveTimein interfaceMessageDispatchInterceptorMBean
-
getMaxSpareThreads
public int getMaxSpareThreads()
- Specified by:
getMaxSpareThreadsin interfaceMessageDispatchInterceptorMBean
-
getMaxThreads
public int getMaxThreads()
- Specified by:
getMaxThreadsin interfaceMessageDispatchInterceptorMBean
-
setKeepAliveTime
public void setKeepAliveTime(long keepAliveTime)
-
setMaxSpareThreads
public void setMaxSpareThreads(int maxSpareThreads)
-
setMaxThreads
public void setMaxThreads(int maxThreads)
-
isAlwaysSend
public boolean isAlwaysSend()
- Specified by:
isAlwaysSendin interfaceMessageDispatchInterceptorMBean
-
setAlwaysSend
public void setAlwaysSend(boolean alwaysSend)
- Specified by:
setAlwaysSendin interfaceMessageDispatchInterceptorMBean
-
start
public void start(int svc) throws ChannelExceptionDescription copied from class:ChannelInterceptorBaseStarts 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:
startin interfaceChannelInterceptor- Overrides:
startin classChannelInterceptorBase- 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 ChannelExceptionDescription copied from class:ChannelInterceptorBaseShuts 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:
stopin interfaceChannelInterceptor- Overrides:
stopin classChannelInterceptorBase- 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:
getPoolSizein interfaceMessageDispatchInterceptorMBean- 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:
getActiveCountin interfaceMessageDispatchInterceptorMBean- 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:
getTaskCountin interfaceMessageDispatchInterceptorMBean- 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:
getCompletedTaskCountin interfaceMessageDispatchInterceptorMBean- Returns:
- the total number of tasks that have completed execution by the pool
-
-