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 2010/12/12 18:54:59 UTC

svn commit: r1044865 - in /httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http: impl/nio/client/ impl/nio/conn/ nio/conn/

Author: olegk
Date: Sun Dec 12 17:54:58 2010
New Revision: 1044865

URL: http://svn.apache.org/viewvc?rev=1044865&view=rev
Log:
I/O session manager and managed I/O session API redesign

Modified:
    httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncClient.java
    httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java
    httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java
    httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicManagedIOSession.java
    httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java
    httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/ManagedIOSession.java

Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncClient.java?rev=1044865&r1=1044864&r2=1044865&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncClient.java (original)
+++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/BasicHttpAsyncClient.java Sun Dec 12 17:54:58 2010
@@ -36,7 +36,6 @@ import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
 import org.apache.http.HttpRequestInterceptor;
 import org.apache.http.HttpResponse;
-import org.apache.http.conn.routing.HttpRoute;
 import org.apache.http.impl.DefaultConnectionReuseStrategy;
 import org.apache.http.impl.nio.conn.BasicIOSessionManager;
 import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
@@ -68,13 +67,13 @@ public class BasicHttpAsyncClient implem
     private final Log log;
     private final HttpParams params;
     private final ConnectingIOReactor ioReactor;
-    private final IOSessionManager<HttpRoute> sessmrg;
+    private final IOSessionManager sessmrg;
 
     private Thread reactorThread;
 
     public BasicHttpAsyncClient(
             final ConnectingIOReactor ioReactor,
-            final IOSessionManager<HttpRoute> sessmrg,
+            final IOSessionManager sessmrg,
             final HttpParams params) throws IOReactorException {
         super();
         this.log = LogFactory.getLog(getClass());
@@ -126,10 +125,6 @@ public class BasicHttpAsyncClient implem
         return new DefaultConnectionReuseStrategy();
     }
 
