[utilities COMMIT] in /java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/httpclient: FileCaching...

noreply at shibboleth.net noreply at shibboleth.net
Sat Dec 13 15:36:18 EST 2014


Author: putmanb
Date: Sat Dec 13 15:36:17 2014
New Revision: 706

URL: http://svn.shibboleth.net/view/utilities?rev=706&view=rev
Log:
Update FileCachingHttpClientBuilder to produce an HttpClient proxy instance which also wraps the instance's ManagedHttpCacheStorage, and handles running its scheduled maintenance via a TimerTask and its lifecycle via itself being initializable and destructable.

Modified:
    java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java
    java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/httpclient/HttpClientBuilder.java

Modified: java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java
URL: http://svn.shibboleth.net/view/utilities/java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java?rev=706&r1=705&r2=706&view=diff
==============================================================================
--- java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java (original)
+++ java-support/trunk/src/main/java/net/shibboleth/utilities/java/support/httpclient/FileCachingHttpClientBuilder.java Sat Dec 13 15:36:17 2014
@@ -19,17 +19,35 @@
 
 import java.io.File;
 import java.io.IOException;
+import java.util.Timer;
+import java.util.TimerTask;
 
 import javax.annotation.Nonnull;
 
+import net.shibboleth.utilities.java.support.annotation.Duration;
 import net.shibboleth.utilities.java.support.annotation.constraint.NotEmpty;
+import net.shibboleth.utilities.java.support.component.ComponentInitializationException;
+import net.shibboleth.utilities.java.support.component.ComponentSupport;
+import net.shibboleth.utilities.java.support.component.DestructableComponent;
+import net.shibboleth.utilities.java.support.component.InitializableComponent;
 import net.shibboleth.utilities.java.support.logic.Constraint;
 import net.shibboleth.utilities.java.support.primitive.StringSupport;
 
+import org.apache.http.HttpHost;
+import org.apache.http.HttpRequest;
+import org.apache.http.client.ClientProtocolException;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.CloseableHttpResponse;
+import org.apache.http.conn.ClientConnectionManager;
+import org.apache.http.impl.client.CloseableHttpClient;
 import org.apache.http.impl.client.cache.CacheConfig;
 import org.apache.http.impl.client.cache.CachingHttpClientBuilder;
 import org.apache.http.impl.client.cache.FileResourceFactory;
 import org.apache.http.impl.client.cache.ManagedHttpCacheStorage;
+import org.apache.http.params.HttpParams;
+import org.apache.http.protocol.HttpContext;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 
 /**
  * An {@link org.apache.http.client.HttpClient} builder that supports RFC 2616 caching.
@@ -82,6 +100,12 @@
     /** The maximum response body size, in bytes, that will be eligible for caching. Default: 10485760 (10 megabytes) */
     private long maxCacheEntrySize;
     
+    /** Interval at which the storage maintenance task whould run. */
+    @Duration private long maintentanceTaskInterval;
+    
+    /** The current managed storage instance. */
+    private ManagedHttpCacheStorage managedStorage;
+    
     /**
      * Constructor.
      */
@@ -99,6 +123,8 @@
         cacheDir = new File(System.getProperty("java.io.tmpdir") + File.separator + "wwwcache");
         maxCacheEntries = 100;
         maxCacheEntrySize = 10485760;
+        // 30 minutes
+        maintentanceTaskInterval = 30*60*1000;
     }
 
     /**
@@ -166,6 +192,25 @@
      */
     public void setMaxCacheEntrySize(long size) {
         maxCacheEntrySize = (int) Constraint.isGreaterThan(0, size, "Maximum cache entry size must be greater than 0");
+    }
+
+    /**
+     * Get the interval at which the storage maintenance task should run.
+     * 
+     * @return the maintenance task interval, in milliseconds
+     */
+    public long getMaintentanceTaskInterval() {
+        return maintentanceTaskInterval;
+    }
+
+    /**
+     * Set the interval at which the storage maintenance task should run.
+     * 
+     * @param value the new maintenance task interval, in milliseconds
+     */
+    public void setMaintentanceTaskInterval(long value) {
+        maintentanceTaskInterval = Constraint.isGreaterThan(0, value, 
+                "Maintenance task interval must be greater than 0");
     }
 
     /** {@inheritDoc} */
@@ -197,6 +242,167 @@
         
         cachingBuilder.setCacheConfig(cacheConfig);
         cachingBuilder.setResourceFactory(new FileResourceFactory(cacheDir));
-        cachingBuilder.setHttpCacheStorage(new ManagedHttpCacheStorage(cacheConfig));
-    }
+        // Because of the way the builder is structured, we need to temporarily store this for access in buildClient().
+        // This impl's buildClient() is synchronized, so don't have concurrency issues.
+        managedStorage = new ManagedHttpCacheStorage(cacheConfig);

[... 177 lines stripped ...]


More information about the commits mailing list