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 2013/03/09 10:46:34 UTC
svn commit: r1454679 - in /httpcomponents/httpclient/trunk/httpclient/src:
examples/org/apache/http/examples/client/ main/java/org/apache/http/conn/
main/java/org/apache/http/impl/client/ main/java/org/apache/http/impl/conn/
main/java/org/apache/http/i...
Author: olegk
Date: Sat Mar 9 09:46:33 2013
New Revision: 1454679
URL: http://svn.apache.org/r1454679
Log:
Revised HttpClientConnectionManager API
Added:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedHttpClientConnection.java (contents, props changed)
- copied, changed from r1450810, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/SocketClientConnection.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java (contents, props changed)
- copied, changed from r1450810, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionFactory.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java (contents, props changed)
- copied, changed from r1450810, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/SocketClientConnectionImpl.java
Removed:
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/SocketClientConnection.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionFactory.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/SocketClientConnectionImpl.java
Modified:
httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientConfiguration.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/HttpClientConnectionManager.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedClientConnection.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultUserTokenHandler.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/ProxyClient.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/AbstractPooledConnAdapter.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPool.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolEntry.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/HttpClientConnectionOperator.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedClientConnectionImpl.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MainClientExec.java
httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MinimalClientExec.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestConnectionManagement.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestBasicHttpClientConnectionManager.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java
httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java
Modified: httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientConfiguration.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientConfiguration.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientConfiguration.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/examples/org/apache/http/examples/client/ClientConfiguration.java Sat Mar 9 09:46:33 2013
@@ -56,7 +56,7 @@ import org.apache.http.config.RegistryBu
import org.apache.http.config.SocketConfig;
import org.apache.http.conn.DnsResolver;
import org.apache.http.conn.HttpConnectionFactory;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainSocketFactory;
@@ -68,7 +68,7 @@ import org.apache.http.impl.client.Basic
import org.apache.http.impl.client.BasicCredentialsProvider;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
-import org.apache.http.impl.conn.DefaultClientConnectionFactory;
+import org.apache.http.impl.conn.ManagedHttpClientConnectionFactory;
import org.apache.http.impl.conn.DefaultHttpResponseParser;
import org.apache.http.impl.conn.DefaultHttpResponseParserFactory;
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
@@ -130,7 +130,7 @@ public class ClientConfiguration {
// configuration parameters HTTP connection factory can control the size of
// input / output buffers as well as determine message parser / writer routines
// to be employed by individual connections.
- HttpConnectionFactory<SocketClientConnection> connFactory = new DefaultClientConnectionFactory(
+ HttpConnectionFactory<ManagedHttpClientConnection> connFactory = new ManagedHttpClientConnectionFactory(
8 * 1024, requestWriterFactory, responseParserFactory);
// Client HTTP connection objects when fully initialized can be bound to
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/HttpClientConnectionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/HttpClientConnectionManager.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/HttpClientConnectionManager.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/HttpClientConnectionManager.java Sat Mar 9 09:46:33 2013
@@ -27,11 +27,9 @@
package org.apache.http.conn;
import java.io.IOException;
-import java.net.InetSocketAddress;
import java.util.concurrent.TimeUnit;
import org.apache.http.HttpClientConnection;
-import org.apache.http.HttpHost;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.protocol.HttpContext;
@@ -80,12 +78,18 @@ public interface HttpClientConnectionMan
void connect(
HttpClientConnection conn,
- HttpHost host, InetSocketAddress localAddress,
+ HttpRoute route,
int connectTimeout,
HttpContext context) throws IOException;
void upgrade(
- HttpClientConnection conn, HttpHost host,
+ HttpClientConnection conn,
+ HttpRoute route,
+ HttpContext context) throws IOException;
+
+ void routeComplete(
+ HttpClientConnection conn,
+ HttpRoute route,
HttpContext context) throws IOException;
/**
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedClientConnection.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedClientConnection.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedClientConnection.java Sat Mar 9 09:46:33 2013
@@ -48,7 +48,7 @@ import org.apache.http.protocol.HttpCont
*/
@Deprecated
public interface ManagedClientConnection extends
- HttpClientConnection, HttpRoutedConnection, SocketClientConnection, ConnectionReleaseTrigger {
+ HttpClientConnection, HttpRoutedConnection, ManagedHttpClientConnection, ConnectionReleaseTrigger {
/**
* Indicates whether this connection is secure.
Copied: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedHttpClientConnection.java (from r1450810, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/SocketClientConnection.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedHttpClientConnection.java?p2=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedHttpClientConnection.java&p1=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/SocketClientConnection.java&r1=1450810&r2=1454679&rev=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/SocketClientConnection.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedHttpClientConnection.java Sat Mar 9 09:46:33 2013
@@ -40,7 +40,9 @@ import org.apache.http.HttpInetConnectio
*
* @since 4.3
*/
-public interface SocketClientConnection extends HttpClientConnection, HttpInetConnection {
+public interface ManagedHttpClientConnection extends HttpClientConnection, HttpInetConnection {
+
+ String getId();
void bind(Socket socket) throws IOException;
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedHttpClientConnection.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedHttpClientConnection.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/conn/ManagedHttpClientConnection.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultUserTokenHandler.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultUserTokenHandler.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultUserTokenHandler.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/DefaultUserTokenHandler.java Sat Mar 9 09:46:33 2013
@@ -37,7 +37,7 @@ import org.apache.http.auth.AuthState;
import org.apache.http.auth.Credentials;
import org.apache.http.client.UserTokenHandler;
import org.apache.http.client.protocol.HttpClientContext;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.protocol.HttpContext;
/**
@@ -76,8 +76,8 @@ public class DefaultUserTokenHandler imp
if (userPrincipal == null) {
final HttpConnection conn = clientContext.getConnection();
- if (conn.isOpen() && conn instanceof SocketClientConnection) {
- final SSLSession sslsession = ((SocketClientConnection) conn).getSSLSession();
+ if (conn.isOpen() && conn instanceof ManagedHttpClientConnection) {
+ final SSLSession sslsession = ((ManagedHttpClientConnection) conn).getSSLSession();
if (sslsession != null) {
userPrincipal = sslsession.getLocalPrincipal();
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/ProxyClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/ProxyClient.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/ProxyClient.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/ProxyClient.java Sat Mar 9 09:46:33 2013
@@ -50,7 +50,7 @@ import org.apache.http.client.protocol.C
import org.apache.http.client.protocol.RequestClientConnControl;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.conn.HttpConnectionFactory;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.routing.RouteInfo.LayerType;
import org.apache.http.conn.routing.RouteInfo.TunnelType;
@@ -61,7 +61,7 @@ import org.apache.http.impl.auth.DigestS
import org.apache.http.impl.auth.KerberosSchemeFactory;
import org.apache.http.impl.auth.NTLMSchemeFactory;
import org.apache.http.impl.auth.SPNegoSchemeFactory;
-import org.apache.http.impl.conn.DefaultClientConnectionFactory;
+import org.apache.http.impl.conn.ManagedHttpClientConnectionFactory;
import org.apache.http.message.BasicHttpRequest;
import org.apache.http.params.BasicHttpParams;
import org.apache.http.params.HttpParamConfig;
@@ -79,7 +79,7 @@ import org.apache.http.util.EntityUtils;
@SuppressWarnings("deprecation")
public class ProxyClient {
- private final HttpConnectionFactory<SocketClientConnection> connFactory;
+ private final HttpConnectionFactory<ManagedHttpClientConnection> connFactory;
private final ConnectionConfig connectionConfig;
private final RequestConfig requestConfig;
private final HttpProcessor httpProcessor;
@@ -94,11 +94,11 @@ public class ProxyClient {
* @since 4.3
*/
public ProxyClient(
- final HttpConnectionFactory<SocketClientConnection> connFactory,
+ final HttpConnectionFactory<ManagedHttpClientConnection> connFactory,
final ConnectionConfig connectionConfig,
final RequestConfig requestConfig) {
super();
- this.connFactory = connFactory != null ? connFactory : DefaultClientConnectionFactory.INSTANCE;
+ this.connFactory = connFactory != null ? connFactory : ManagedHttpClientConnectionFactory.INSTANCE;
this.connectionConfig = connectionConfig != null ? connectionConfig : ConnectionConfig.DEFAULT;
this.requestConfig = requestConfig != null ? requestConfig : RequestConfig.DEFAULT;
this.httpProcessor = new ImmutableHttpProcessor(new HttpRequestInterceptor[] {
@@ -172,7 +172,7 @@ public class ProxyClient {
this.requestConfig.getLocalAddress(),
proxy, false, TunnelType.TUNNELLED, LayerType.PLAIN);
- final SocketClientConnection conn = this.connFactory.create(this.connectionConfig);
+ final ManagedHttpClientConnection conn = this.connFactory.create(this.connectionConfig);
final HttpContext context = new BasicHttpContext();
HttpResponse response = null;
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/AbstractPooledConnAdapter.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/AbstractPooledConnAdapter.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/AbstractPooledConnAdapter.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/AbstractPooledConnAdapter.java Sat Mar 9 09:46:33 2013
@@ -67,6 +67,10 @@ public abstract class AbstractPooledConn
this.poolEntry = entry;
}
+ public String getId() {
+ return null;
+ }
+
/**
* Obtains the pool entry.
*
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java Sat Mar 9 09:46:33 2013
@@ -49,7 +49,7 @@ import org.apache.http.conn.DnsResolver;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.conn.HttpConnectionFactory;
import org.apache.http.conn.SchemePortResolver;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainSocketFactory;
@@ -81,10 +81,10 @@ public class BasicHttpClientConnectionMa
private final Log log = LogFactory.getLog(getClass());
private final HttpClientConnectionOperator connectionOperator;
- private final HttpConnectionFactory<SocketClientConnection> connFactory;
+ private final HttpConnectionFactory<ManagedHttpClientConnection> connFactory;
@GuardedBy("this")
- private SocketClientConnection conn;
+ private ManagedHttpClientConnection conn;
@GuardedBy("this")
private HttpRoute route;
@@ -119,13 +119,13 @@ public class BasicHttpClientConnectionMa
public BasicHttpClientConnectionManager(
final Lookup<ConnectionSocketFactory> socketFactoryRegistry,
- final HttpConnectionFactory<SocketClientConnection> connFactory,
+ final HttpConnectionFactory<ManagedHttpClientConnection> connFactory,
final SchemePortResolver schemePortResolver,
final DnsResolver dnsResolver) {
super();
this.connectionOperator = new HttpClientConnectionOperator(
socketFactoryRegistry, schemePortResolver, dnsResolver);
- this.connFactory = connFactory != null ? connFactory : DefaultClientConnectionFactory.INSTANCE;
+ this.connFactory = connFactory != null ? connFactory : ManagedHttpClientConnectionFactory.INSTANCE;
this.expiry = Long.MAX_VALUE;
this.socketConfig = SocketConfig.DEFAULT;
this.connConfig = ConnectionConfig.DEFAULT;
@@ -133,7 +133,7 @@ public class BasicHttpClientConnectionMa
public BasicHttpClientConnectionManager(
final Lookup<ConnectionSocketFactory> socketFactoryRegistry,
- final HttpConnectionFactory<SocketClientConnection> connFactory) {
+ final HttpConnectionFactory<ManagedHttpClientConnection> connFactory) {
this(socketFactoryRegistry, connFactory, null, null);
}
@@ -302,25 +302,37 @@ public class BasicHttpClientConnectionMa
public void connect(
final HttpClientConnection conn,
- final HttpHost host,
- final InetSocketAddress localAddress,
+ final HttpRoute route,
final int connectTimeout,
final HttpContext context) throws IOException {
Args.notNull(conn, "Connection");
- Args.notNull(host, "HTTP host");
+ Args.notNull(route, "HTTP route");
Asserts.check(conn == this.conn, "Connection not obtained from this manager");
+ HttpHost host;
+ if (route.getProxyHost() != null) {
+ host = route.getProxyHost();
+ } else {
+ host = route.getTargetHost();
+ }
+ final InetSocketAddress localAddress = route.getLocalSocketAddress();
this.connectionOperator.connect(this.conn, host, localAddress,
connectTimeout, this.socketConfig, context);
}
public void upgrade(
final HttpClientConnection conn,
- final HttpHost host,
+ final HttpRoute route,
final HttpContext context) throws IOException {
Args.notNull(conn, "Connection");
- Args.notNull(host, "HTTP host");
+ Args.notNull(route, "HTTP route");
Asserts.check(conn == this.conn, "Connection not obtained from this manager");
- this.connectionOperator.upgrade(this.conn, host, context);
+ this.connectionOperator.upgrade(this.conn, route.getTargetHost(), context);
+ }
+
+ public void routeComplete(
+ final HttpClientConnection conn,
+ final HttpRoute route,
+ final HttpContext context) throws IOException {
}
public synchronized void closeExpiredConnections() {
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPool.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPool.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPool.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPool.java Sat Mar 9 09:46:33 2013
@@ -32,7 +32,7 @@ import java.util.concurrent.atomic.Atomi
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.pool.AbstractConnPool;
import org.apache.http.pool.ConnFactory;
@@ -41,7 +41,7 @@ import org.apache.http.pool.ConnFactory;
* @since 4.3
*/
@ThreadSafe
-class CPool extends AbstractConnPool<HttpRoute, SocketClientConnection, CPoolEntry> {
+class CPool extends AbstractConnPool<HttpRoute, ManagedHttpClientConnection, CPoolEntry> {
private static AtomicLong COUNTER = new AtomicLong();
@@ -50,7 +50,7 @@ class CPool extends AbstractConnPool<Htt
private final TimeUnit tunit;
public CPool(
- final ConnFactory<HttpRoute, SocketClientConnection> connFactory,
+ final ConnFactory<HttpRoute, ManagedHttpClientConnection> connFactory,
final int defaultMaxPerRoute, final int maxTotal,
final long timeToLive, final TimeUnit tunit) {
super(connFactory, defaultMaxPerRoute, maxTotal);
@@ -59,7 +59,7 @@ class CPool extends AbstractConnPool<Htt
}
@Override
- protected CPoolEntry createEntry(final HttpRoute route, final SocketClientConnection conn) {
+ protected CPoolEntry createEntry(final HttpRoute route, final ManagedHttpClientConnection conn) {
final String id = Long.toString(COUNTER.getAndIncrement());
return new CPoolEntry(this.log, id, route, conn, this.timeToLive, this.tunit);
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolEntry.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolEntry.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolEntry.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolEntry.java Sat Mar 9 09:46:33 2013
@@ -33,7 +33,7 @@ import java.util.concurrent.TimeUnit;
import org.apache.commons.logging.Log;
import org.apache.http.HttpClientConnection;
import org.apache.http.annotation.ThreadSafe;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.pool.PoolEntry;
@@ -41,20 +41,39 @@ import org.apache.http.pool.PoolEntry;
* @since 4.3
*/
@ThreadSafe
-class CPoolEntry extends PoolEntry<HttpRoute, SocketClientConnection> {
+class CPoolEntry extends PoolEntry<HttpRoute, ManagedHttpClientConnection> {
private final Log log;
+ private volatile boolean routeComplete;
public CPoolEntry(
final Log log,
final String id,
final HttpRoute route,
- final SocketClientConnection conn,
+ final ManagedHttpClientConnection conn,
final long timeToLive, final TimeUnit tunit) {
super(id, route, conn, timeToLive, tunit);
this.log = log;
}
+ public void markRouteComplete() {
+ this.routeComplete = true;
+ }
+
+ public boolean isRouteComplete() {
+ return this.routeComplete;
+ }
+
+ public void closeConnection() throws IOException {
+ final HttpClientConnection conn = getConnection();
+ conn.close();
+ }
+
+ public void shutdownConnection() throws IOException {
+ final HttpClientConnection conn = getConnection();
+ conn.shutdown();
+ }
+
@Override
public boolean isExpired(final long now) {
final boolean expired = super.isExpired(now);
@@ -72,9 +91,8 @@ class CPoolEntry extends PoolEntry<HttpR
@Override
public void close() {
- final HttpClientConnection conn = getConnection();
try {
- conn.close();
+ closeConnection();
} catch (final IOException ex) {
this.log.debug("I/O error closing connection", ex);
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/CPoolProxy.java Sat Mar 9 09:46:33 2013
@@ -35,7 +35,7 @@ import java.lang.reflect.Proxy;
import org.apache.http.HttpClientConnection;
import org.apache.http.HttpConnection;
import org.apache.http.annotation.NotThreadSafe;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.protocol.HttpContext;
/**
@@ -88,23 +88,21 @@ class CPoolProxy implements InvocationHa
public void close() throws IOException {
final CPoolEntry local = this.poolEntry;
if (local != null) {
- final HttpClientConnection conn = local.getConnection();
- conn.close();
+ local.closeConnection();
}
}
public void shutdown() throws IOException {
final CPoolEntry local = this.poolEntry;
if (local != null) {
- final HttpClientConnection conn = local.getConnection();
- conn.shutdown();
+ local.shutdownConnection();
}
}
public boolean isOpen() {
- final HttpClientConnection conn = getConnection();
- if (conn != null) {
- return conn.isOpen();
+ final CPoolEntry local = this.poolEntry;
+ if (local != null) {
+ return !local.isClosed();
} else {
return false;
}
@@ -153,7 +151,7 @@ class CPoolProxy implements InvocationHa
final CPoolEntry poolEntry) {
return (HttpClientConnection) Proxy.newProxyInstance(
CPoolProxy.class.getClassLoader(),
- new Class<?>[] { SocketClientConnection.class, HttpContext.class },
+ new Class<?>[] { ManagedHttpClientConnection.class, HttpContext.class },
new CPoolProxy(poolEntry));
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnection.java Sat Mar 9 09:46:33 2013
@@ -46,7 +46,7 @@ import org.apache.http.HttpResponse;
import org.apache.http.HttpResponseFactory;
import org.apache.http.annotation.NotThreadSafe;
import org.apache.http.conn.OperatedClientConnection;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.impl.SocketHttpClientConnection;
import org.apache.http.io.HttpMessageParser;
import org.apache.http.io.SessionInputBuffer;
@@ -62,12 +62,12 @@ import org.apache.http.util.Args;
*
* @since 4.0
*
- * @deprecated (4.3) deprecated in favor of {@link SocketClientConnectionImpl}.
+ * @deprecated (4.3) use {@link ManagedHttpClientConnectionFactory}.
*/
@NotThreadSafe // connSecure, targetHost
@Deprecated
public class DefaultClientConnection extends SocketHttpClientConnection
- implements OperatedClientConnection, SocketClientConnection, HttpContext {
+ implements OperatedClientConnection, ManagedHttpClientConnection, HttpContext {
private final Log log = LogFactory.getLog(getClass());
private final Log headerLog = LogFactory.getLog("org.apache.http.headers");
@@ -93,6 +93,10 @@ public class DefaultClientConnection ext
this.attributes = new HashMap<String, Object>();
}
+ public String getId() {
+ return null;
+ }
+
public final HttpHost getTargetHost() {
return this.targetHost;
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/HttpClientConnectionOperator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/HttpClientConnectionOperator.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/HttpClientConnectionOperator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/HttpClientConnectionOperator.java Sat Mar 9 09:46:33 2013
@@ -45,7 +45,7 @@ import org.apache.http.conn.DnsResolver;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.conn.HttpHostConnectException;
import org.apache.http.conn.SchemePortResolver;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.conn.socket.PlainSocketFactory;
@@ -86,7 +86,7 @@ class HttpClientConnectionOperator {
}
public void connect(
- final SocketClientConnection conn,
+ final ManagedHttpClientConnection conn,
final HttpHost host,
final InetSocketAddress localAddress,
final int connectTimeout,
@@ -140,7 +140,7 @@ class HttpClientConnectionOperator {
}
public void upgrade(
- final SocketClientConnection conn,
+ final ManagedHttpClientConnection conn,
final HttpHost host,
final HttpContext context) throws IOException {
final HttpClientContext clientContext = HttpClientContext.adapt(context);
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedClientConnectionImpl.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedClientConnectionImpl.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedClientConnectionImpl.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedClientConnectionImpl.java Sat Mar 9 09:46:33 2013
@@ -56,7 +56,7 @@ import org.apache.http.util.Asserts;
/**
* @since 4.2
*
- * @deprecated (4.3) no longer used.
+ * @deprecated (4.3) use {@link ManagedHttpClientConnectionFactory}.
*/
@Deprecated
@NotThreadSafe
@@ -83,6 +83,10 @@ class ManagedClientConnectionImpl implem
this.duration = Long.MAX_VALUE;
}
+ public String getId() {
+ return null;
+ }
+
HttpPoolEntry getPoolEntry() {
return this.poolEntry;
}
Copied: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java (from r1450810, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionFactory.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java?p2=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java&p1=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionFactory.java&r1=1450810&r2=1454679&rev=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/DefaultClientConnectionFactory.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java Sat Mar 9 09:46:33 2013
@@ -31,13 +31,16 @@ import java.nio.charset.Charset;
import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.nio.charset.CodingErrorAction;
+import java.util.concurrent.atomic.AtomicLong;
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.annotation.Immutable;
import org.apache.http.config.ConnectionConfig;
import org.apache.http.conn.HttpConnectionFactory;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.impl.io.DefaultHttpRequestWriterFactory;
import org.apache.http.io.HttpMessageParserFactory;
import org.apache.http.io.HttpMessageWriterFactory;
@@ -47,17 +50,23 @@ import org.apache.http.util.Args;
* @since 4.3
*/
@Immutable
-public class DefaultClientConnectionFactory implements HttpConnectionFactory<SocketClientConnection> {
+public class ManagedHttpClientConnectionFactory implements HttpConnectionFactory<ManagedHttpClientConnection> {
+
+ private static final AtomicLong COUNTER = new AtomicLong();
private static final int DEFAULT_BUFSIZE = 8 * 1024;
- public static final DefaultClientConnectionFactory INSTANCE = new DefaultClientConnectionFactory();
+ public static final ManagedHttpClientConnectionFactory INSTANCE = new ManagedHttpClientConnectionFactory();
+
+ private final Log log = LogFactory.getLog(ManagedHttpClientConnectionImpl.class);
+ private final Log headerlog = LogFactory.getLog("org.apache.http.headers");
+ private final Log wirelog = LogFactory.getLog("org.apache.http.wire");
private final int bufferSize;
private final HttpMessageWriterFactory<HttpRequest> requestWriterFactory;
private final HttpMessageParserFactory<HttpResponse> responseParserFactory;
- public DefaultClientConnectionFactory(
+ public ManagedHttpClientConnectionFactory(
final int bufferSize,
final HttpMessageWriterFactory<HttpRequest> requestWriterFactory,
final HttpMessageParserFactory<HttpResponse> responseParserFactory) {
@@ -69,26 +78,26 @@ public class DefaultClientConnectionFact
DefaultHttpResponseParserFactory.INSTANCE;
}
- public DefaultClientConnectionFactory(
+ public ManagedHttpClientConnectionFactory(
final HttpMessageWriterFactory<HttpRequest> requestWriterFactory,
final HttpMessageParserFactory<HttpResponse> responseParserFactory) {
this(DEFAULT_BUFSIZE, requestWriterFactory, responseParserFactory);
}
- public DefaultClientConnectionFactory(
+ public ManagedHttpClientConnectionFactory(
final HttpMessageParserFactory<HttpResponse> responseParserFactory) {
this(null, responseParserFactory);
}
- public DefaultClientConnectionFactory(final int bufferSize) {
+ public ManagedHttpClientConnectionFactory(final int bufferSize) {
this(bufferSize, null, null);
}
- public DefaultClientConnectionFactory() {
+ public ManagedHttpClientConnectionFactory() {
this(DEFAULT_BUFSIZE, null, null);
}
- public SocketClientConnection create(final ConnectionConfig config) {
+ public ManagedHttpClientConnection create(final ConnectionConfig config) {
final ConnectionConfig cconfig = config != null ? config : ConnectionConfig.DEFAULT;
CharsetDecoder chardecoder = null;
CharsetEncoder charencoder = null;
@@ -105,10 +114,18 @@ public class DefaultClientConnectionFact
charencoder.onMalformedInput(malformedInputAction);
charencoder.onUnmappableCharacter(unmappableInputAction);
}
- return new SocketClientConnectionImpl(bufferSize,
- chardecoder, charencoder,
+ final String id = "http-outgoing-" + Long.toString(COUNTER.getAndIncrement());
+ return new ManagedHttpClientConnectionImpl(
+ id,
+ log,
+ headerlog,
+ wirelog,
+ bufferSize,
+ chardecoder,
+ charencoder,
cconfig.getMessageConstraints(),
- null, null,
+ null,
+ null,
requestWriterFactory,
responseParserFactory);
}
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionFactory.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java (from r1450810, httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/SocketClientConnectionImpl.java)
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java?p2=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java&p1=httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/SocketClientConnectionImpl.java&r1=1450810&r2=1454679&rev=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/SocketClientConnectionImpl.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java Sat Mar 9 09:46:33 2013
@@ -36,28 +36,24 @@ import java.nio.charset.CharsetDecoder;
import java.nio.charset.CharsetEncoder;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.atomic.AtomicLong;
import javax.net.ssl.SSLSession;
import javax.net.ssl.SSLSocket;
import org.apache.commons.logging.Log;
-import org.apache.commons.logging.LogFactory;
import org.apache.http.Header;
import org.apache.http.HttpRequest;
import org.apache.http.HttpResponse;
import org.apache.http.config.MessageConstraints;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.entity.ContentLengthStrategy;
import org.apache.http.impl.DefaultBHttpClientConnection;
import org.apache.http.io.HttpMessageParserFactory;
import org.apache.http.io.HttpMessageWriterFactory;
import org.apache.http.protocol.HttpContext;
-class SocketClientConnectionImpl extends DefaultBHttpClientConnection
- implements SocketClientConnection, HttpContext {
-
- private static final AtomicLong COUNT = new AtomicLong();
+class ManagedHttpClientConnectionImpl extends DefaultBHttpClientConnection
+ implements ManagedHttpClientConnection, HttpContext {
private final String id;
private final Log log;
@@ -67,7 +63,11 @@ class SocketClientConnectionImpl extends
private volatile boolean shutdown;
- public SocketClientConnectionImpl(
+ public ManagedHttpClientConnectionImpl(
+ final String id,
+ final Log log,
+ final Log headerlog,
+ final Log wirelog,
final int buffersize,
final CharsetDecoder chardecoder,
final CharsetEncoder charencoder,
@@ -79,15 +79,15 @@ class SocketClientConnectionImpl extends
super(buffersize, chardecoder, charencoder,
constraints, incomingContentStrategy, outgoingContentStrategy,
requestWriterFactory, responseParserFactory);
- this.id = "http-outgoing-" + COUNT.incrementAndGet();
- this.log = LogFactory.getLog(getClass());
- this.headerlog = LogFactory.getLog("org.apache.http.headers");
- this.wire = new Wire(LogFactory.getLog("org.apache.http.wire"), this.id);
+ this.id = id;
+ this.log = log;
+ this.headerlog = headerlog;
+ this.wire = new Wire(wirelog, this.id);
this.attributes = new ConcurrentHashMap<String, Object>();
}
- public SocketClientConnectionImpl(final int buffersize) {
- this(buffersize, null, null, null, null, null, null, null);
+ public String getId() {
+ return this.id;
}
@Override
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/ManagedHttpClientConnectionImpl.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java Sat Mar 9 09:46:33 2013
@@ -52,7 +52,7 @@ import org.apache.http.conn.DnsResolver;
import org.apache.http.conn.HttpClientConnectionManager;
import org.apache.http.conn.HttpConnectionFactory;
import org.apache.http.conn.SchemePortResolver;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.PlainSocketFactory;
@@ -120,25 +120,25 @@ public class PoolingHttpClientConnection
public PoolingHttpClientConnectionManager(
final Registry<ConnectionSocketFactory> socketFactoryRegistry,
- final HttpConnectionFactory<SocketClientConnection> connFactory) {
+ final HttpConnectionFactory<ManagedHttpClientConnection> connFactory) {
this(socketFactoryRegistry, connFactory, null);
}
public PoolingHttpClientConnectionManager(
- final HttpConnectionFactory<SocketClientConnection> connFactory) {
+ final HttpConnectionFactory<ManagedHttpClientConnection> connFactory) {
this(getDefaultRegistry(), connFactory, null);
}
public PoolingHttpClientConnectionManager(
final Registry<ConnectionSocketFactory> socketFactoryRegistry,
- final HttpConnectionFactory<SocketClientConnection> connFactory,
+ final HttpConnectionFactory<ManagedHttpClientConnection> connFactory,
final DnsResolver dnsResolver) {
this(socketFactoryRegistry, connFactory, null, dnsResolver, -1, TimeUnit.MILLISECONDS);
}
public PoolingHttpClientConnectionManager(
final Registry<ConnectionSocketFactory> socketFactoryRegistry,
- final HttpConnectionFactory<SocketClientConnection> connFactory,
+ final HttpConnectionFactory<ManagedHttpClientConnection> connFactory,
final SchemePortResolver schemePortResolver,
final DnsResolver dnsResolver,
final long timeToLive, final TimeUnit tunit) {
@@ -261,7 +261,7 @@ public class PoolingHttpClientConnection
if (entry == null) {
return;
}
- final SocketClientConnection conn = entry.getConnection();
+ final ManagedHttpClientConnection conn = entry.getConnection();
try {
if (conn.isOpen()) {
entry.setState(state);
@@ -277,7 +277,7 @@ public class PoolingHttpClientConnection
}
}
} finally {
- this.pool.release(entry, conn.isOpen());
+ this.pool.release(entry, conn.isOpen() && entry.isRouteComplete());
if (this.log.isDebugEnabled()) {
this.log.debug("Connection released: " + format(entry) + formatStats(entry.getRoute()));
}
@@ -287,16 +287,23 @@ public class PoolingHttpClientConnection
public void connect(
final HttpClientConnection managedConn,
- final HttpHost host,
- final InetSocketAddress localAddress,
+ final HttpRoute route,
final int connectTimeout,
final HttpContext context) throws IOException {
- Args.notNull(managedConn, "Connection");
- SocketClientConnection conn;
+ Args.notNull(managedConn, "Managed Connection");
+ Args.notNull(route, "HTTP route");
+ ManagedHttpClientConnection conn;
synchronized (managedConn) {
final CPoolEntry entry = CPoolProxy.getPoolEntry(managedConn);
conn = entry.getConnection();
}
+ final HttpHost host;
+ if (route.getProxyHost() != null) {
+ host = route.getProxyHost();
+ } else {
+ host = route.getTargetHost();
+ }
+ final InetSocketAddress localAddress = route.getLocalSocketAddress();
SocketConfig socketConfig = this.configData.getSocketConfig(host);
if (socketConfig == null) {
socketConfig = this.configData.getDefaultSocketConfig();
@@ -310,15 +317,28 @@ public class PoolingHttpClientConnection
public void upgrade(
final HttpClientConnection managedConn,
- final HttpHost host,
+ final HttpRoute route,
final HttpContext context) throws IOException {
- Args.notNull(managedConn, "Connection");
- SocketClientConnection conn;
+ Args.notNull(managedConn, "Managed Connection");
+ Args.notNull(route, "HTTP route");
+ ManagedHttpClientConnection conn;
synchronized (managedConn) {
final CPoolEntry entry = CPoolProxy.getPoolEntry(managedConn);
conn = entry.getConnection();
}
- this.connectionOperator.upgrade(conn, host, context);
+ this.connectionOperator.upgrade(conn, route.getTargetHost(), context);
+ }
+
+ public void routeComplete(
+ final HttpClientConnection managedConn,
+ final HttpRoute route,
+ final HttpContext context) throws IOException {
+ Args.notNull(managedConn, "Managed Connection");
+ Args.notNull(route, "HTTP route");
+ synchronized (managedConn) {
+ final CPoolEntry entry = CPoolProxy.getPoolEntry(managedConn);
+ entry.markRouteComplete();
+ }
}
public void shutdown() {
@@ -454,21 +474,21 @@ public class PoolingHttpClientConnection
}
- static class InternalConnectionFactory implements ConnFactory<HttpRoute, SocketClientConnection> {
+ static class InternalConnectionFactory implements ConnFactory<HttpRoute, ManagedHttpClientConnection> {
private final ConfigData configData;
- private final HttpConnectionFactory<SocketClientConnection> connFactory;
+ private final HttpConnectionFactory<ManagedHttpClientConnection> connFactory;
InternalConnectionFactory(
final ConfigData configData,
- final HttpConnectionFactory<SocketClientConnection> connFactory) {
+ final HttpConnectionFactory<ManagedHttpClientConnection> connFactory) {
super();
this.configData = configData != null ? configData : new ConfigData();
this.connFactory = connFactory != null ? connFactory :
- DefaultClientConnectionFactory.INSTANCE;
+ ManagedHttpClientConnectionFactory.INSTANCE;
}
- public SocketClientConnection create(final HttpRoute route) throws IOException {
+ public ManagedHttpClientConnection create(final HttpRoute route) throws IOException {
ConnectionConfig config = null;
if (route.getProxyHost() != null) {
config = this.configData.getConnectionConfig(route.getProxyHost());
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MainClientExec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MainClientExec.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MainClientExec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MainClientExec.java Sat Mar 9 09:46:33 2013
@@ -360,7 +360,7 @@ public class MainClientExec implements C
case HttpRouteDirector.CONNECT_TARGET:
this.connManager.connect(
managedConn,
- route.getTargetHost(), route.getLocalSocketAddress(),
+ route,
timeout > 0 ? timeout : 0,
context);
tracker.connectTarget(route.isSecure());
@@ -368,7 +368,7 @@ public class MainClientExec implements C
case HttpRouteDirector.CONNECT_PROXY:
this.connManager.connect(
managedConn,
- route.getProxyHost(), route.getLocalSocketAddress(),
+ route,
timeout > 0 ? timeout : 0,
context);
final HttpHost proxy = route.getProxyHost();
@@ -393,14 +393,15 @@ public class MainClientExec implements C
} break;
case HttpRouteDirector.LAYER_PROTOCOL:
- this.connManager.upgrade(managedConn, route.getTargetHost(), context);
+ this.connManager.upgrade(managedConn, route, context);
+ tracker.layerProtocol(route.isSecure());
break;
case HttpRouteDirector.UNREACHABLE:
throw new HttpException("Unable to establish route: " +
"planned = " + route + "; current = " + fact);
case HttpRouteDirector.COMPLETE:
- // do nothing
+ this.connManager.routeComplete(managedConn, route, context);
break;
default:
throw new IllegalStateException("Unknown step indicator "
@@ -441,7 +442,7 @@ public class MainClientExec implements C
if (!managedConn.isOpen()) {
this.connManager.connect(
managedConn,
- route.getProxyHost(), route.getLocalSocketAddress(),
+ route,
timeout > 0 ? timeout : 0,
context);
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MinimalClientExec.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MinimalClientExec.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MinimalClientExec.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/execchain/MinimalClientExec.java Sat Mar 9 09:46:33 2013
@@ -154,9 +154,10 @@ public class MinimalClientExec implement
final int timeout = config.getConnectTimeout();
this.connManager.connect(
managedConn,
- route.getTargetHost(), route.getLocalSocketAddress(),
+ route,
timeout > 0 ? timeout : 0,
context);
+ this.connManager.routeComplete(managedConn, route, context);
} else {
final int timeout = config.getSocketTimeout();
if (timeout >= 0) {
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java Sat Mar 9 09:46:33 2013
@@ -296,8 +296,7 @@ public class TestAbortHandling extends I
final HttpClientConnectionManager connmgr = Mockito.mock(HttpClientConnectionManager.class);
Mockito.doThrow(new ConnectException()).when(connmgr).connect(
Mockito.any(HttpClientConnection.class),
- Mockito.any(HttpHost.class),
- Mockito.any(InetSocketAddress.class),
+ Mockito.any(HttpRoute.class),
Mockito.anyInt(),
Mockito.any(HttpContext.class));
@@ -464,6 +463,28 @@ public class TestAbortHandling extends I
public void connect(
final HttpClientConnection conn,
+ final HttpRoute route,
+ final int connectTimeout,
+ final HttpContext context) throws IOException {
+ throw new UnsupportedOperationException("just a mockup");
+ }
+
+ public void upgrade(
+ final HttpClientConnection conn,
+ final HttpRoute route,
+ final HttpContext context) throws IOException {
+ throw new UnsupportedOperationException("just a mockup");
+ }
+
+ public void routeComplete(
+ final HttpClientConnection conn,
+ final HttpRoute route,
+ final HttpContext context) throws IOException {
+ throw new UnsupportedOperationException("just a mockup");
+ }
+
+ public void connect(
+ final HttpClientConnection conn,
final HttpHost host,
final InetSocketAddress localAddress,
final int connectTimeout,
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestConnectionManagement.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestConnectionManagement.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestConnectionManagement.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestConnectionManagement.java Sat Mar 9 09:46:33 2013
@@ -113,7 +113,8 @@ public class TestConnectionManagement ex
final HttpContext context = new BasicHttpContext();
HttpClientConnection conn = getConnection(mgr, route);
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, target);
@@ -147,7 +148,8 @@ public class TestConnectionManagement ex
conn = getConnection(mgr, route);
Assert.assertFalse("connection should have been closed", conn.isOpen());
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
// repeat the communication, no need to prepare the request again
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
@@ -201,7 +203,8 @@ public class TestConnectionManagement ex
final HttpContext context = new BasicHttpContext();
HttpClientConnection conn = getConnection(mgr, route);
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, target);
@@ -236,7 +239,8 @@ public class TestConnectionManagement ex
Assert.assertFalse("connection should have been closed", conn.isOpen());
// repeat the communication, no need to prepare the request again
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
response = exec.execute(request, conn, context);
@@ -271,7 +275,8 @@ public class TestConnectionManagement ex
Assert.assertTrue("connection should have been closed", !conn.isOpen());
// repeat the communication, no need to prepare the request again
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
response = exec.execute(request, conn, context);
@@ -298,7 +303,8 @@ public class TestConnectionManagement ex
final HttpContext context = new BasicHttpContext();
final HttpClientConnection conn = getConnection(mgr, route);
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
Assert.assertEquals(1, mgr.getTotalStats().getLeased());
Assert.assertEquals(1, mgr.getStats(route).getLeased());
@@ -338,7 +344,8 @@ public class TestConnectionManagement ex
final HttpContext context = new BasicHttpContext();
final HttpClientConnection conn = getConnection(mgr, route);
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
Assert.assertEquals(1, mgr.getTotalStats().getLeased());
Assert.assertEquals(1, mgr.getStats(route).getLeased());
@@ -386,7 +393,8 @@ public class TestConnectionManagement ex
new BasicHttpRequest("GET", uri, HttpVersion.HTTP_1_1);
HttpClientConnection conn = getConnection(mgr, route);
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
context.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);
context.setAttribute(ExecutionContext.HTTP_TARGET_HOST, target);
@@ -458,7 +466,8 @@ public class TestConnectionManagement ex
abortingThread.start();
try {
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
Assert.fail("expected SocketException");
} catch(final SocketException expected) {}
@@ -512,7 +521,8 @@ public class TestConnectionManagement ex
abortingThread.start();
try {
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
Assert.fail("IOException expected");
} catch(final IOException expected) {
}
@@ -567,7 +577,8 @@ public class TestConnectionManagement ex
abortingThread.start();
try {
- mgr.connect(conn, route.getTargetHost(), route.getLocalSocketAddress(), 0, context);
+ mgr.connect(conn, route, 0, context);
+ mgr.routeComplete(conn, route, context);
Assert.fail("IOException expected");
} catch(final IOException expected) {
}
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestBasicHttpClientConnectionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestBasicHttpClientConnectionManager.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestBasicHttpClientConnectionManager.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestBasicHttpClientConnectionManager.java Sat Mar 9 09:46:33 2013
@@ -35,7 +35,7 @@ import org.apache.http.config.Connection
import org.apache.http.config.Lookup;
import org.apache.http.conn.ConnectionRequest;
import org.apache.http.conn.HttpConnectionFactory;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.junit.Assert;
@@ -45,15 +45,15 @@ import org.mockito.Mockito;
public class TestBasicHttpClientConnectionManager {
- private SocketClientConnection conn;
- private HttpConnectionFactory<SocketClientConnection> connFactory;
+ private ManagedHttpClientConnection conn;
+ private HttpConnectionFactory<ManagedHttpClientConnection> connFactory;
private Lookup<ConnectionSocketFactory> socketFactoryRegistry;
private BasicHttpClientConnectionManager mgr;
@SuppressWarnings("unchecked")
@Before
public void setup() throws Exception {
- conn = Mockito.mock(SocketClientConnection.class);
+ conn = Mockito.mock(ManagedHttpClientConnection.class);
connFactory = Mockito.mock(HttpConnectionFactory.class);
socketFactoryRegistry = Mockito.mock(Lookup.class);
mgr = new BasicHttpClientConnectionManager(socketFactoryRegistry, connFactory);
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestHttpClientConnectionOperator.java Sat Mar 9 09:46:33 2013
@@ -37,7 +37,7 @@ import org.apache.http.config.SocketConf
import org.apache.http.conn.ConnectTimeoutException;
import org.apache.http.conn.DnsResolver;
import org.apache.http.conn.SchemePortResolver;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.conn.socket.LayeredConnectionSocketFactory;
import org.apache.http.protocol.BasicHttpContext;
@@ -48,7 +48,7 @@ import org.mockito.Mockito;
public class TestHttpClientConnectionOperator {
- private SocketClientConnection conn;
+ private ManagedHttpClientConnection conn;
private Socket socket;
private ConnectionSocketFactory plainSocketFactory;
private LayeredConnectionSocketFactory sslSocketFactory;
@@ -60,7 +60,7 @@ public class TestHttpClientConnectionOpe
@SuppressWarnings("unchecked")
@Before
public void setup() throws Exception {
- conn = Mockito.mock(SocketClientConnection.class);
+ conn = Mockito.mock(ManagedHttpClientConnection.class);
socket = Mockito.mock(Socket.class);
plainSocketFactory = Mockito.mock(ConnectionSocketFactory.class);
sslSocketFactory = Mockito.mock(LayeredConnectionSocketFactory.class);
Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java?rev=1454679&r1=1454678&r2=1454679&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/conn/TestPoolingHttpClientConnectionManager.java Sat Mar 9 09:46:33 2013
@@ -40,7 +40,7 @@ import org.apache.http.conn.ConnectionPo
import org.apache.http.conn.ConnectionRequest;
import org.apache.http.conn.DnsResolver;
import org.apache.http.conn.SchemePortResolver;
-import org.apache.http.conn.SocketClientConnection;
+import org.apache.http.conn.ManagedHttpClientConnection;
import org.apache.http.conn.routing.HttpRoute;
import org.apache.http.conn.socket.ConnectionSocketFactory;
import org.apache.http.protocol.HttpContext;
@@ -54,7 +54,7 @@ import org.mockito.Mockito;
*/
public class TestPoolingHttpClientConnectionManager {
- private SocketClientConnection conn;
+ private ManagedHttpClientConnection conn;
private Socket socket;
private ConnectionSocketFactory plainSocketFactory;
private Lookup<ConnectionSocketFactory> socketFactoryRegistry;
@@ -67,7 +67,7 @@ public class TestPoolingHttpClientConnec
@SuppressWarnings("unchecked")
@Before
public void setup() throws Exception {
- conn = Mockito.mock(SocketClientConnection.class);
+ conn = Mockito.mock(ManagedHttpClientConnection.class);
socket = Mockito.mock(Socket.class);
plainSocketFactory = Mockito.mock(ConnectionSocketFactory.class);
socketFactoryRegistry = Mockito.mock(Lookup.class);
@@ -86,12 +86,42 @@ public class TestPoolingHttpClientConnec
final CPoolEntry entry = new CPoolEntry(LogFactory.getLog(getClass()), "id", route, conn,
-1, TimeUnit.MILLISECONDS);
+ entry.markRouteComplete();
Mockito.when(future.isCancelled()).thenReturn(Boolean.FALSE);
Mockito.when(socketFactoryRegistry.lookup("http")).thenReturn(plainSocketFactory);
Mockito.when(schemePortResolver.resolve(target)).thenReturn(80);
Mockito.when(plainSocketFactory.createSocket(Mockito.<HttpContext>any())).thenReturn(socket);
+ Mockito.when(conn.isOpen()).thenReturn(true);
+ Mockito.when(future.isCancelled()).thenReturn(false);
+ Mockito.when(future.get(1, TimeUnit.SECONDS)).thenReturn(entry);
+ Mockito.when(pool.lease(route, null, null)).thenReturn(future);
+
+ final ConnectionRequest connRequest1 = mgr.requestConnection(route, null);
+ final HttpClientConnection conn1 = connRequest1.get(1, TimeUnit.SECONDS);
+ Assert.assertNotNull(conn1);
+ Assert.assertNotSame(conn, conn1);
+
+ mgr.releaseConnection(conn1, null, 0, TimeUnit.MILLISECONDS);
+
+ Mockito.verify(pool).release(entry, true);
+ }
+
+ @Test
+ public void testReleaseRouteIncomplete() throws Exception {
+ final HttpHost target = new HttpHost("localhost");
+ final HttpRoute route = new HttpRoute(target);
+
+ final CPoolEntry entry = new CPoolEntry(LogFactory.getLog(getClass()), "id", route, conn,
+ -1, TimeUnit.MILLISECONDS);
+
+ Mockito.when(future.isCancelled()).thenReturn(Boolean.FALSE);
+ Mockito.when(socketFactoryRegistry.lookup("http")).thenReturn(plainSocketFactory);
+ Mockito.when(schemePortResolver.resolve(target)).thenReturn(80);
+ Mockito.when(plainSocketFactory.createSocket(Mockito.<HttpContext>any())).thenReturn(socket);
+
+ Mockito.when(conn.isOpen()).thenReturn(true);
Mockito.when(future.isCancelled()).thenReturn(false);
Mockito.when(future.get(1, TimeUnit.SECONDS)).thenReturn(entry);
Mockito.when(pool.lease(route, null, null)).thenReturn(future);
@@ -99,7 +129,6 @@ public class TestPoolingHttpClientConnec
final ConnectionRequest connRequest1 = mgr.requestConnection(route, null);
final HttpClientConnection conn1 = connRequest1.get(1, TimeUnit.SECONDS);
Assert.assertNotNull(conn1);
- Assert.assertFalse(conn1.isOpen());
Assert.assertNotSame(conn, conn1);
mgr.releaseConnection(conn1, null, 0, TimeUnit.MILLISECONDS);
@@ -114,6 +143,7 @@ public class TestPoolingHttpClientConnec
final CPoolEntry entry = new CPoolEntry(LogFactory.getLog(getClass()), "id", route, conn,
-1, TimeUnit.MILLISECONDS);
+ entry.markRouteComplete();
Mockito.when(future.isCancelled()).thenReturn(Boolean.TRUE);
Mockito.when(future.get(1, TimeUnit.SECONDS)).thenReturn(entry);
@@ -143,6 +173,7 @@ public class TestPoolingHttpClientConnec
final CPoolEntry entry = Mockito.spy(new CPoolEntry(LogFactory.getLog(getClass()), "id", route, conn,
-1, TimeUnit.MILLISECONDS));
+ entry.markRouteComplete();
Mockito.when(future.isCancelled()).thenReturn(Boolean.FALSE);
Mockito.when(future.get(1, TimeUnit.SECONDS)).thenReturn(entry);
@@ -168,6 +199,7 @@ public class TestPoolingHttpClientConnec
final CPoolEntry entry = Mockito.spy(new CPoolEntry(LogFactory.getLog(getClass()), "id", route, conn,
-1, TimeUnit.MILLISECONDS));
+ entry.markRouteComplete();
Mockito.when(future.isCancelled()).thenReturn(Boolean.FALSE);
Mockito.when(future.get(1, TimeUnit.SECONDS)).thenReturn(entry);