OrderInterceptor (Apache Tomcat 10.1.14 API Documentation)

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

## Class OrderInterceptor

- java.lang.Object
- - org.apache.catalina.tribes.group.ChannelInterceptorBase
  - - 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
  OrderInterceptor.expire=<milliseconds> - if a message arrives out of order, how long before we act on it default=3000ms
  OrderInterceptor.maxQueue=<max queue size> - how much can the queue grow to ensure ordering. This setting is useful to avoid OutOfMemoryErrorsdefault=Integer.MAX_VALUE
  OrderInterceptor.forwardExpired=<boolean> - 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

- - ### Nested Class Summary

    Nested Classes
    Modifier and Type | Class | Description
    --- | --- | ---
    `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
    Modifier and Type | Field | Description
    --- | --- | ---
    `protected static StringManager` | `sm` |

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

      `optionFlag`

  - ### Constructor Summary

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

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method | Description
    --- | --- | ---
    `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

      `fireInterceptorEvent, getChannel, getLocalMember, getMember, getMembers, getNext, getOptionFlag, getPrevious, hasMembers, heartbeat, okToProcess, setChannel, setNext, setOptionFlag, setPrevious, start, stop`

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

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

- - ### Field Detail

    - #### sm

          protected static final StringManager sm

  - ### 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` - if a serialization error happens.
      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()