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 2011/09/01 14:18:50 UTC
svn commit: r1164033 - in /httpcomponents/httpcore/trunk/httpcore-nio/src:
examples/org/apache/http/examples/nio/ main/java/org/apache/http/impl/nio/
main/java/org/apache/http/impl/nio/pool/
main/java/org/apache/http/impl/nio/ssl/ main/java/org/apache/...
Author: olegk
Date: Thu Sep 1 12:18:49 2011
New Revision: 1164033
URL: http://svn.apache.org/viewvc?rev=1164033&view=rev
Log:
BasicNIOConnPool to return fully initialized HTTP connection objects instead of raw IO sessions; refactored default and SSL IO event dispatchers
Modified:
httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java
httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultClientIOEventDispatch.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultServerIOEventDispatch.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLClientIOEventDispatch.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLServerIOEventDispatch.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/AbstractNIOConnPool.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/RouteSpecificPool.java
httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOSession.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java
httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestRouteSpecificPool.java
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpClient.java Thu Sep 1 12:18:49 2011
@@ -28,7 +28,6 @@ package org.apache.http.examples.nio;
import java.io.IOException;
import java.io.InterruptedIOException;
-import java.nio.channels.SelectionKey;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -43,11 +42,11 @@ import org.apache.http.impl.nio.pool.Bas
import org.apache.http.impl.nio.pool.BasicNIOPoolEntry;
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
import org.apache.http.message.BasicHttpRequest;
+import org.apache.http.nio.NHttpClientConnection;
import org.apache.http.nio.protocol.BufferingHttpClientHandler;
import org.apache.http.nio.protocol.HttpRequestExecutionHandler;
import org.apache.http.nio.reactor.ConnectingIOReactor;
import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOSession;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
@@ -167,9 +166,9 @@ public class NHttpClient {
public void completed(final BasicNIOPoolEntry entry) {
this.poolEntry = entry;
- IOSession session = entry.getConnection();
- session.setAttribute("executor", this);
- session.setEvent(SelectionKey.OP_WRITE);
+ NHttpClientConnection conn = entry.getConnection();
+ conn.getContext().setAttribute("executor", this);
+ conn.requestOutput();
System.out.println(this.poolEntry.getRoute() + ": obtained connection from the pool");
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/examples/org/apache/http/examples/nio/NHttpSSLClient.java Thu Sep 1 12:18:49 2011
@@ -28,7 +28,6 @@ package org.apache.http.examples.nio;
import java.io.IOException;
import java.io.InterruptedIOException;
-import java.nio.channels.SelectionKey;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
@@ -45,11 +44,11 @@ import org.apache.http.impl.nio.pool.Bas
import org.apache.http.impl.nio.reactor.DefaultConnectingIOReactor;
import org.apache.http.impl.nio.ssl.SSLClientIOEventDispatch;
import org.apache.http.message.BasicHttpRequest;
+import org.apache.http.nio.NHttpClientConnection;
import org.apache.http.nio.protocol.BufferingHttpClientHandler;
import org.apache.http.nio.protocol.HttpRequestExecutionHandler;
import org.apache.http.nio.reactor.ConnectingIOReactor;
import org.apache.http.nio.reactor.IOEventDispatch;
-import org.apache.http.nio.reactor.IOSession;
import org.apache.http.params.CoreConnectionPNames;
import org.apache.http.params.CoreProtocolPNames;
import org.apache.http.params.HttpParams;
@@ -176,9 +175,9 @@ public class NHttpSSLClient {
public void completed(final BasicNIOPoolEntry entry) {
this.poolEntry = entry;
- IOSession session = entry.getConnection();
- session.setAttribute("executor", this);
- session.setEvent(SelectionKey.OP_WRITE);
+ NHttpClientConnection conn = entry.getConnection();
+ conn.getContext().setAttribute("executor", this);
+ conn.requestOutput();
System.out.println(this.poolEntry.getRoute() + ": obtained connection from the pool");
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultClientIOEventDispatch.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultClientIOEventDispatch.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultClientIOEventDispatch.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultClientIOEventDispatch.java Thu Sep 1 12:18:49 2011
@@ -27,10 +27,13 @@
package org.apache.http.impl.nio;
+import java.io.IOException;
+
import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseFactory;
import org.apache.http.annotation.Immutable;
import org.apache.http.impl.DefaultHttpResponseFactory;
+import org.apache.http.impl.nio.reactor.SSLIOSession;
import org.apache.http.nio.NHttpClientIOTarget;
import org.apache.http.nio.NHttpClientHandler;
import org.apache.http.nio.reactor.IOEventDispatch;
@@ -60,8 +63,8 @@ import org.apache.http.protocol.Executio
@Immutable // provided injected dependencies are immutable
public class DefaultClientIOEventDispatch implements IOEventDispatch {
- protected final ByteBufferAllocator allocator;
protected final NHttpClientHandler handler;
+ protected final ByteBufferAllocator allocator;
protected final HttpParams params;
/**
@@ -124,27 +127,25 @@ public class DefaultClientIOEventDispatc
* @return newly created HTTP connection.
*/
protected NHttpClientIOTarget createConnection(final IOSession session) {
- try {
- return new DefaultNHttpClientConnection(
- session,
- createHttpResponseFactory(),
- this.allocator,
- this.params);
- } catch (RuntimeException ex) {
- session.shutdown();
- throw ex;
- }
+ return new DefaultNHttpClientConnection(
+ session,
+ createHttpResponseFactory(),
+ this.allocator,
+ this.params);
}
public void connected(final IOSession session) {
try {
- NHttpClientIOTarget conn = createConnection(session);
- Object attachment = session.getAttribute(IOSession.ATTACHMENT_KEY);
- session.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
-
+ NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
+ ExecutionContext.HTTP_CONNECTION);
+ if (conn == null) {
+ conn = createConnection(session);
+ session.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
+ }
int timeout = HttpConnectionParams.getSoTimeout(this.params);
conn.setSocketTimeout(timeout);
+ Object attachment = session.getAttribute(IOSession.ATTACHMENT_KEY);
this.handler.connected(conn, attachment);
} catch (RuntimeException ex) {
session.shutdown();
@@ -171,7 +172,21 @@ public class DefaultClientIOEventDispatc
NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
ExecutionContext.HTTP_CONNECTION);
ensureNotNull(conn);
- conn.consumeInput(this.handler);
+ SSLIOSession ssliosession = (SSLIOSession) session.getAttribute(
+ IOSession.SSL_SESSION_KEY);
+ if (ssliosession == null) {
+ conn.consumeInput(this.handler);
+ } else {
+ try {
+ if (ssliosession.isAppInputReady()) {
+ conn.consumeInput(this.handler);
+ }
+ ssliosession.inboundTransport();
+ } catch (IOException ex) {
+ this.handler.exception(conn, ex);
+ ssliosession.shutdown();
+ }
+ }
} catch (RuntimeException ex) {
session.shutdown();
throw ex;
@@ -183,7 +198,21 @@ public class DefaultClientIOEventDispatc
NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
ExecutionContext.HTTP_CONNECTION);
ensureNotNull(conn);
- conn.produceOutput(this.handler);
+ SSLIOSession ssliosession = (SSLIOSession) session.getAttribute(
+ IOSession.SSL_SESSION_KEY);
+ if (ssliosession == null) {
+ conn.produceOutput(this.handler);
+ } else {
+ try {
+ if (ssliosession.isAppOutputReady()) {
+ conn.produceOutput(this.handler);
+ }
+ ssliosession.outboundTransport();
+ } catch (IOException ex) {
+ this.handler.exception(conn, ex);
+ ssliosession.shutdown();
+ }
+ }
} catch (RuntimeException ex) {
session.shutdown();
throw ex;
@@ -194,8 +223,20 @@ public class DefaultClientIOEventDispatc
try {
NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
ExecutionContext.HTTP_CONNECTION);
+ SSLIOSession ssliosession = (SSLIOSession) session.getAttribute(
+ IOSession.SSL_SESSION_KEY);
ensureNotNull(conn);
- this.handler.timeout(conn);
+ if (ssliosession == null) {
+ this.handler.timeout(conn);
+ } else {
+ this.handler.timeout(conn);
+ synchronized (ssliosession) {
+ if (ssliosession.isOutboundDone() && !ssliosession.isInboundDone()) {
+ // The session failed to terminate cleanly
+ ssliosession.shutdown();
+ }
+ }
+ }
} catch (RuntimeException ex) {
session.shutdown();
throw ex;
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultServerIOEventDispatch.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultServerIOEventDispatch.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultServerIOEventDispatch.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/DefaultServerIOEventDispatch.java Thu Sep 1 12:18:49 2011
@@ -27,10 +27,13 @@
package org.apache.http.impl.nio;
+import java.io.IOException;
+
import org.apache.http.HttpRequest;
import org.apache.http.HttpRequestFactory;
import org.apache.http.annotation.Immutable;
import org.apache.http.impl.DefaultHttpRequestFactory;
+import org.apache.http.impl.nio.reactor.SSLIOSession;
import org.apache.http.nio.NHttpServerIOTarget;
import org.apache.http.nio.NHttpServiceHandler;
import org.apache.http.nio.reactor.IOEventDispatch;
@@ -165,7 +168,21 @@ public class DefaultServerIOEventDispatc
NHttpServerIOTarget conn = (NHttpServerIOTarget) session.getAttribute(
ExecutionContext.HTTP_CONNECTION);
ensureNotNull(conn);
- conn.consumeInput(this.handler);
+ SSLIOSession ssliosession = (SSLIOSession) session.getAttribute(
+ IOSession.SSL_SESSION_KEY);
+ if (ssliosession == null) {
+ conn.consumeInput(this.handler);
+ } else {
+ try {
+ if (ssliosession.isAppInputReady()) {
+ conn.consumeInput(this.handler);
+ }
+ ssliosession.inboundTransport();
+ } catch (IOException ex) {
+ this.handler.exception(conn, ex);
+ ssliosession.shutdown();
+ }
+ }
} catch (RuntimeException ex) {
session.shutdown();
throw ex;
@@ -177,7 +194,21 @@ public class DefaultServerIOEventDispatc
NHttpServerIOTarget conn = (NHttpServerIOTarget) session.getAttribute(
ExecutionContext.HTTP_CONNECTION);
ensureNotNull(conn);
- conn.produceOutput(this.handler);
+ SSLIOSession ssliosession = (SSLIOSession) session.getAttribute(
+ IOSession.SSL_SESSION_KEY);
+ if (ssliosession == null) {
+ conn.produceOutput(this.handler);
+ } else {
+ try {
+ if (ssliosession.isAppOutputReady()) {
+ conn.produceOutput(this.handler);
+ }
+ ssliosession.outboundTransport();
+ } catch (IOException ex) {
+ this.handler.exception(conn, ex);
+ ssliosession.shutdown();
+ }
+ }
} catch (RuntimeException ex) {
session.shutdown();
throw ex;
@@ -189,7 +220,19 @@ public class DefaultServerIOEventDispatc
NHttpServerIOTarget conn = (NHttpServerIOTarget) session.getAttribute(
ExecutionContext.HTTP_CONNECTION);
ensureNotNull(conn);
- this.handler.timeout(conn);
+ SSLIOSession ssliosession = (SSLIOSession) session.getAttribute(
+ IOSession.SSL_SESSION_KEY);
+ if (ssliosession == null) {
+ this.handler.timeout(conn);
+ } else {
+ this.handler.timeout(conn);
+ synchronized (ssliosession) {
+ if (ssliosession.isOutboundDone() && !ssliosession.isInboundDone()) {
+ // The session failed to terminate cleanly
+ ssliosession.shutdown();
+ }
+ }
+ }
} catch (RuntimeException ex) {
session.shutdown();
throw ex;
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/NHttpConnectionBase.java Thu Sep 1 12:18:49 2011
@@ -133,6 +133,9 @@ public class NHttpConnectionBase
}
int buffersize = HttpConnectionParams.getSocketBufferSize(params);
+ if (buffersize <= 0) {
+ buffersize = 4096;
+ }
int linebuffersize = buffersize;
if (linebuffersize > 512) {
linebuffersize = 512;
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOConnPool.java Thu Sep 1 12:18:49 2011
@@ -26,20 +26,33 @@
*/
package org.apache.http.impl.nio.pool;
+import java.io.IOException;
import java.net.InetSocketAddress;
import java.net.SocketAddress;
import java.util.concurrent.Future;
import java.util.concurrent.TimeUnit;
import java.util.concurrent.atomic.AtomicLong;
+import javax.net.ssl.SSLContext;
+
import org.apache.http.HttpHost;
+import org.apache.http.HttpResponseFactory;
import org.apache.http.annotation.ThreadSafe;
import org.apache.http.concurrent.FutureCallback;
+import org.apache.http.impl.DefaultHttpResponseFactory;
+import org.apache.http.impl.nio.DefaultNHttpClientConnection;
+import org.apache.http.impl.nio.reactor.SSLIOSession;
+import org.apache.http.impl.nio.reactor.SSLMode;
+import org.apache.http.impl.nio.reactor.SSLSetupHandler;
+import org.apache.http.nio.NHttpClientConnection;
import org.apache.http.nio.pool.AbstractNIOConnPool;
import org.apache.http.nio.reactor.ConnectingIOReactor;
import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.util.ByteBufferAllocator;
+import org.apache.http.nio.util.HeapByteBufferAllocator;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
+import org.apache.http.protocol.ExecutionContext;
/**
* Basic non-blocking {@link IOSession} pool.
@@ -47,26 +60,66 @@ import org.apache.http.params.HttpParams
* The following parameters can be used to customize the behavior of this
* class:
* <ul>
+ * <li>{@link org.apache.http.params.CoreProtocolPNames#HTTP_ELEMENT_CHARSET}</li>
+ * <li>{@link org.apache.http.params.CoreConnectionPNames#SO_TIMEOUT}</li>
* <li>{@link org.apache.http.params.CoreConnectionPNames#CONNECTION_TIMEOUT}</li>
+ * <li>{@link org.apache.http.params.CoreConnectionPNames#SOCKET_BUFFER_SIZE}</li>
+ * <li>{@link org.apache.http.params.CoreConnectionPNames#MAX_HEADER_COUNT}</li>
+ * <li>{@link org.apache.http.params.CoreConnectionPNames#MAX_LINE_LENGTH}</li>
* </ul>
*
* @since 4.2
*/
@ThreadSafe
-public class BasicNIOConnPool extends AbstractNIOConnPool<HttpHost, IOSession, BasicNIOPoolEntry> {
+public class BasicNIOConnPool extends AbstractNIOConnPool<HttpHost, NHttpClientConnection, BasicNIOPoolEntry> {
private static AtomicLong COUNTER = new AtomicLong();
+ private final HttpResponseFactory responseFactory;
+ private final ByteBufferAllocator allocator;
+ private final SSLContext sslcontext;
+ private final SSLSetupHandler sslHandler;
private final HttpParams params;
- public BasicNIOConnPool(final ConnectingIOReactor ioreactor, final HttpParams params) {
+ public BasicNIOConnPool(
+ final ConnectingIOReactor ioreactor,
+ final SSLContext sslcontext,
+ final SSLSetupHandler sslHandler,
+ final HttpResponseFactory responseFactory,
+ final ByteBufferAllocator allocator,
+ final HttpParams params) {
super(ioreactor, 2, 20);
+ if (responseFactory == null) {
+ throw new IllegalArgumentException("HTTP response factory may not be null");
+ }
+ if (allocator == null) {
+ throw new IllegalArgumentException("Byte buffer allocator may not be null");
+ }
if (params == null) {
throw new IllegalArgumentException("HTTP parameters may not be null");
}
+ this.sslcontext = sslcontext;
+ this.sslHandler = sslHandler;
+ this.responseFactory = responseFactory;
+ this.allocator = allocator;
this.params = params;
}
+ public BasicNIOConnPool(
+ final ConnectingIOReactor ioreactor,
+ final SSLContext sslcontext,
+ final SSLSetupHandler sslHandler,
+ final HttpParams params) {
+ this(ioreactor, sslcontext, sslHandler,
+ new DefaultHttpResponseFactory(), new HeapByteBufferAllocator(), params);
+ }
+
+ public BasicNIOConnPool(
+ final ConnectingIOReactor ioreactor,
+ final HttpParams params) {
+ this(ioreactor, null, null, params);
+ }
+
@Override
protected SocketAddress resolveRemoteAddress(final HttpHost host) {
return new InetSocketAddress(host.getHostName(), host.getPort());
@@ -77,20 +130,54 @@ public class BasicNIOConnPool extends Ab
return null;
}
+ private SSLContext getDefaultSSLContext() {
+ SSLContext sslcontext;
+ try {
+ sslcontext = SSLContext.getInstance("TLS");
+ sslcontext.init(null, null, null);
+ } catch (Exception ex) {
+ throw new IllegalStateException("Failure initializing default SSL context", ex);
+ }
+ return sslcontext;
+ }
+
@Override
- protected IOSession createConnection(final HttpHost route, final IOSession session) {
- return session;
+ protected NHttpClientConnection createConnection(
+ final HttpHost route, final IOSession session) throws IOException {
+ IOSession connSession;
+ if (route.getSchemeName().equalsIgnoreCase("https")) {
+ SSLContext connSSLContext = this.sslcontext != null ? this.sslcontext : getDefaultSSLContext();
+ SSLIOSession ssliosession = new SSLIOSession(session, connSSLContext, this.sslHandler);
+ ssliosession.bind(SSLMode.CLIENT, this.params);
+ session.setAttribute(IOSession.SSL_SESSION_KEY, ssliosession);
+ connSession = ssliosession;
+ } else {
+ connSession = session;
+ }
+
+ NHttpClientConnection conn = new DefaultNHttpClientConnection(
+ connSession, this.responseFactory, this.allocator, this.params);
+
+ session.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
+
+ int timeout = HttpConnectionParams.getSoTimeout(this.params);
+ conn.setSocketTimeout(timeout);
+
+ return conn;
}
@Override
- protected BasicNIOPoolEntry createEntry(final HttpHost host, final IOSession conn) {
+ protected BasicNIOPoolEntry createEntry(final HttpHost host, final NHttpClientConnection conn) {
return new BasicNIOPoolEntry(Long.toString(COUNTER.getAndIncrement()), host, conn);
}
@Override
protected void closeEntry(final BasicNIOPoolEntry entry) {
- IOSession iosession = entry.getConnection();
- iosession.shutdown();
+ NHttpClientConnection conn = entry.getConnection();
+ try {
+ conn.shutdown();
+ } catch (IOException ex) {
+ }
}
@Override
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/pool/BasicNIOPoolEntry.java Thu Sep 1 12:18:49 2011
@@ -28,7 +28,7 @@ package org.apache.http.impl.nio.pool;
import org.apache.http.HttpHost;
import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.nio.reactor.IOSession;
+import org.apache.http.nio.NHttpClientConnection;
import org.apache.http.pool.PoolEntry;
/**
@@ -37,9 +37,9 @@ import org.apache.http.pool.PoolEntry;
* @since 4.2
*/
@ThreadSafe
-public class BasicNIOPoolEntry extends PoolEntry<HttpHost, IOSession> {
+public class BasicNIOPoolEntry extends PoolEntry<HttpHost, NHttpClientConnection> {
- public BasicNIOPoolEntry(final String id, final HttpHost route, final IOSession conn) {
+ public BasicNIOPoolEntry(final String id, final HttpHost route, final NHttpClientConnection conn) {
super(id, route, conn);
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLClientIOEventDispatch.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLClientIOEventDispatch.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLClientIOEventDispatch.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLClientIOEventDispatch.java Thu Sep 1 12:18:49 2011
@@ -27,16 +27,11 @@
package org.apache.http.impl.nio.ssl;
-import java.io.IOException;
-
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
-import org.apache.http.HttpResponse;
-import org.apache.http.HttpResponseFactory;
import org.apache.http.annotation.Immutable;
-import org.apache.http.impl.DefaultHttpResponseFactory;
-import org.apache.http.impl.nio.DefaultNHttpClientConnection;
+import org.apache.http.impl.nio.DefaultClientIOEventDispatch;
import org.apache.http.impl.nio.reactor.SSLIOSession;
import org.apache.http.impl.nio.reactor.SSLMode;
import org.apache.http.impl.nio.reactor.SSLSetupHandler;
@@ -44,8 +39,6 @@ import org.apache.http.nio.NHttpClientHa
import org.apache.http.nio.NHttpClientIOTarget;
import org.apache.http.nio.reactor.IOEventDispatch;
import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.util.ByteBufferAllocator;
-import org.apache.http.nio.util.HeapByteBufferAllocator;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.ExecutionContext;
@@ -67,14 +60,10 @@ import org.apache.http.protocol.Executio
* @since 4.1
*/
@Immutable // provided injected dependencies are immutable
-public class SSLClientIOEventDispatch implements IOEventDispatch {
-
- private static final String SSL_SESSION = "http.nio.ssl-session";
+public class SSLClientIOEventDispatch extends DefaultClientIOEventDispatch {
- private final NHttpClientHandler handler;
private final SSLContext sslcontext;
private final SSLSetupHandler sslHandler;
- private final HttpParams params;
/**
* Creates a new instance of this class to be used for dispatching I/O event
@@ -92,18 +81,13 @@ public class SSLClientIOEventDispatch im
final SSLContext sslcontext,
final SSLSetupHandler sslHandler,
final HttpParams params) {
- super();
- if (handler == null) {
- throw new IllegalArgumentException("HTTP client handler may not be null");
- }
+ super(handler, params);
if (sslcontext == null) {
throw new IllegalArgumentException("SSL context may not be null");
}
if (params == null) {
throw new IllegalArgumentException("HTTP parameters may not be null");
}
- this.handler = handler;
- this.params = params;
this.sslcontext = sslcontext;
this.sslHandler = sslHandler;
}
@@ -126,51 +110,6 @@ public class SSLClientIOEventDispatch im
}
/**
- * Creates an instance of {@link HeapByteBufferAllocator} to be used
- * by HTTP connections for allocating {@link java.nio.ByteBuffer} objects.
- * <p>
- * This method can be overridden in a super class in order to provide
- * a different implementation of the {@link ByteBufferAllocator} interface.
- *
- * @return byte buffer allocator.
- */
- protected ByteBufferAllocator createByteBufferAllocator() {
- return new HeapByteBufferAllocator();
- }
-
- /**
- * Creates an instance of {@link DefaultHttpResponseFactory} to be used
- * by HTTP connections for creating {@link HttpResponse} objects.
- * <p>
- * This method can be overridden in a super class in order to provide
- * a different implementation of the {@link HttpResponseFactory} interface.
- *
- * @return HTTP response factory.
- */
- protected HttpResponseFactory createHttpResponseFactory() {
- return new DefaultHttpResponseFactory();
- }
-
- /**
- * Creates an instance of {@link DefaultNHttpClientConnection} based on the
- * given SSL {@link IOSession}.
- * <p>
- * This method can be overridden in a super class in order to provide
- * a different implementation of the {@link NHttpClientIOTarget} interface.
- *
- * @param session the underlying SSL I/O session.
- *
- * @return newly created HTTP connection.
- */
- protected NHttpClientIOTarget createConnection(final IOSession session) {
- return new DefaultNHttpClientConnection(
- session,
- createHttpResponseFactory(),
- createByteBufferAllocator(),
- this.params);
- }
-
- /**
* Creates an instance of {@link SSLIOSession} decorating the given
* {@link IOSession}.
* <p>
@@ -189,18 +128,29 @@ public class SSLClientIOEventDispatch im
return new SSLIOSession(session, sslcontext, sslHandler);
}
+ @Override
public void connected(final IOSession session) {
try {
- SSLIOSession sslSession = createSSLIOSession(
- session,
- this.sslcontext,
- this.sslHandler);
- NHttpClientIOTarget conn = createConnection(
- sslSession);
+ NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
+ ExecutionContext.HTTP_CONNECTION);
- session.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
- session.setAttribute(SSL_SESSION, sslSession);
+ if (conn == null) {
+ SSLIOSession ssliosession = createSSLIOSession(
+ session,
+ this.sslcontext,
+ this.sslHandler);
+ session.setAttribute(IOSession.SSL_SESSION_KEY, ssliosession);
+ conn = createConnection(ssliosession);
+ session.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
+
+ try {
+ ssliosession.bind(SSLMode.CLIENT, this.params);
+ } catch (SSLException ex) {
+ this.handler.exception(conn, ex);
+ ssliosession.shutdown();
+ }
+ }
int timeout = HttpConnectionParams.getSoTimeout(this.params);
conn.setSocketTimeout(timeout);
@@ -208,102 +158,6 @@ public class SSLClientIOEventDispatch im
Object attachment = session.getAttribute(IOSession.ATTACHMENT_KEY);
this.handler.connected(conn, attachment);
- try {
- sslSession.bind(SSLMode.CLIENT, this.params);
- } catch (SSLException ex) {
- this.handler.exception(conn, ex);
- sslSession.shutdown();
- }
- } catch (RuntimeException ex) {
- session.shutdown();
- throw ex;
- }
- }
-
- public void disconnected(final IOSession session) {
- NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
- ExecutionContext.HTTP_CONNECTION);
- if (conn != null) {
- this.handler.closed(conn);
- }
- }
-
- private void ensureNotNull(final NHttpClientIOTarget conn) {
- if (conn == null) {
- throw new IllegalStateException("HTTP connection is null");
- }
- }
-
- private void ensureNotNull(final SSLIOSession ssliosession) {
- if (ssliosession == null) {
- throw new IllegalStateException("SSL I/O session is null");
- }
- }
-
- public void inputReady(final IOSession session) {
- try {
- NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
- ExecutionContext.HTTP_CONNECTION);
- ensureNotNull(conn);
- SSLIOSession sslSession =
- (SSLIOSession) session.getAttribute(SSL_SESSION);
- ensureNotNull(sslSession);
-
- try {
- if (sslSession.isAppInputReady()) {
- conn.consumeInput(this.handler);
- }
- sslSession.inboundTransport();
- } catch (IOException ex) {
- this.handler.exception(conn, ex);
- sslSession.shutdown();
- }
- } catch (RuntimeException ex) {
- session.shutdown();
- throw ex;
- }
- }
-
- public void outputReady(final IOSession session) {
- try {
- NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
- ExecutionContext.HTTP_CONNECTION);
- ensureNotNull(conn);
- SSLIOSession sslSession =
- (SSLIOSession) session.getAttribute(SSL_SESSION);
- ensureNotNull(sslSession);
-
- try {
- if (sslSession.isAppOutputReady()) {
- conn.produceOutput(this.handler);
- }
- sslSession.outboundTransport();
- } catch (IOException ex) {
- this.handler.exception(conn, ex);
- sslSession.shutdown();
- }
- } catch (RuntimeException ex) {
- session.shutdown();
- throw ex;
- }
- }
-
- public void timeout(final IOSession session) {
- try {
- NHttpClientIOTarget conn = (NHttpClientIOTarget) session.getAttribute(
- ExecutionContext.HTTP_CONNECTION);
- ensureNotNull(conn);
- SSLIOSession sslSession =
- (SSLIOSession) session.getAttribute(SSL_SESSION);
- ensureNotNull(sslSession);
-
- this.handler.timeout(conn);
- synchronized (sslSession) {
- if (sslSession.isOutboundDone() && !sslSession.isInboundDone()) {
- // The session failed to terminate cleanly
- sslSession.shutdown();
- }
- }
} catch (RuntimeException ex) {
session.shutdown();
throw ex;
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLServerIOEventDispatch.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLServerIOEventDispatch.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLServerIOEventDispatch.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/impl/nio/ssl/SSLServerIOEventDispatch.java Thu Sep 1 12:18:49 2011
@@ -27,16 +27,11 @@
package org.apache.http.impl.nio.ssl;
-import java.io.IOException;
-
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLException;
-import org.apache.http.HttpRequest;
-import org.apache.http.HttpRequestFactory;
import org.apache.http.annotation.Immutable;
-import org.apache.http.impl.DefaultHttpRequestFactory;
-import org.apache.http.impl.nio.DefaultNHttpServerConnection;
+import org.apache.http.impl.nio.DefaultServerIOEventDispatch;
import org.apache.http.impl.nio.reactor.SSLIOSession;
import org.apache.http.impl.nio.reactor.SSLMode;
import org.apache.http.impl.nio.reactor.SSLSetupHandler;
@@ -44,8 +39,6 @@ import org.apache.http.nio.NHttpServerIO
import org.apache.http.nio.NHttpServiceHandler;
import org.apache.http.nio.reactor.IOEventDispatch;
import org.apache.http.nio.reactor.IOSession;
-import org.apache.http.nio.util.ByteBufferAllocator;
-import org.apache.http.nio.util.HeapByteBufferAllocator;
import org.apache.http.params.HttpConnectionParams;
import org.apache.http.params.HttpParams;
import org.apache.http.protocol.ExecutionContext;
@@ -67,14 +60,10 @@ import org.apache.http.protocol.Executio
* @since 4.1
*/
@Immutable // provided injected dependencies are immutable
-public class SSLServerIOEventDispatch implements IOEventDispatch {
-
- private static final String SSL_SESSION = "http.nio.ssl-session";
+public class SSLServerIOEventDispatch extends DefaultServerIOEventDispatch {
- private final NHttpServiceHandler handler;
private final SSLContext sslcontext;
private final SSLSetupHandler sslHandler;
- private final HttpParams params;
/**
* Creates a new instance of this class to be used for dispatching I/O event
@@ -92,18 +81,13 @@ public class SSLServerIOEventDispatch im
final SSLContext sslcontext,
final SSLSetupHandler sslHandler,
final HttpParams params) {
- super();
- if (handler == null) {
- throw new IllegalArgumentException("HTTP service handler may not be null");
- }
+ super(handler, params);
if (sslcontext == null) {
throw new IllegalArgumentException("SSL context may not be null");
}
if (params == null) {
throw new IllegalArgumentException("HTTP parameters may not be null");
}
- this.handler = handler;
- this.params = params;
this.sslcontext = sslcontext;
this.sslHandler = sslHandler;
}
@@ -126,51 +110,6 @@ public class SSLServerIOEventDispatch im
}
/**
- * Creates an instance of {@link HeapByteBufferAllocator} to be used
- * by HTTP connections for allocating {@link java.nio.ByteBuffer} objects.
- * <p>
- * This method can be overridden in a super class in order to provide
- * a different implementation of the {@link ByteBufferAllocator} interface.
- *
- * @return byte buffer allocator.
- */
- protected ByteBufferAllocator createByteBufferAllocator() {
- return new HeapByteBufferAllocator();
- }
-
- /**
- * Creates an instance of {@link DefaultHttpRequestFactory} to be used
- * by HTTP connections for creating {@link HttpRequest} objects.
- * <p>
- * This method can be overridden in a super class in order to provide
- * a different implementation of the {@link HttpRequestFactory} interface.
- *
- * @return HTTP request factory.
- */
- protected HttpRequestFactory createHttpRequestFactory() {
- return new DefaultHttpRequestFactory();
- }
-
- /**
- * Creates an instance of {@link DefaultNHttpServerConnection} based on the
- * given {@link IOSession}.
- * <p>
- * This method can be overridden in a super class in order to provide
- * a different implementation of the {@link NHttpServerIOTarget} interface.
- *
- * @param session the underlying SSL I/O session.
- *
- * @return newly created HTTP connection.
- */
- protected NHttpServerIOTarget createConnection(final IOSession session) {
- return new DefaultNHttpServerConnection(
- session,
- createHttpRequestFactory(),
- createByteBufferAllocator(),
- this.params);
- }
-
- /**
* Creates an instance of {@link SSLIOSession} decorating the given
* {@link IOSession}.
* <p>
@@ -191,16 +130,14 @@ public class SSLServerIOEventDispatch im
public void connected(final IOSession session) {
try {
- SSLIOSession sslSession = createSSLIOSession(
+
+ SSLIOSession ssliosession = createSSLIOSession(
session,
this.sslcontext,
this.sslHandler);
-
- NHttpServerIOTarget conn = createConnection(
- sslSession);
-
+ session.setAttribute(IOSession.SSL_SESSION_KEY, ssliosession);
+ NHttpServerIOTarget conn = createConnection(ssliosession);
session.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
- session.setAttribute(SSL_SESSION, sslSession);
int timeout = HttpConnectionParams.getSoTimeout(this.params);
conn.setSocketTimeout(timeout);
@@ -208,100 +145,10 @@ public class SSLServerIOEventDispatch im
this.handler.connected(conn);
try {
- sslSession.bind(SSLMode.SERVER, this.params);
+ ssliosession.bind(SSLMode.SERVER, this.params);
} catch (SSLException ex) {
this.handler.exception(conn, ex);
- sslSession.shutdown();
- }
- } catch (RuntimeException ex) {
- session.shutdown();
- throw ex;
- }
- }
-
- public void disconnected(final IOSession session) {
- NHttpServerIOTarget conn = (NHttpServerIOTarget) session.getAttribute(
- ExecutionContext.HTTP_CONNECTION);
- if (conn != null) {
- this.handler.closed(conn);
- }
- }
-
- private void ensureNotNull(final NHttpServerIOTarget conn) {
- if (conn == null) {
- throw new IllegalStateException("HTTP connection is null");
- }
- }
-
- private void ensureNotNull(final SSLIOSession ssliosession) {
- if (ssliosession == null) {
- throw new IllegalStateException("SSL I/O session is null");
- }
- }
-
- public void inputReady(final IOSession session) {
- try {
- NHttpServerIOTarget conn = (NHttpServerIOTarget) session.getAttribute(
- ExecutionContext.HTTP_CONNECTION);
- ensureNotNull(conn);
- SSLIOSession sslSession =
- (SSLIOSession) session.getAttribute(SSL_SESSION);
- ensureNotNull(sslSession);
-
- try {
- if (sslSession.isAppInputReady()) {
- conn.consumeInput(this.handler);
- }
- sslSession.inboundTransport();
- } catch (IOException ex) {
- this.handler.exception(conn, ex);
- sslSession.shutdown();
- }
- } catch (RuntimeException ex) {
- session.shutdown();
- throw ex;
- }
- }
-
- public void outputReady(final IOSession session) {
- try {
- NHttpServerIOTarget conn = (NHttpServerIOTarget) session.getAttribute(
- ExecutionContext.HTTP_CONNECTION);
- ensureNotNull(conn);
- SSLIOSession sslSession =
- (SSLIOSession) session.getAttribute(SSL_SESSION);
- ensureNotNull(sslSession);
-
- try {
- if (sslSession.isAppOutputReady()) {
- conn.produceOutput(this.handler);
- }
- sslSession.outboundTransport();
- } catch (IOException ex) {
- this.handler.exception(conn, ex);
- sslSession.shutdown();
- }
- } catch (RuntimeException ex) {
- session.shutdown();
- throw ex;
- }
- }
-
- public void timeout(final IOSession session) {
- try {
- NHttpServerIOTarget conn = (NHttpServerIOTarget) session.getAttribute(
- ExecutionContext.HTTP_CONNECTION);
- ensureNotNull(conn);
- SSLIOSession sslSession =
- (SSLIOSession) session.getAttribute(SSL_SESSION);
- ensureNotNull(sslSession);
-
- this.handler.timeout(conn);
- synchronized (sslSession) {
- if (sslSession.isOutboundDone() && !sslSession.isInboundDone()) {
- // The session failed to cleanly terminate
- sslSession.shutdown();
- }
+ ssliosession.shutdown();
}
} catch (RuntimeException ex) {
session.shutdown();
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/AbstractNIOConnPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/AbstractNIOConnPool.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/AbstractNIOConnPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/AbstractNIOConnPool.java Thu Sep 1 12:18:49 2011
@@ -109,7 +109,7 @@ public abstract class AbstractNIOConnPoo
protected abstract SocketAddress resolveLocalAddress(T route);
- protected abstract C createConnection(T route, IOSession session);
+ protected abstract C createConnection(T route, IOSession session) throws IOException;
protected abstract E createEntry(T route, C conn);
@@ -345,9 +345,13 @@ public abstract class AbstractNIOConnPoo
this.pending.remove(request);
RouteSpecificPool<T, C, E> pool = getPool(route);
IOSession session = request.getSession();
- C conn = createConnection(route, session);
- E entry = pool.completed(request, conn);
- this.leased.add(entry);
+ try {
+ C conn = createConnection(route, session);
+ E entry = pool.completed(request, conn);
+ this.leased.add(entry);
+ } catch (IOException ex) {
+ pool.failed(request, ex);
+ }
} finally {
this.lock.unlock();
}
@@ -379,7 +383,7 @@ public abstract class AbstractNIOConnPoo
try {
this.pending.remove(request);
RouteSpecificPool<T, C, E> pool = getPool(route);
- pool.failed(request);
+ pool.failed(request, request.getException());
} finally {
this.lock.unlock();
}
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/RouteSpecificPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/RouteSpecificPool.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/RouteSpecificPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/pool/RouteSpecificPool.java Thu Sep 1 12:18:49 2011
@@ -162,9 +162,9 @@ abstract class RouteSpecificPool<T, C, E
future.cancel(true);
}
- public void failed(final SessionRequest request) {
+ public void failed(final SessionRequest request, final Exception ex) {
BasicFuture<E> future = removeRequest(request);
- future.failed(request.getException());
+ future.failed(ex);
}
public void timeout(final SessionRequest request) {
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOSession.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOSession.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOSession.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/main/java/org/apache/http/nio/reactor/IOSession.java Thu Sep 1 12:18:49 2011
@@ -54,6 +54,12 @@ public interface IOSession {
*/
public static final String ATTACHMENT_KEY = "http.session.attachment";
+ /**
+ * Name of the context attribute key, which can be used to obtain the
+ * SSL session.
+ */
+ public static final String SSL_SESSION_KEY = "http.session.ssl";
+
public static final int ACTIVE = 0;
public static final int CLOSING = 1;
public static final int CLOSED = Integer.MAX_VALUE;
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/impl/nio/pool/TestBasicNIOConnPool.java Thu Sep 1 12:18:49 2011
@@ -26,8 +26,8 @@
*/
package org.apache.http.impl.nio.pool;
-
import org.apache.http.HttpHost;
+import org.apache.http.nio.NHttpClientConnection;
import org.apache.http.nio.reactor.ConnectingIOReactor;
import org.apache.http.nio.reactor.IOSession;
import org.apache.http.params.BasicHttpParams;
@@ -74,7 +74,7 @@ public class TestBasicNIOConnPool {
@Test
public void testCreateEntry() throws Exception {
- IOSession conn = pool.createConnection(route, session);
+ NHttpClientConnection conn = pool.createConnection(route, session);
BasicNIOPoolEntry entry = pool.createEntry(route, conn);
pool.closeEntry(entry);
Modified: httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestRouteSpecificPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestRouteSpecificPool.java?rev=1164033&r1=1164032&r2=1164033&view=diff
==============================================================================
--- httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestRouteSpecificPool.java (original)
+++ httpcomponents/httpcore/trunk/httpcore-nio/src/test/java/org/apache/http/nio/pool/TestRouteSpecificPool.java Thu Sep 1 12:18:49 2011
@@ -107,14 +107,13 @@ public class TestRouteSpecificPool {
public void testFailedConnect() throws Exception {
LocalRoutePool pool = new LocalRoutePool();
SessionRequest sessionRequest = Mockito.mock(SessionRequest.class);
- Mockito.when(sessionRequest.getException()).thenReturn(new IOException());
BasicFuture<LocalPoolEntry> future = new BasicFuture<LocalPoolEntry>(null);
pool.addPending(sessionRequest, future);
Assert.assertEquals(1, pool.getAllocatedCount());
Assert.assertEquals(0, pool.getAvailableCount());
Assert.assertEquals(0, pool.getLeasedCount());
Assert.assertEquals(1, pool.getPendingCount());
- pool.failed(sessionRequest);
+ pool.failed(sessionRequest, new IOException());
Assert.assertTrue(future.isDone());
Assert.assertFalse(future.isCancelled());
try {