You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2007/02/02 21:23:44 UTC

svn commit: r502725 - in /jakarta/httpcomponents/httpcore/trunk: ./ module-nio/src/main/java/org/apache/http/nio/concurrent/ module-nio/src/main/java/org/apache/http/nio/impl/reactor/ module-nio/src/test/java/org/apache/http/nio/mockup/

Author: olegk
Date: Fri Feb  2 12:23:43 2007
New Revision: 502725

URL: http://svn.apache.org/viewvc?view=rev&rev=502725
Log:
HTTPCORE-27: I/O reactors can now accept a thread factory as an optional parameter

Added:
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java   (with props)
Modified:
    jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/AbstractMultiworkerIOReactor.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultConnectingIOReactor.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultListeningIOReactor.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpClient.java
    jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpServer.java

Modified: jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt?view=diff&rev=502725&r1=502724&r2=502725
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt (original)
+++ jakarta/httpcomponents/httpcore/trunk/RELEASE_NOTES.txt Fri Feb  2 12:23:43 2007
@@ -1,5 +1,10 @@
 Changes since release 4.0 Alpha 3
 -------------------
+
+* [HTTPCORE-27]: I/O reactors can now accept a thread factory as an optional
+  parameter.
+  Contributed by Oleg Kalnichevski <olegk at apache.org>
+
 * [HTTPCORE-36]: Fixed #setHandlers() method and matching of request URIs 
   with a query part in HttpRequestHandlerRegistry
   Contributed by Oleg Kalnichevski <olegk at apache.org>

Added: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java?view=auto&rev=502725
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java (added)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java Fri Feb  2 12:23:43 2007
@@ -0,0 +1,44 @@
+/*
+ * $HeadURL$
+ * $Revision$
+ * $Date$
+ *
+ * ====================================================================
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation.  For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+
+package org.apache.http.nio.concurrent;
+
+/**
+ * Abstract thread factory. This interface is needed in order to
+ * avoid direct dependency on java.util.concurrent
+ * 
+ * @author <a href="mailto:oleg at ural.ru">Oleg Kalnichevski</a>
+ */
+public interface ThreadFactory {
+
+    Thread newThread(Runnable r);
+    
+}

Propchange: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java
------------------------------------------------------------------------------
    svn:keywords = Date Author Id Revision HeadURL

Propchange: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/AbstractMultiworkerIOReactor.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/AbstractMultiworkerIOReactor.java?view=diff&rev=502725&r1=502724&r2=502725
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/AbstractMultiworkerIOReactor.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/AbstractMultiworkerIOReactor.java Fri Feb  2 12:23:43 2007
@@ -33,6 +33,7 @@
 
 import java.io.InterruptedIOException;
 
+import org.apache.http.nio.concurrent.ThreadFactory;
 import org.apache.http.nio.reactor.IOEventDispatch;
 import org.apache.http.nio.reactor.IOReactor;
 import org.apache.http.nio.reactor.IOReactorException;