-    public IOSessionManager<HttpRoute> getSessionManager() {
-        return this.sessmrg;
-    }
-
     private void doExecute() {
         NHttpClientProtocolHandler handler = new NHttpClientProtocolHandler(
                 createConnectionReuseStrategy());

Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java?rev=1044865&r1=1044864&r2=1044865&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java (original)
+++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/client/DefaultAsyncRequestDirector.java Sun Dec 12 17:54:58 2010
@@ -56,7 +56,6 @@ import org.apache.http.nio.concurrent.Ba
 import org.apache.http.nio.concurrent.FutureCallback;
 import org.apache.http.nio.conn.IOSessionManager;
 import org.apache.http.nio.conn.ManagedIOSession;
-import org.apache.http.nio.reactor.IOSession;
 import org.apache.http.params.HttpConnectionParams;
 import org.apache.http.params.HttpParams;
 import org.apache.http.protocol.ExecutionContext;
@@ -70,7 +69,7 @@ class DefaultAsyncRequestDirector<T> imp
     private final HttpAsyncRequestProducer requestProducer;
     private final HttpAsyncResponseConsumer<T> responseConsumer;
     private final BasicFuture<T> resultFuture;
-    private final IOSessionManager<HttpRoute> sessmrg;
+    private final IOSessionManager sessmrg;
     private final HttpProcessor httppocessor;
     private final HttpContext localContext;
     private final HttpParams clientParams;
@@ -85,7 +84,7 @@ class DefaultAsyncRequestDirector<T> imp
             final HttpAsyncRequestProducer requestProducer,
             final HttpAsyncResponseConsumer<T> responseConsumer,
             final FutureCallback<T> callback,
-            final IOSessionManager<HttpRoute> sessmrg,
+            final IOSessionManager sessmrg,
             final HttpProcessor httppocessor,
             final HttpContext localContext,
             final HttpParams clientParams) {
@@ -238,9 +237,8 @@ class DefaultAsyncRequestDirector<T> imp
 
     private synchronized void sessionRequestCompleted(final ManagedIOSession session) {
         this.managedSession = session;
-        IOSession iosession = session.getSession();
-        iosession.setAttribute(HTTP_EXCHANGE_HANDLER, this);
-        iosession.setEvent(SelectionKey.OP_WRITE);
+        this.managedSession.setAttribute(HTTP_EXCHANGE_HANDLER, this);
+        this.managedSession.setEvent(SelectionKey.OP_WRITE);
     }
 
     private synchronized void sessionRequestFailed(final Exception ex) {

Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java?rev=1044865&r1=1044864&r2=1044865&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java (original)
+++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicIOSessionManager.java Sun Dec 12 17:54:58 2010
@@ -42,7 +42,7 @@ import org.apache.http.nio.conn.PoolStat
 import org.apache.http.nio.reactor.ConnectingIOReactor;
 import org.apache.http.nio.reactor.IOSession;
 
-public class BasicIOSessionManager implements IOSessionManager<HttpRoute> {
+public class BasicIOSessionManager implements IOSessionManager {
 
     private final Log log;
     private final HttpSessionPool pool;
@@ -88,7 +88,7 @@ public class BasicIOSessionManager imple
                  "I/O session not obtained from this manager");
         }
         BasicManagedIOSession adaptor = (BasicManagedIOSession) conn;
-        IOSessionManager<HttpRoute> manager = adaptor.getManager();
+        IOSessionManager manager = adaptor.getManager();
         if (manager != null && manager != this) {
             throw new IllegalArgumentException
                 ("I/O session not obtained from this manager");

Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicManagedIOSession.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicManagedIOSession.java?rev=1044865&r1=1044864&r2=1044865&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicManagedIOSession.java (original)
+++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/impl/nio/conn/BasicManagedIOSession.java Sun Dec 12 17:54:58 2010
@@ -26,21 +26,25 @@
  */
 package org.apache.http.impl.nio.conn;
 
+import java.net.SocketAddress;
+import java.nio.channels.ByteChannel;
+
 import org.apache.http.conn.routing.HttpRoute;
 import org.apache.http.impl.nio.pool.PoolEntry;
 import org.apache.http.nio.conn.IOSessionManager;
 import org.apache.http.nio.conn.ManagedIOSession;
 import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.reactor.SessionBufferStatus;
 
 public class BasicManagedIOSession implements ManagedIOSession {
 
-    private final IOSessionManager<HttpRoute> manager;
+    private final IOSessionManager manager;
     private volatile PoolEntry<HttpRoute> entry;
     private volatile boolean released;
     private volatile boolean reusable;
 
     public BasicManagedIOSession(
-            final IOSessionManager<HttpRoute> manager,
+            final IOSessionManager manager,
             final PoolEntry<HttpRoute> entry) {
         super();
         this.manager = manager;
@@ -49,7 +53,7 @@ public class BasicManagedIOSession imple
         this.reusable = true;
     }
 
-    protected IOSessionManager<HttpRoute> getManager() {
+    protected IOSessionManager getManager() {
         return this.manager;
     }
 
@@ -57,14 +61,7 @@ public class BasicManagedIOSession imple
         return this.entry;
     }
 
-    public IOSession getSession() {
-        if (this.released) {
-            return null;
-        }
-        return this.entry.getIOSession();
-    }
-
-    public void releaseSession() {
+    public synchronized void releaseSession() {
         if (this.released) {
             return;
         }
@@ -73,7 +70,7 @@ public class BasicManagedIOSession imple
         this.entry = null;
     }
 
-    public void abortSession() {
+    public synchronized void abortSession() {
         if (this.released) {
             return;
         }
@@ -85,14 +82,14 @@ public class BasicManagedIOSession imple
         this.entry = null;
     }
 
-    public Object getState() {
+    public synchronized Object getState() {
         if (this.released) {
             return null;
         }
         return this.entry.getState();
     }
 
-    public void setState(final Object state) {
+    public synchronized void setState(final Object state) {
         if (this.released) {
             return;
         }
@@ -103,20 +100,107 @@ public class BasicManagedIOSession imple
         return this.reusable;
     }
 
-    public void markNonReusable() {
+    public synchronized void markNonReusable() {
         if (this.released) {
             return;
         }
         this.reusable = false;
     }
 
-    public void markReusable() {
+    public synchronized void markReusable() {
         if (this.released) {
             return;
         }
         this.reusable = true;
     }
 
+    public void shutdown() {
+        abortSession();
+    }
+
+    public void close() {
+        releaseSession();
+    }
+
+    public int getStatus() {
+        return this.released ? IOSession.ACTIVE : IOSession.CLOSED;
+    }
+
+    public boolean isClosed() {
+        return this.released;
+    }
+
+    private void assertValid() {
+        if (this.released) {
+            throw new IllegalStateException("I/O session has been released");
+        }
+    }
+
+    private IOSession getIOSession() {
+        assertValid();
+        return this.entry.getIOSession();
+    }
+
+    public synchronized ByteChannel channel() {
+        return getIOSession().channel();
+    }
+
+    public synchronized boolean hasBufferedInput() {
+        return getIOSession().hasBufferedInput();
+    }
+
+    public synchronized boolean hasBufferedOutput() {
+        return getIOSession().hasBufferedOutput();
+    }
+
+    public synchronized int getEventMask() {
+        return getIOSession().getEventMask();
+    }
+
+    public synchronized void setEvent(int op) {
+        getIOSession().setEvent(op);
+    }
+
+    public synchronized void clearEvent(int op) {
+        getIOSession().clearEvent(op);
+    }
+
+    public synchronized void setEventMask(int ops) {
+        getIOSession().setEventMask(ops);
+    }
+
+    public synchronized SocketAddress getLocalAddress() {
+        return getIOSession().getLocalAddress();
+    }
+
+    public synchronized SocketAddress getRemoteAddress() {
+        return getIOSession().getRemoteAddress();
+    }
+
+    public synchronized Object getAttribute(final String name) {
+        return getIOSession().getAttribute(name);
+    }
+
+    public synchronized Object removeAttribute(final String name) {
+        return getIOSession().removeAttribute(name);
+    }
+
+    public synchronized void setAttribute(final String name, final Object value) {
+        getIOSession().setAttribute(name, value);
+    }
+
+    public void setBufferStatus(final SessionBufferStatus bufstatus) {
+        throw new UnsupportedOperationException();
+    }
+
+    public synchronized int getSocketTimeout() {
+        return getIOSession().getSocketTimeout();
+    }
+
+    public void setSocketTimeout(final int timeout) {
+        getIOSession().setSocketTimeout(timeout);
+    }
+
     @Override
     public String toString() {
         HttpRoute route = this.entry.getRoute();

Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java?rev=1044865&r1=1044864&r2=1044865&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java (original)
+++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/IOSessionManager.java Sun Dec 12 17:54:58 2010
@@ -29,12 +29,13 @@ package org.apache.http.nio.conn;
 import java.util.concurrent.Future;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.http.conn.routing.HttpRoute;
 import org.apache.http.nio.concurrent.FutureCallback;
 
-public interface IOSessionManager<T> {
+public interface IOSessionManager {
 
     Future<ManagedIOSession> leaseSession(
-            T route, Object state,
+            HttpRoute route, Object state,
             long connectTimeout, TimeUnit timeUnit,
             FutureCallback<ManagedIOSession> callback);
 

Modified: httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/ManagedIOSession.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/ManagedIOSession.java?rev=1044865&r1=1044864&r2=1044865&view=diff
==============================================================================
--- httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/ManagedIOSession.java (original)
+++ httpcomponents/httpasyncclient/trunk/src/main/java/org/apache/http/nio/conn/ManagedIOSession.java Sun Dec 12 17:54:58 2010
@@ -28,9 +28,7 @@ package org.apache.http.nio.conn;
 
 import org.apache.http.nio.reactor.IOSession;
 
-public interface ManagedIOSession  {
-
-    IOSession getSession();
+public interface ManagedIOSession extends IOSession {
 
     Object getState();