Class FragmentationInterceptor

java.lang.Object
org.apache.catalina.tribes.group.ChannelInterceptorBase
org.apache.catalina.tribes.group.interceptors.FragmentationInterceptor
All Implemented Interfaces:
ChannelInterceptor, FragmentationInterceptorMBean, Heartbeat, MembershipListener

public class FragmentationInterceptor extends ChannelInterceptorBase implements FragmentationInterceptorMBean
The fragmentation interceptor splits up large messages into smaller messages and assembles them on the other end. This is very useful when you don't want large messages hogging the sending sockets and smaller messages can make it through.
Configuration Options
FragmentationInterceptor.expire=<milliseconds> - how long do we keep the fragments in memory and wait for the rest to arrive default=60,000ms -> 60seconds This setting is useful to avoid OutOfMemoryErrors
FragmentationInterceptor.maxSize=<max message size> - message size in bytes default=1024*100 (around a tenth of a MB)
  • Field Details

  • Constructor Details

    • FragmentationInterceptor

      public FragmentationInterceptor()
      Creates a new FragmentationInterceptor instance.
  • Method Details

    • 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:
    • 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
    • getFragCollection

      Gets the fragment collection for the given key, creating one if it does not exist.
      Parameters:
      key - The fragment key
      msg - The channel message used to initialize a new collection if needed
      Returns:
      The fragment collection for the given key
    • removeFragCollection

      public void removeFragCollection(FragmentationInterceptor.FragKey key)
      Removes the fragment collection for the given key.
      Parameters:
      key - The fragment key to remove
    • defrag

      public void defrag(ChannelMessage msg)
      Reassembles a fragmented message from its parts.
      Parameters:
      msg - The channel message fragment to process
    • frag

      public void frag(Member[] destination, ChannelMessage msg, InterceptorPayload payload) throws ChannelException
      Fragments a large message into smaller pieces and sends them.
      Parameters:
      destination - The destination members
      msg - The channel message to fragment
      payload - The interceptor payload
      Throws:
      ChannelException - if an error occurs during fragmentation
    • heartbeat

      public void heartbeat()
      Description copied from interface: ChannelInterceptor
      The heartbeat() method gets invoked periodically to allow interceptors to clean up resources, time out object and perform actions that are unrelated to sending/receiving data.
      Specified by:
      heartbeat in interface ChannelInterceptor
      Specified by:
      heartbeat in interface Heartbeat
      Overrides:
      heartbeat in class ChannelInterceptorBase
    • getMaxSize

      public int getMaxSize()
      Description copied from interface: FragmentationInterceptorMBean
      Returns the maximum size of a fragment in bytes.
      Specified by:
      getMaxSize in interface FragmentationInterceptorMBean
      Returns:
      The maximum fragment size
    • getExpire

      public long getExpire()
      Description copied from interface: FragmentationInterceptorMBean
      Returns the expiration time for fragments in milliseconds.
      Specified by:
      getExpire in interface FragmentationInterceptorMBean
      Returns:
      The fragment expiration time
    • setMaxSize

      public void setMaxSize(int maxSize)
      Description copied from interface: FragmentationInterceptorMBean
      Sets the maximum size of a fragment in bytes.
      Specified by:
      setMaxSize in interface FragmentationInterceptorMBean
      Parameters:
      maxSize - The maximum fragment size
    • setExpire

      public void setExpire(long expire)
      Description copied from interface: FragmentationInterceptorMBean
      Sets the expiration time for fragments in milliseconds.
      Specified by:
      setExpire in interface FragmentationInterceptorMBean
      Parameters:
      expire - The fragment expiration time