org.apache.mina.filter.executor

## Class WriteRequestFilter

- java.lang.Object
- - org.apache.mina.core.filterchain.IoFilterAdapter
  - - org.apache.mina.filter.executor.WriteRequestFilter

- All Implemented Interfaces:
    IoFilter

      public class WriteRequestFilter
      extends IoFilterAdapter

  Attaches an `IoEventQueueHandler` to an `IoSession`'s `WriteRequest` queue to provide accurate write queue status tracking.

  The biggest difference from `OrderedThreadPoolExecutor` and `UnorderedThreadPoolExecutor` is that `IoEventQueueHandler.polled(Object, IoEvent)` is invoked when the write operation is completed by an `IoProcessor`, consequently providing the accurate tracking of the write request queue status to the `IoEventQueueHandler`.

  Most common usage of this filter could be detecting an `IoSession` which writes too fast which will cause `OutOfMemoryError` soon:

           session.getFilterChain().addLast(
                   "writeThrottle",
                   new WriteRequestFilter(new IoEventQueueThrottle()));

  ### Known issues

  You can run into a dead lock if you run this filter with the blocking `IoEventQueueHandler` implementation such as `IoEventQueueThrottle` in the `IoProcessor` thread. It's because an `IoProcessor` thread is what processes the `WriteRequest`s and notifies related `WriteFuture`s; the `IoEventQueueHandler` implementation that waits for the size of the write request queue to decrease will never wake up. To use such an handler, you have to insert an `ExecutorFilter` before this filter or call `IoSession.write(Object)` method always from a different thread.
  Author:
    Apache MINA Project

- - ### Nested Class Summary

    - ### Nested classes/interfaces inherited from interface org.apache.mina.core.filterchain.IoFilter

      `IoFilter.NextFilter`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `WriteRequestFilter()` Creates a new instance with a new default `IoEventQueueThrottle`.
    `WriteRequestFilter(IoEventQueueHandler queueHandler)` Creates a new instance with the specified `IoEventQueueHandler`.

  - ### Method Summary

    Methods
    Modifier and Type | Method and Description
    --- | ---
    `void` | `filterWrite(IoFilter.NextFilter nextFilter, IoSession session, WriteRequest writeRequest)` Filters `IoSession.write(Object)` method invocation.
    `IoEventQueueHandler` | `getQueueHandler()` Returns the `IoEventQueueHandler` which is attached to this filter.

    - ### Methods inherited from class org.apache.mina.core.filterchain.IoFilterAdapter

      `destroy, exceptionCaught, filterClose, init, messageReceived, messageSent, onPostAdd, onPostRemove, onPreAdd, onPreRemove, sessionClosed, sessionCreated, sessionIdle, sessionOpened, toString`

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

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

- - ### Constructor Detail

    - #### WriteRequestFilter

          public WriteRequestFilter()

      Creates a new instance with a new default `IoEventQueueThrottle`.

    - #### WriteRequestFilter

          public WriteRequestFilter(IoEventQueueHandler queueHandler)

      Creates a new instance with the specified `IoEventQueueHandler`.

  - ### Method Detail

    - #### getQueueHandler

          public IoEventQueueHandler getQueueHandler()

      Returns the `IoEventQueueHandler` which is attached to this filter.

    - #### filterWrite

          public void filterWrite(IoFilter.NextFilter nextFilter,
                         IoSession session,
                         WriteRequest writeRequest)
                           throws Exception

      Description copied from class: `IoFilterAdapter`
      Filters `IoSession.write(Object)` method invocation.
      Specified by:
        `filterWrite` in interface `IoFilter`
      Overrides:
        `filterWrite` in class `IoFilterAdapter`
      Throws:
        `Exception`

Copyright © 2004-2012 Apache MINA Project. All Rights Reserved.