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 2014/04/15 12:53:50 UTC

svn commit: r1587507 - in /httpcomponents/httpclient/trunk/httpclient/src: main/java/org/apache/http/impl/client/ test/java/org/apache/http/impl/client/

Author: olegk
Date: Tue Apr 15 10:53:49 2014
New Revision: 1587507

URL: http://svn.apache.org/r1587507
Log:
Support for shared connection managers

Modified:
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpClientBuilder.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/InternalHttpClient.java
    httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestInternalHttpClient.java

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpClientBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpClientBuilder.java?rev=1587507&r1=1587506&r2=1587507&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpClientBuilder.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/HttpClientBuilder.java Tue Apr 15 10:53:49 2014
@@ -28,6 +28,7 @@
 package org.apache.http.impl.client;
 
 import java.io.Closeable;
+import java.io.IOException;
 import java.net.ProxySelector;
 import java.util.ArrayList;
 import java.util.Collection;
@@ -160,6 +161,7 @@ public class HttpClientBuilder {
     private LayeredConnectionSocketFactory sslSocketFactory;
     private SSLContext sslcontext;
     private HttpClientConnectionManager connManager;
+    private boolean connManagerShared;
     private SchemePortResolver schemePortResolver;
     private ConnectionReuseStrategy reuseStrategy;
     private ConnectionKeepAliveStrategy keepAliveStrategy;
@@ -332,7 +334,26 @@ public class HttpClientBuilder {
      */
     public final HttpClientBuilder setConnectionManager(
             final HttpClientConnectionManager connManager) {
+        return setConnectionManager(connManager, false);
+    }
+
+    /**
+     * Assigns {@link HttpClientConnectionManager} instance.
+     * <p/>
+     * If the connection manager is shared its life-cycle is expected
+     * to be managed by the caller and it will not be shut down
+     * if the client is closed.
+     *
+     * @param connManager connection manager
+     * @param shared defines whether or not the connection manager can be shared
+     *  by multiple clients.
+     *
+     * @since 4.4
+     */
+    public final HttpClientBuilder setConnectionManager(
+            final HttpClientConnectionManager connManager, final boolean shared) {
         this.connManager = connManager;
+        this.connManagerShared = shared;
         return this;
     }
 
@@ -990,6 +1011,22 @@ public class HttpClientBuilder {
             }
         }
 
+        List<Closeable> closeablesCopy = closeables != null ? new ArrayList<Closeable>(closeables) : null;
+        if (!this.connManagerShared) {
+            if (closeablesCopy == null) {
+                closeablesCopy = new ArrayList<Closeable>(1);
+            }
+            final HttpClientConnectionManager cm = connManagerCopy;
+            closeablesCopy.add(new Closeable() {
+
+                @Override
+                public void close() throws IOException {
+                    cm.shutdown();
+                }
+
+            });
+        }
+
         return new InternalHttpClient(
                 execChain,
                 connManagerCopy,
@@ -999,7 +1036,7 @@ public class HttpClientBuilder {
                 defaultCookieStore,
                 defaultCredentialsProvider,
                 defaultRequestConfig != null ? defaultRequestConfig : RequestConfig.DEFAULT,
-                closeables != null ? new ArrayList<Closeable>(closeables) : null);
+                closeablesCopy);
     }
 
 }

Modified: httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/InternalHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/InternalHttpClient.java?rev=1587507&r1=1587506&r2=1587507&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/InternalHttpClient.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/client/InternalHttpClient.java Tue Apr 15 10:53:49 2014
@@ -189,7 +189,6 @@ class InternalHttpClient extends Closeab
 
     @Override
     public void close() {
-        this.connManager.shutdown();
         if (this.closeables != null) {
             for (final Closeable closeable: this.closeables) {
                 try {

Modified: httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestInternalHttpClient.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestInternalHttpClient.java?rev=1587507&r1=1587506&r2=1587507&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestInternalHttpClient.java (original)
+++ httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/TestInternalHttpClient.java Tue Apr 15 10:53:49 2014
@@ -188,7 +188,6 @@ public class TestInternalHttpClient {
     public void testClientClose() throws Exception {
         client.close();
 
-        Mockito.verify(connManager).shutdown();
         Mockito.verify(closeable1).close();
         Mockito.verify(closeable2).close();
     }
@@ -199,7 +198,6 @@ public class TestInternalHttpClient {
 
         client.close();
 
-        Mockito.verify(connManager).shutdown();
         Mockito.verify(closeable1).close();
         Mockito.verify(closeable2).close();
     }