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 2012/12/19 18:12:04 UTC

svn commit: r1423960 - in /httpcomponents/httpclient/trunk: httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ httpclient/src/main/java/org/apache/http/impl/client/ httpclient/src/main/java/org/apache/http/impl/conn/ httpclient/src/test/...

Author: olegk
Date: Wed Dec 19 17:12:03 2012
New Revision: 1423960

URL: http://svn.apache.org/viewvc?rev=1423960&view=rev
Log:
Authmatically shut down file system based cache storage instantiated by CachingHttpClientBuilder

Modified:
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClientBuilder.java
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ManagedHttpCacheStorage.java
    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/main/java/org/apache/http/impl/conn/BasicHttpClientConnectionManager.java
    httpcomponents/httpclient/trunk/httpclient/src/main/java/org/apache/http/impl/conn/PoolingHttpClientConnectionManager.java
    httpcomponents/httpclient/trunk/httpclient/src/test/java/org/apache/http/impl/client/integration/TestAbortHandling.java

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClientBuilder.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClientBuilder.java?rev=1423960&r1=1423959&r2=1423960&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClientBuilder.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClientBuilder.java Wed Dec 19 17:12:03 2012
@@ -88,6 +88,13 @@ public class CachingHttpClientBuilder ex
         }
         HttpCacheStorage storage = this.storage;
         if (storage == null) {
+            if (this.cacheDir == null) {
+                storage = new BasicHttpCacheStorage(cacheConfig);
+            } else {
+                ManagedHttpCacheStorage managedStorage = new ManagedHttpCacheStorage(cacheConfig);
+                addCloseable(managedStorage);
+                storage = managedStorage;
+            }
             storage = new BasicHttpCacheStorage(cacheConfig);
         }
         return new CachingExec(mainExec,

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ManagedHttpCacheStorage.java
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ManagedHttpCacheStorage.java?rev=1423960&r1=1423959&r2=1423960&view=diff
==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ManagedHttpCacheStorage.java (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/ManagedHttpCacheStorage.java Wed Dec 19 17:12:03 2012
@@ -26,6 +26,7 @@
  */
 package org.apache.http.impl.client.cache;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.lang.ref.PhantomReference;
 import java.lang.ref.ReferenceQueue;
@@ -54,7 +55,7 @@ import org.apache.http.util.Args;
  * @since 4.1
  */
 @ThreadSafe
-public class ManagedHttpCacheStorage implements HttpCacheStorage {
+public class ManagedHttpCacheStorage implements HttpCacheStorage, Closeable {
 
     private final CacheMap entries;
     private final ReferenceQueue<HttpCacheEntry> morque;
@@ -157,4 +158,8 @@ public class ManagedHttpCacheStorage imp
         }
     }
 
+    public void close() {
+        shutdown();
+    }
+
 }

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=1423960&r1=1423959&r2=1423960&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 Wed Dec 19 17:12:03 2012
@@ -27,10 +27,13 @@
 
 package org.apache.http.impl.client;
 
+import java.io.Closeable;
 import java.net.ProxySelector;
+import java.util.ArrayList;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.LinkedList;
+import java.util.List;
 import java.util.Map;
 
 import org.apache.http.ConnectionReuseStrategy;
@@ -181,6 +184,8 @@ public class HttpClientBuilder {
     private int maxConnTotal = 0;
     private int maxConnPerRoute = 0;
 
+    private List<Closeable> closeables;
+
     public static HttpClientBuilder create() {
         return new HttpClientBuilder();
     }
@@ -431,6 +436,17 @@ public class HttpClientBuilder {
         return protocolExec;
     }
 
+    protected void addCloseable(final Closeable closeable) {
+        if (closeable == null) {
+            return;
+        }
+        if (closeables == null) {
+            closeables = new ArrayList<Closeable>();
+        }
+        closeables.add(closeable);
+    }
+
+
     public CloseableHttpClient build() {
         // Create main request executor
         HttpRequestExecutor requestExec = this.requestExec;
@@ -679,7 +695,8 @@ public class HttpClientBuilder {
                 authSchemeRegistry,
                 defaultCookieStore,
                 defaultCredentialsProvider,
-                defaultRequestConfig != null ? defaultRequestConfig : RequestConfig.DEFAULT);
+                defaultRequestConfig != null ? defaultRequestConfig : RequestConfig.DEFAULT,
+                closeables != null ? new ArrayList<Closeable>(closeables) : null);
     }
 
 }

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=1423960&r1=1423959&r2=1423960&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 Wed Dec 19 17:12:03 2012
@@ -27,9 +27,13 @@
 
 package org.apache.http.impl.client;
 
