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