@@ -40,29 +41,40 @@
 public abstract class AbstractMultiworkerIOReactor implements IOReactor {
 
     private final int workerCount;
+    private final ThreadFactory threadFactory;
     private final BaseIOReactor[] ioReactors;
-    private final WorkerThread[] threads;
+    private final Worker[] workers;
+    private final Thread[] threads;
     
     private int currentWorker = 0;
     
-    public AbstractMultiworkerIOReactor(long selectTimeout, int workerCount) 
-            throws IOReactorException {
+    public AbstractMultiworkerIOReactor(
+            long selectTimeout, 
+            int workerCount, 
+            final ThreadFactory threadFactory) throws IOReactorException {
         super();
         if (workerCount <= 0) {
             throw new IllegalArgumentException("Worker count may not be negative or zero");
         }
         this.workerCount = workerCount;
+        if (threadFactory != null) {
+            this.threadFactory = threadFactory;
+        } else {
+            this.threadFactory = new DefaultThreadFactory();
+        }
         this.ioReactors = new BaseIOReactor[workerCount];
-        this.threads = new WorkerThread[workerCount];
         for (int i = 0; i < this.ioReactors.length; i++) {
             this.ioReactors[i] = new BaseIOReactor(selectTimeout);
         }
+        this.workers = new Worker[workerCount];
+        this.threads = new Thread[workerCount];
     }
 
     protected void startWorkers(final IOEventDispatch eventDispatch) {
         for (int i = 0; i < this.workerCount; i++) {
             BaseIOReactor ioReactor = this.ioReactors[i];
-            this.threads[i] = new WorkerThread(ioReactor, eventDispatch);
+            this.workers[i] = new Worker(ioReactor, eventDispatch);
+            this.threads[i] = this.threadFactory.newThread(this.workers[i]);
         }
         for (int i = 0; i < this.workerCount; i++) {
             this.threads[i].start();
@@ -86,8 +98,9 @@
     protected void verifyWorkers() 
             throws InterruptedIOException, IOReactorException {
         for (int i = 0; i < this.workerCount; i++) {
-            WorkerThread worker = this.threads[i];
-            if (!worker.isAlive()) {
+            Worker worker = this.workers[i];
+            Thread thread = this.threads[i];
+            if (!thread.isAlive()) {
                 if (worker.getReactorException() != null) {
                     throw worker.getReactorException();
                 }
@@ -103,7 +116,7 @@
         this.ioReactors[this.currentWorker++ % this.workerCount].addChannel(entry);
     }
         
-    static class WorkerThread extends Thread {
+    static class Worker implements Runnable {
 
         final BaseIOReactor ioReactor;
         final IOEventDispatch eventDispatch;
@@ -111,7 +124,7 @@
         private volatile IOReactorException reactorException;
         private volatile InterruptedIOException interruptedException;
         
-        public WorkerThread(final BaseIOReactor ioReactor, final IOEventDispatch eventDispatch) {
+        public Worker(final BaseIOReactor ioReactor, final IOEventDispatch eventDispatch) {
             super();
             this.ioReactor = ioReactor;
             this.eventDispatch = eventDispatch;
@@ -145,4 +158,12 @@
         
     }
 
+    static class DefaultThreadFactory implements ThreadFactory {
+
+        public Thread newThread(final Runnable r) {
+            return new Thread(r, "I/O reactor worker thread");
+        }
+        
+    }
+    
 }

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultConnectingIOReactor.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultConnectingIOReactor.java?view=diff&rev=502725&r1=502724&r2=502725
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultConnectingIOReactor.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultConnectingIOReactor.java Fri Feb  2 12:23:43 2007
@@ -42,6 +42,7 @@
 import java.util.Iterator;
 import java.util.Set;
 
+import org.apache.http.nio.concurrent.ThreadFactory;
 import org.apache.http.nio.reactor.ConnectingIOReactor;
 import org.apache.http.nio.reactor.IOEventDispatch;
 import org.apache.http.nio.reactor.IOReactorException;
@@ -62,9 +63,11 @@
     
     private long lastTimeoutCheck;
     
-    public DefaultConnectingIOReactor(int workerCount, final HttpParams params) 
-            throws IOReactorException {
-        super(TIMEOUT_CHECK_INTERVAL, workerCount);
+    public DefaultConnectingIOReactor(
+            int workerCount, 
+            final ThreadFactory threadFactory,
+            final HttpParams params) throws IOReactorException {
+        super(TIMEOUT_CHECK_INTERVAL, workerCount, threadFactory);
         if (params == null) {
             throw new IllegalArgumentException("HTTP parameters may not be null");
         }
@@ -78,6 +81,12 @@
         }
     }
 
+    public DefaultConnectingIOReactor(
+            int workerCount, 
+            final HttpParams params) throws IOReactorException {
+        this(workerCount, null, params);
+    }
+    
     public void execute(final IOEventDispatch eventDispatch) 
             throws InterruptedIOException, IOReactorException {
         if (eventDispatch == null) {

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultListeningIOReactor.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultListeningIOReactor.java?view=diff&rev=502725&r1=502724&r2=502725
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultListeningIOReactor.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/impl/reactor/DefaultListeningIOReactor.java Fri Feb  2 12:23:43 2007
@@ -43,6 +43,7 @@
 import java.util.Iterator;
 import java.util.Set;
 
+import org.apache.http.nio.concurrent.ThreadFactory;
 import org.apache.http.nio.reactor.IOEventDispatch;
 import org.apache.http.nio.reactor.IOReactorException;
 import org.apache.http.nio.reactor.IOReactorExceptionHandler;
@@ -62,9 +63,11 @@
     
     private IOReactorExceptionHandler exceptionHandler;
     
-    public DefaultListeningIOReactor(int workerCount, final HttpParams params) 
-            throws IOReactorException {
-        super(TIMEOUT_CHECK_INTERVAL, workerCount);
+    public DefaultListeningIOReactor(
+            int workerCount, 
+            final ThreadFactory threadFactory,
+            final HttpParams params) throws IOReactorException {
+        super(TIMEOUT_CHECK_INTERVAL, workerCount, threadFactory);
         if (params == null) {
             throw new IllegalArgumentException("HTTP parameters may not be null");
         }
@@ -76,6 +79,12 @@
         }
     }
 
+    public DefaultListeningIOReactor(
+            int workerCount, 
+            final HttpParams params) throws IOReactorException {
+        this(workerCount, null, params);
+    }
+    
     public void setExceptionHandler(final IOReactorExceptionHandler exceptionHandler) {
         this.exceptionHandler = exceptionHandler;
     }

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpClient.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpClient.java?view=diff&rev=502725&r1=502724&r2=502725
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpClient.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpClient.java Fri Feb  2 12:23:43 2007
@@ -64,7 +64,7 @@
             .setBooleanParameter(HttpConnectionParams.TCP_NODELAY, true)
             .setParameter(HttpProtocolParams.USER_AGENT, "TEST-CLIENT/1.1");
 
-        this.ioReactor = new DefaultConnectingIOReactor(1, this.params);
+        this.ioReactor = new DefaultConnectingIOReactor(2, this.params);
     }
     
     public void setHttpRequestExecutionHandler(final HttpRequestExecutionHandler handler) {

Modified: jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpServer.java
URL: http://svn.apache.org/viewvc/jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpServer.java?view=diff&rev=502725&r1=502724&r2=502725
==============================================================================
--- jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpServer.java (original)
+++ jakarta/httpcomponents/httpcore/trunk/module-nio/src/test/java/org/apache/http/nio/mockup/TestHttpServer.java Fri Feb  2 12:23:43 2007
@@ -73,7 +73,7 @@
             .setParameter(HttpProtocolParams.ORIGIN_SERVER, "TEST-SERVER/1.1");
         
         this.reqistry = new HttpRequestHandlerRegistry();
-        this.ioReactor = new DefaultListeningIOReactor(1, this.params);
+        this.ioReactor = new DefaultListeningIOReactor(2, this.params);
         this.mutex = new Object();
     }
     



Re: svn commit: r502725 - in /jakarta/httpcomponents/httpcore/trunk: ./ module-nio/src/main/java/org/apache/http/nio/concurrent/ module-nio/src/main/java/org/apache/http/nio/impl/reactor/ module-nio/src/test/java/org/apache/http/nio/mockup/

Posted by Roland Weber <ht...@dubioso.net>.
Oleg Kalnichevski wrote:
> On Sat, 2007-02-03 at 07:12 +0100, Roland Weber wrote:
>> Hi Oleg,
>>
>>> HTTPCORE-27: I/O reactors can now accept a thread factory as an optional parameter
>>>
>>> Added:
>>>     jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java   (with props)
>> Could we have that interface in HttpCore-main? It would
>> be useful for HttpAsync (worker threads) and HttpConn
>> (GC thread for TSCCM, if we keep GC tracking). At least
>> HttpConn shouldn't have a dependency on HttpCore-NIO.
>>
>> ? org.apache.http.util
>> ? org.apache.http.util.concurrent
>>
> 
> Go for it

org.apache.http.util.concurrent it is.

cheers,
  Roland


---------------------------------------------------------------------
To unsubscribe, e-mail: httpcomponents-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpcomponents-dev-help@jakarta.apache.org


Re: svn commit: r502725 - in /jakarta/httpcomponents/httpcore/trunk: ./ module-nio/src/main/java/org/apache/http/nio/concurrent/ module-nio/src/main/java/org/apache/http/nio/impl/reactor/ module-nio/src/test/java/org/apache/http/nio/mockup/

Posted by Oleg Kalnichevski <ol...@apache.org>.
On Sat, 2007-02-03 at 07:12 +0100, Roland Weber wrote:
> Hi Oleg,
> 
> > HTTPCORE-27: I/O reactors can now accept a thread factory as an optional parameter
> > 
> > Added:
> >     jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java   (with props)
> 
> Could we have that interface in HttpCore-main? It would
> be useful for HttpAsync (worker threads) and HttpConn
> (GC thread for TSCCM, if we keep GC tracking). At least
> HttpConn shouldn't have a dependency on HttpCore-NIO.
> 
> ? org.apache.http.util
> ? org.apache.http.util.concurrent
> 

Go for it

Oleg


> cheers,
>   Roland
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpcomponents-dev-unsubscribe@jakarta.apache.org
> For additional commands, e-mail: httpcomponents-dev-help@jakarta.apache.org
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: httpcomponents-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpcomponents-dev-help@jakarta.apache.org


Re: svn commit: r502725 - in /jakarta/httpcomponents/httpcore/trunk: ./ module-nio/src/main/java/org/apache/http/nio/concurrent/ module-nio/src/main/java/org/apache/http/nio/impl/reactor/ module-nio/src/test/java/org/apache/http/nio/mockup/

Posted by Roland Weber <ht...@dubioso.net>.
Hi Oleg,

> HTTPCORE-27: I/O reactors can now accept a thread factory as an optional parameter
> 
> Added:
>     jakarta/httpcomponents/httpcore/trunk/module-nio/src/main/java/org/apache/http/nio/concurrent/ThreadFactory.java   (with props)

Could we have that interface in HttpCore-main? It would
be useful for HttpAsync (worker threads) and HttpConn
(GC thread for TSCCM, if we keep GC tracking). At least
HttpConn shouldn't have a dependency on HttpCore-NIO.

? org.apache.http.util
? org.apache.http.util.concurrent

cheers,
  Roland


---------------------------------------------------------------------
To unsubscribe, e-mail: httpcomponents-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail: httpcomponents-dev-help@jakarta.apache.org