+import java.io.Closeable;
 import java.io.IOException;
+import java.util.List;
 import java.util.concurrent.TimeUnit;
 
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
 import org.apache.http.HttpException;
 import org.apache.http.HttpHost;
 import org.apache.http.HttpRequest;
@@ -72,6 +76,8 @@ import org.apache.http.util.Asserts;
 @SuppressWarnings("deprecation")
 class InternalHttpClient extends CloseableHttpClient {
 
+    private final Log log = LogFactory.getLog(getClass());
+
     private final ClientExecChain execChain;
     private final HttpClientConnectionManager connManager;
     private final HttpRoutePlanner routePlanner;
@@ -80,6 +86,7 @@ class InternalHttpClient extends Closeab
     private final CookieStore cookieStore;
     private final CredentialsProvider credentialsProvider;
     private final RequestConfig defaultConfig;
+    private final List<Closeable> closeables;
     private final HttpParams params;
 
     public InternalHttpClient(
@@ -90,7 +97,8 @@ class InternalHttpClient extends Closeab
             final Lookup<AuthSchemeProvider> authSchemeRegistry,
             final CookieStore cookieStore,
             final CredentialsProvider credentialsProvider,
-            final RequestConfig defaultConfig) {
+            final RequestConfig defaultConfig,
+            final List<Closeable> closeables) {
         super();
         Args.notNull(execChain, "HTTP client exec chain");
         Args.notNull(connManager, "HTTP connection manager");
@@ -103,6 +111,7 @@ class InternalHttpClient extends Closeab
         this.cookieStore = cookieStore;
         this.credentialsProvider = credentialsProvider;
         this.defaultConfig = defaultConfig;
+        this.closeables = closeables;
         this.params = new BasicHttpParams();
     }
 
@@ -179,6 +188,15 @@ class InternalHttpClient extends Closeab
 
     public void close() {
         this.connManager.shutdown();
+        if (this.closeables != null) {
+            for (Closeable closeable: this.closeables) {
+                try {
+                    closeable.close();
+                } catch (IOException ex) {
+                    this.log.error(ex.getMessage(), ex);
+                }
+            }
+        }
     }
 
     public ClientConnectionManager getConnectionManager() {

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=1423960&r1=1423959&r2=1423960&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 Wed Dec 19 17:12:03 2012
@@ -27,6 +27,7 @@
 
 package org.apache.http.impl.conn;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
@@ -76,7 +77,7 @@ import org.apache.http.util.LangUtils;
  * @since 4.3
  */
 @ThreadSafe
-public class BasicHttpClientConnectionManager implements HttpClientConnectionManager {
+public class BasicHttpClientConnectionManager implements HttpClientConnectionManager, Closeable {
 
     private final Log log = LogFactory.getLog(getClass());
 
@@ -155,6 +156,10 @@ public class BasicHttpClientConnectionMa
         }
     }
 
+    public void close() {
+        shutdown();
+    }
+
     HttpRoute getRoute() {
         return route;
     }

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=1423960&r1=1423959&r2=1423960&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 Wed Dec 19 17:12:03 2012
@@ -26,6 +26,7 @@
 
 package org.apache.http.impl.conn;
 
+import java.io.Closeable;
 import java.io.IOException;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
@@ -83,7 +84,7 @@ import org.apache.http.util.Asserts;
  * @since 4.3
  */
 @ThreadSafe
-public class PoolingHttpClientConnectionManager implements HttpClientConnectionManager {
+public class PoolingHttpClientConnectionManager implements HttpClientConnectionManager, Closeable {
 
     private final Log log = LogFactory.getLog(getClass());
 
@@ -159,6 +160,10 @@ public class PoolingHttpClientConnection
         }
     }
 
+    public void close() {
+        shutdown();
+    }
+
     private String format(final HttpRoute route, final Object state) {
         StringBuilder buf = new StringBuilder();
         buf.append("[route: ").append(route).append("]");

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=1423960&r1=1423959&r2=1423960&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 Wed Dec 19 17:12:03 2012
@@ -447,6 +447,9 @@ public class TestAbortHandling extends I
         public void shutdown() {
         }
 
+        public void close() {
+        }
+
         public void releaseConnection(
                 final HttpClientConnection conn,
                 final Object newState,