org.apache.mina.filter.executor
Class WriteRequestFilter

java.lang.Object
  extended by org.apache.mina.core.filterchain.IoFilterAdapter
      extended by 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 WriteRequests and notifies related WriteFutures; 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
WriteRequestFilter()
          Creates a new instance with a new default IoEventQueueThrottle.
WriteRequestFilter(IoEventQueueHandler queueHandler)
          Creates a new instance with the specified IoEventQueueHandler.
 
Method Summary
 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 java.lang.Exception
Description copied from class: IoFilterAdapter
Filters IoSession.write(Object) method invocation.

Specified by:
filterWrite in interface IoFilter
Overrides:
filterWrite in class IoFilterAdapter
Throws:
java.lang.Exception


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