Author: trustin
Date: Thu Nov  8 18:15:30 2007
New Revision: 593394

URL: http://svn.apache.org/viewvc?rev=593394&view=rev
Log:
Added some convenience methods to ExecutorFilter
Fixed ExecutorFilterRegressionTest compilation errors

Modified:
    
mina/trunk/core/src/main/java/org/apache/mina/filter/executor/ExecutorFilter.java
    
mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java
    
mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java

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?rev=593394&r1=593393&r2=593394&view=diff
==============================================================================
--- 
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 Nov  8 18:15:30 2007
@@ -24,8 +24,7 @@
 import java.util.Collections;
 import java.util.EnumSet;
 import java.util.concurrent.Executor;
-import java.util.concurrent.SynchronousQueue;
-import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.mina.common.IdleStatus;
@@ -68,22 +67,51 @@
     
     private final EnumSet<IoEventType> eventTypes;
     private final Executor executor;
+    private final boolean createdExecutor;
 
-    /**
-     * Creates a new instance with the default thread pool implementation
-     * (<tt>new ThreadPoolExecutor(0, 16, 60, TimeUnit.SECONDS, new 
SynchronousQueue())</tt>).
-     */
-    protected ExecutorFilter(IoEventType... eventTypes) {
-        this(new ThreadPoolExecutor(
-                0, 16, 60, TimeUnit.SECONDS,
-                new SynchronousQueue<Runnable>()), eventTypes);
+    public ExecutorFilter() {
+        this(16, (IoEventType[]) null);
+    }
+    
+    public ExecutorFilter(int maximumPoolSize) {
+        this(0, maximumPoolSize, (IoEventType[]) null);
+    }
+    
+    public ExecutorFilter(int corePoolSize, int maximumPoolSize) {
+        this(corePoolSize, maximumPoolSize, 30, TimeUnit.SECONDS, 
(IoEventType[]) null);
+    }
+    
+    public ExecutorFilter(
+            int corePoolSize, int maximumPoolSize, long keepAliveTime, 
TimeUnit unit) {
+        this(corePoolSize, maximumPoolSize, keepAliveTime, unit, 
(IoEventType[]) null);
     }
 
-    /**
-     * Creates a new instance with the specified <tt>executor</tt>.
-     */
-    protected ExecutorFilter(Executor executor,
-            IoEventType... eventTypes) {
+    public ExecutorFilter(IoEventType... eventTypes) {
+        this(16, eventTypes);
+    }
+    
+    public ExecutorFilter(int maximumPoolSize, IoEventType... eventTypes) {
+        this(0, maximumPoolSize, eventTypes);
+    }
+    
+    public ExecutorFilter(int corePoolSize, int maximumPoolSize, 
IoEventType... eventTypes) {
+        this(corePoolSize, maximumPoolSize, 30, TimeUnit.SECONDS, eventTypes);
+    }
+    
+    public ExecutorFilter(
+            int corePoolSize, int maximumPoolSize, long keepAliveTime, 
TimeUnit unit, IoEventType... eventTypes) {
+        this(new OrderedThreadPoolExecutor(corePoolSize, maximumPoolSize, 
keepAliveTime, unit), true, eventTypes);
+    }
+    
+    public ExecutorFilter(Executor executor) {
+        this(executor, false, (IoEventType[]) null);
+    }
+
+    public ExecutorFilter(Executor executor, IoEventType... eventTypes) {
+        this(executor, false, eventTypes);
+    }
+
+    private ExecutorFilter(Executor executor, boolean createdExecutor, 
IoEventType... eventTypes) {
         if (executor == null) {
             throw new NullPointerException("executor");
         }
@@ -102,11 +130,19 @@
         }
 
         this.executor = executor;
+        this.createdExecutor = createdExecutor;
 
         Collection<IoEventType> eventTypeCollection = new 
ArrayList<IoEventType>(
                 eventTypes.length);
         Collections.addAll(eventTypeCollection, eventTypes);
         this.eventTypes = EnumSet.copyOf(eventTypeCollection);
+    }
+    
+    @Override
+    public void destroy() {
+        if (createdExecutor) {
+            ((ExecutorService) executor).shutdown();
+        }
     }
 
     /**

Modified: 
mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java?rev=593394&r1=593393&r2=593394&view=diff
==============================================================================
--- 
mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java
 (original)
+++ 
mina/trunk/core/src/main/java/org/apache/mina/filter/traffic/ReadThrottleFilter.java
 Thu Nov  8 18:15:30 2007
@@ -31,7 +31,7 @@
 import org.apache.mina.common.IoSession;
 import org.apache.mina.common.IoSessionLogger;
 import org.apache.mina.common.TrafficMask;
-import org.apache.mina.filter.executor.AbstractExecutorFilter;
+import org.apache.mina.filter.executor.ExecutorFilter;
 import org.apache.mina.filter.executor.ExecutorFilter;
 import org.apache.mina.util.CopyOnWriteMap;
 import org.slf4j.Logger;
@@ -264,7 +264,7 @@
     @Override
     public void onPreAdd(
             IoFilterChain parent, String name, NextFilter nextFilter) throws 
Exception {
-        if (!parent.contains(AbstractExecutorFilter.class)) {
+        if (!parent.contains(ExecutorFilter.class)) {
             throw new IllegalStateException(
                     "At least one " + ExecutorFilter.class.getName() + " must 
exist in the chain.");
         }
@@ -283,7 +283,7 @@
         for (IoFilterChain.Entry e: parent.getAll()) {
             IoFilter currentFilter = e.getFilter();
             if (currentFilter == this) {
-                if (lastFilter instanceof AbstractExecutorFilter) {
+                if (lastFilter instanceof ExecutorFilter) {
                     // Good!
                     break;
                 } else {

Modified: 
mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java
URL: 
http://svn.apache.org/viewvc/mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java?rev=593394&r1=593393&r2=593394&view=diff
==============================================================================
--- 
mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java
 (original)
+++ 
mina/trunk/core/src/test/java/org/apache/mina/filter/executor/ExecutorFilterRegressionTest.java
 Thu Nov  8 18:15:30 2007
@@ -19,7 +19,7 @@
  */
 package org.apache.mina.filter.executor;
 
-import java.util.concurrent.ThreadPoolExecutor;
+import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import junit.framework.Assert;
@@ -40,12 +40,12 @@
 
     @Override
     public void setUp() throws Exception {
-        filter = new ExecutorFilter();
+        filter = new ExecutorFilter(8);
     }
 
     @Override
     public void tearDown() throws Exception {
-        ((ThreadPoolExecutor) filter.getExecutor()).shutdown();
+        ((ExecutorService) filter.getExecutor()).shutdown();
         filter = null;
     }
 
@@ -57,11 +57,11 @@
                 new EventOrderCounter(), new EventOrderCounter(),
                 new EventOrderCounter(), new EventOrderCounter(),
                 new EventOrderCounter(), new EventOrderCounter(), };
-        final int loop = 1000000;
+        final int loop = 10000000;
         final int end = sessions.length - 1;
         final ExecutorFilter filter = this.filter;
-        ThreadPoolExecutor executor = (ThreadPoolExecutor) 
filter.getExecutor();
-        executor.setKeepAliveTime(3, TimeUnit.SECONDS);
+        ExecutorService executor = (ExecutorService) filter.getExecutor();
+        //executor.setKeepAliveTime(3, TimeUnit.SECONDS);
 
         for (int i = 0; i < loop; i++) {
             Integer objI = new Integer(i);


Reply via email to