[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