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);