Class GzipInterceptor

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

public class GzipInterceptor extends ChannelInterceptorBase implements GzipInterceptorMBean
Channel interceptor that compresses messages using GZIP before transmission and decompresses received messages. This reduces bandwidth usage for cluster communication.
  • Field Details

    • sm

      protected static final StringManager sm
      StringManager for this class.
    • DEFAULT_BUFFER_SIZE

      public static final int DEFAULT_BUFFER_SIZE
      Default buffer size for compression/decompression operations.
      See Also:
    • DEFAULT_OPTION_COMPRESSION_ENABLE

      public static final int DEFAULT_OPTION_COMPRESSION_ENABLE
      Default option flag to enable compression.
      See Also:
  • Constructor Details

    • GzipInterceptor

      public GzipInterceptor()
      Default constructor for GzipInterceptor.
  • 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
    • compress

      public static byte[] compress(byte[] data) throws IOException
      Compresses the given data using GZIP compression.
      Parameters:
      data - The data to compress
      Returns:
      The compressed data
      Throws:
      IOException - If a compression error occurs
    • decompress

      public static byte[] decompress(byte[] data) throws IOException
      Decompresses the given data using GZIP decompression.
      Parameters:
      data - The compressed data to decompress
      Returns:
      The decompressed data
      Throws:
      IOException - If a decompression error occurs
    • report

      public void report()
      Description copied from interface: GzipInterceptorMBean
      Writes the current statistics report to the log.
      Specified by:
      report in interface GzipInterceptorMBean
    • getCompressionMinSize

      public int getCompressionMinSize()
      Description copied from interface: GzipInterceptorMBean
      Returns the minimum payload size for compression to be enabled.
      Specified by:
      getCompressionMinSize in interface GzipInterceptorMBean
      Returns:
      The minimum payload size in bytes
    • setCompressionMinSize

      public void setCompressionMinSize(int compressionMinSize)
      Description copied from interface: GzipInterceptorMBean
      Set the minimum payload size for compression to be enabled. A value of zero or less means compression will always be used. If not explicitly configured, a default of zero will be used.
      Specified by:
      setCompressionMinSize in interface GzipInterceptorMBean
      Parameters:
      compressionMinSize - The new minimum payload size
    • getStatsEnabled

      public boolean getStatsEnabled()
      Description copied from interface: GzipInterceptorMBean
      Returns whether the interceptor is configured to collect statistics.
      Specified by:
      getStatsEnabled in interface GzipInterceptorMBean
      Returns:
      true if statistics collection is enabled, otherwise false
    • setStatsEnabled

      public void setStatsEnabled(boolean statsEnabled)
      Description copied from interface: GzipInterceptorMBean
      Configure whether the interceptor collects statistics.
      Specified by:
      setStatsEnabled in interface GzipInterceptorMBean
      Parameters:
      statsEnabled - true to enable statistics collections, otherwise false
    • getInterval

      public int getInterval()
      Description copied from interface: GzipInterceptorMBean
      Returns the number of messages between statistics reports being written to the log.
      Specified by:
      getInterval in interface GzipInterceptorMBean
      Returns:
      The interval between statistics reports
    • setInterval

      public void setInterval(int interval)
      Description copied from interface: GzipInterceptorMBean
      If statistics collection is enabled, set the number of messages between statistics reports being written to the log. A value of zero or less means no statistics reports are written.
      Specified by:
      setInterval in interface GzipInterceptorMBean
      Parameters:
      interval - The new interval between reports
    • getCount

      public int getCount()
      Description copied from interface: GzipInterceptorMBean
      Returns the total message count.
      Specified by:
      getCount in interface GzipInterceptorMBean
      Returns:
      Total number of messages processed
    • getCountCompressedTX

      public int getCountCompressedTX()
      Description copied from interface: GzipInterceptorMBean
      Returns the count of compressed transmitted messages.
      Specified by:
      getCountCompressedTX in interface GzipInterceptorMBean
      Returns:
      Number of compressed TX messages
    • getCountUncompressedTX

      public int getCountUncompressedTX()
      Description copied from interface: GzipInterceptorMBean
      Returns the count of uncompressed transmitted messages.
      Specified by:
      getCountUncompressedTX in interface GzipInterceptorMBean
      Returns:
      Number of uncompressed TX messages
    • getCountCompressedRX

      public int getCountCompressedRX()
      Description copied from interface: GzipInterceptorMBean
      Returns the count of compressed received messages.
      Specified by:
      getCountCompressedRX in interface GzipInterceptorMBean
      Returns:
      Number of compressed RX messages
    • getCountUncompressedRX

      public int getCountUncompressedRX()
      Description copied from interface: GzipInterceptorMBean
      Returns the count of uncompressed received messages.
      Specified by:
      getCountUncompressedRX in interface GzipInterceptorMBean
      Returns:
      Number of uncompressed RX messages
    • getSizeTX

      public long getSizeTX()
      Description copied from interface: GzipInterceptorMBean
      Returns the total transmitted data size in bytes.
      Specified by:
      getSizeTX in interface GzipInterceptorMBean
      Returns:
      Total TX size in bytes
    • getCompressedSizeTX

      public long getCompressedSizeTX()
      Description copied from interface: GzipInterceptorMBean
      Returns the total compressed transmitted data size in bytes.
      Specified by:
      getCompressedSizeTX in interface GzipInterceptorMBean
      Returns:
      Total compressed TX size in bytes
    • getUncompressedSizeTX

      public long getUncompressedSizeTX()
      Description copied from interface: GzipInterceptorMBean
      Returns the total uncompressed transmitted data size in bytes.
      Specified by:
      getUncompressedSizeTX in interface GzipInterceptorMBean
      Returns:
      Total uncompressed TX size in bytes
    • getSizeRX

      public long getSizeRX()
      Description copied from interface: GzipInterceptorMBean
      Returns the total received data size in bytes.
      Specified by:
      getSizeRX in interface GzipInterceptorMBean
      Returns:
      Total RX size in bytes
    • getCompressedSizeRX

      public long getCompressedSizeRX()
      Description copied from interface: GzipInterceptorMBean
      Returns the total compressed received data size in bytes.
      Specified by:
      getCompressedSizeRX in interface GzipInterceptorMBean
      Returns:
      Total compressed RX size in bytes
    • getUncompressedSizeRX

      public long getUncompressedSizeRX()
      Description copied from interface: GzipInterceptorMBean
      Returns the total uncompressed received data size in bytes.
      Specified by:
      getUncompressedSizeRX in interface GzipInterceptorMBean
      Returns:
      Total uncompressed RX size in bytes
    • reset

      public void reset()
      Description copied from interface: GzipInterceptorMBean
      Resets all statistics counters to zero.
      Specified by:
      reset in interface GzipInterceptorMBean