You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@mina.apache.org by tr...@apache.org on 2007/07/13 05:06:30 UTC
svn commit: r555852 - in
/mina/trunk/core/src/main/java/org/apache/mina/filter/executor:
AbstractExecutorFilter.java ExecutorFilter.java UnorderedExecutorFilter.java
Author: trustin
Date: Thu Jul 12 20:06:29 2007
New Revision: 555852
URL: http://svn.apache.org/viewvc?view=rev&rev=555852
Log:
Resolved issue: DIRMINA-400 (Selective event processing in ExecutorFilter)
* Implemented selective event processing using EnumSet
Modified:
mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java
mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java
mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java?view=diff&rev=555852&r1=555851&r2=555852
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/executor/AbstractExecutorFilter.java Thu Jul 12 20:06:29 2007
@@ -19,6 +19,10 @@
*/
package org.apache.mina.filter.executor;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.EnumSet;
import java.util.concurrent.Executor;
import java.util.concurrent.LinkedBlockingQueue;
import java.util.concurrent.ThreadPoolExecutor;
@@ -40,28 +44,52 @@
*/
public abstract class AbstractExecutorFilter extends IoFilterAdapter
{
+ private final EnumSet<IoEventType> eventTypes;
private final Executor executor;
/**
* Creates a new instance with the default thread pool implementation
- * (<tt>new ThreadPoolExecutor(16, 16, 60, TimeUnit.SECONDS, new LinkedBlockingQueue() )</tt>).
+ * (<tt>new ThreadPoolExecutor(1, 16, 60, TimeUnit.SECONDS, new LinkedBlockingQueue() )</tt>).
*/
- protected AbstractExecutorFilter()
+ protected AbstractExecutorFilter(IoEventType... eventTypes)
{
- this( new ThreadPoolExecutor(16, 16, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>() ) );
+ this( new ThreadPoolExecutor(1, 16, 60, TimeUnit.SECONDS, new LinkedBlockingQueue<Runnable>() ),
+ eventTypes );
}
/**
* Creates a new instance with the specified <tt>executor</tt>.
*/
- protected AbstractExecutorFilter( Executor executor )
+ protected AbstractExecutorFilter( Executor executor, IoEventType... eventTypes )
{
if( executor == null )
{
throw new NullPointerException( "executor" );
}
+ if( eventTypes == null || eventTypes.length == 0 ) {
+ eventTypes = new IoEventType[] {
+ IoEventType.EXCEPTION_CAUGHT,
+ IoEventType.MESSAGE_RECEIVED,
+ IoEventType.MESSAGE_SENT,
+ IoEventType.SESSION_CLOSED,
+ IoEventType.SESSION_IDLE,
+ IoEventType.SESSION_OPENED,
+ };
+ }
+
+ for (IoEventType t: eventTypes) {
+ if (t == IoEventType.SESSION_CREATED) {
+ throw new IllegalArgumentException(
+ IoEventType.SESSION_CREATED + " is not allowed.");
+ }
+ }
this.executor = executor;
+
+ Collection<IoEventType> eventTypeCollection =
+ new ArrayList<IoEventType>(eventTypes.length);
+ Collections.addAll(eventTypeCollection, eventTypes);
+ this.eventTypes = EnumSet.copyOf(eventTypeCollection);
}
/**
@@ -82,47 +110,79 @@
public final void sessionOpened( NextFilter nextFilter,
IoSession session )
{
- fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_OPENED, session, null) );
+ if (eventTypes.contains(IoEventType.SESSION_OPENED)) {
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_OPENED, session, null) );
+ } else {
+ nextFilter.sessionOpened(session);
+ }
}
public final void sessionClosed( NextFilter nextFilter,
IoSession session )
{
- fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_CLOSED, session, null) );
+ if (eventTypes.contains(IoEventType.SESSION_CLOSED)) {
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_CLOSED, session, null) );
+ } else {
+ nextFilter.sessionClosed(session);
+ }
}
public final void sessionIdle( NextFilter nextFilter,
IoSession session, IdleStatus status )
{
- fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_IDLE, session, status) );
+ if (eventTypes.contains(IoEventType.SESSION_IDLE)) {
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.SESSION_IDLE, session, status) );
+ } else {
+ nextFilter.sessionIdle(session, status);
+ }
}
public final void exceptionCaught( NextFilter nextFilter,
IoSession session, Throwable cause )
{
- fireEvent( new IoFilterEvent(nextFilter, IoEventType.EXCEPTION_CAUGHT, session, cause) );
+ if (eventTypes.contains(IoEventType.EXCEPTION_CAUGHT)) {
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.EXCEPTION_CAUGHT, session, cause) );
+ } else {
+ nextFilter.exceptionCaught(session, cause);
+ }
}
public final void messageReceived( NextFilter nextFilter,
IoSession session, Object message )
{
- fireEvent( new IoFilterEvent(nextFilter, IoEventType.MESSAGE_RECEIVED, session, message) );
+ if (eventTypes.contains(IoEventType.MESSAGE_RECEIVED)) {
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.MESSAGE_RECEIVED, session, message) );
+ } else {
+ nextFilter.messageReceived(session, message);
+ }
}
public final void messageSent( NextFilter nextFilter,
IoSession session, WriteRequest writeRequest )
{
- fireEvent( new IoFilterEvent(nextFilter, IoEventType.MESSAGE_SENT, session, writeRequest) );
+ if (eventTypes.contains(IoEventType.MESSAGE_SENT)) {
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.MESSAGE_SENT, session, writeRequest) );
+ } else {
+ nextFilter.messageSent(session, writeRequest);
+ }
}
public final void filterWrite( NextFilter nextFilter, IoSession session, WriteRequest writeRequest )
{
- fireEvent( new IoFilterEvent(nextFilter, IoEventType.WRITE, session, writeRequest) );
+ if (eventTypes.contains(IoEventType.WRITE)) {
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.WRITE, session, writeRequest) );
+ } else {
+ nextFilter.filterWrite(session, writeRequest);
+ }
}
public final void filterClose( NextFilter nextFilter, IoSession session ) throws Exception
{
- fireEvent( new IoFilterEvent(nextFilter, IoEventType.CLOSE, session, null) );
+ if (eventTypes.contains(IoEventType.CLOSE)) {
+ fireEvent( new IoFilterEvent(nextFilter, IoEventType.CLOSE, session, null) );
+ } else {
+ nextFilter.filterClose(session);
+ }
}
protected final void processEvent( IoFilterEvent event )
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java?view=diff&rev=555852&r1=555851&r2=555852
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java Thu Jul 12 20:06:29 2007
@@ -23,6 +23,7 @@
import java.util.Queue;
import java.util.concurrent.Executor;
+import org.apache.mina.common.IoEventType;
import org.apache.mina.common.IoFilterChain;
import org.apache.mina.common.IoFilterEvent;
import org.apache.mina.common.IoSession;
@@ -60,17 +61,17 @@
* Creates a new instance with the default thread pool implementation
* (<tt>new ThreadPoolExecutor(16, 16, 60, TimeUnit.SECONDS, new LinkedBlockingQueue() )</tt>).
*/
- public ExecutorFilter()
+ public ExecutorFilter(IoEventType... eventTypes)
{
- super();
+ super(eventTypes);
}
/**
* Creates a new instance with the specified <tt>executor</tt>.
*/
- public ExecutorFilter( Executor executor )
+ public ExecutorFilter(Executor executor, IoEventType... eventTypes)
{
- super( executor );
+ super( executor, eventTypes );
}
protected void fireEvent(IoFilterEvent event)
Modified: mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java
URL: http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java?view=diff&rev=555852&r1=555851&r2=555852
==============================================================================
--- mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java (original)
+++ mina/trunk/core/src/main/java/org/apache/mina/filter/executor/UnorderedExecutorFilter.java Thu Jul 12 20:06:29 2007
@@ -21,6 +21,7 @@
import java.util.concurrent.Executor;
+import org.apache.mina.common.IoEventType;
import org.apache.mina.common.IoFilterChain;
import org.apache.mina.common.IoFilterEvent;
@@ -56,17 +57,17 @@
* Creates a new instance with the default thread pool implementation
* (<tt>new ThreadPoolExecutor(16, 16, 60, TimeUnit.SECONDS, new LinkedBlockingQueue() )</tt>).
*/
- public UnorderedExecutorFilter()
+ public UnorderedExecutorFilter(IoEventType... eventTypes)
{
- super();
+ super(eventTypes);
}
/**
* Creates a new instance with the specified <tt>executor</tt>.
*/
- public UnorderedExecutorFilter( Executor executor )
+ public UnorderedExecutorFilter( Executor executor, IoEventType... eventTypes )
{
- super(executor);
+ super(executor, eventTypes);
}
protected void fireEvent( IoFilterEvent event )