Apache Tomcat 7.0.28

org.apache.catalina.tribes.group.interceptors
Class OrderInterceptor

java.lang.Object
  extended by org.apache.catalina.tribes.group.ChannelInterceptorBase
      extended by org.apache.catalina.tribes.group.interceptors.OrderInterceptor
All Implemented Interfaces:
ChannelInterceptor, Heartbeat, MembershipListener

public class OrderInterceptor
extends ChannelInterceptorBase

The order interceptor guarantees that messages are received in the same order they were sent. This interceptor works best with the ack=true setting.
There is no point in using this with the replicationMode="fastasynchqueue" as this mode guarantees ordering.
If you are using the mode ack=false replicationMode=pooled, and have a lot of concurrent threads, this interceptor can really slow you down, as many messages will be completely out of order and the queue might become rather large. If this is the case, then you might want to set the value OrderInterceptor.maxQueue = 25 (meaning that we will never keep more than 25 messages in our queue)
Configuration Options
OrderInteceptor.expire= - if a message arrives out of order, how long before we act on it default=3000ms
OrderInteceptor.maxQueue= - how much can the queue grow to ensure ordering. This setting is useful to avoid OutOfMemoryErrorsdefault=Integer.MAX_VALUE
OrderInterceptor.forwardExpired= - this flag tells the interceptor what to do when a message has expired or the queue has grown larger than the maxQueue value. true means that the message is sent up the stack to the receiver that will receive and out of order message false means, forget the message and reset the message counter. default=true

Version:
1.1
Author:
Filip Hanik

Nested Class Summary
protected static class OrderInterceptor.Counter
           
protected static class OrderInterceptor.MessageOrder
           
 
Nested classes/interfaces inherited from interface org.apache.catalina.tribes.ChannelInterceptor
ChannelInterceptor.InterceptorEvent
 
Field Summary
 
Fields inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
optionFlag
 
Constructor Summary
OrderInterceptor()
           
 
Method Summary
 long getExpire()
           
 boolean getForwardExpired()
           
protected  OrderInterceptor.Counter getInCounter(Member mbr)
           
 int getMaxQueue()
           
protected  OrderInterceptor.Counter getOutCounter(Member mbr)
           
protected  int incCounter(Member mbr)
           
 void memberAdded(Member member)
          A member was added to the group
 void memberDisappeared(Member member)
          A member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data
 void messageReceived(ChannelMessage msg)
          the messageReceived is invoked when a message is received.
protected  boolean processIncoming(OrderInterceptor.MessageOrder order)
           
protected  void processLeftOvers(Member member, boolean force)
           
 void sendMessage(Member[] destination, ChannelMessage msg, InterceptorPayload payload)
          The sendMessage method is called when a message is being sent to one more destinations.
 void setExpire(long expire)
           
 void setForwardExpired(boolean forwardExpired)
           
 void setMaxQueue(int maxQueue)
           
 
Methods inherited from class org.apache.catalina.tribes.group.ChannelInterceptorBase
accept, fireInterceptorEvent, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, heartbeat, okToProcess, setNext, setOptionFlag, setPrevious, start, stop
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

OrderInterceptor

public OrderInterceptor()
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
See Also:
ErrorHandler, InterceptorPayload

messageReceived

public void messageReceived(ChannelMessage msg)
Description copied from interface: ChannelInterceptor
the messageReceived is invoked when a message is received. ChannelMessage.getAddress() is the sender, or the reply-to address if it has been overwritten.

Specified by:
messageReceived in interface ChannelInterceptor
Overrides:
messageReceived in class ChannelInterceptorBase
Parameters:
msg - ChannelMessage

processLeftOvers

protected void processLeftOvers(Member member,
                                boolean force)

processIncoming

protected boolean processIncoming(OrderInterceptor.MessageOrder order)
Parameters:
order - MessageOrder
Returns:
boolean - true if a message expired and was processed

memberAdded

public void memberAdded(Member member)
Description copied from interface: MembershipListener
A member was added to the group

Specified by:
memberAdded in interface MembershipListener
Overrides:
memberAdded in class ChannelInterceptorBase
Parameters:
member - Member - the member that was added

memberDisappeared

public void memberDisappeared(Member member)
Description copied from interface: MembershipListener
A member was removed from the group
If the member left voluntarily, the Member.getCommand will contain the Member.SHUTDOWN_PAYLOAD data

Specified by:
memberDisappeared in interface MembershipListener
Overrides:
memberDisappeared in class ChannelInterceptorBase
Parameters:
member - Member
See Also:
Member.SHUTDOWN_PAYLOAD

incCounter

protected int incCounter(Member mbr)

getInCounter

protected OrderInterceptor.Counter getInCounter(Member mbr)

getOutCounter

protected OrderInterceptor.Counter getOutCounter(Member mbr)

setExpire

public void setExpire(long expire)

setForwardExpired

public void setForwardExpired(boolean forwardExpired)

setMaxQueue

public void setMaxQueue(int maxQueue)

getExpire

public long getExpire()

getForwardExpired

public boolean getForwardExpired()

getMaxQueue

public int getMaxQueue()

Apache Tomcat 7.0.28

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