[prev in list] [next in list] [prev in thread] [next in thread] 

List:       httpcomponents-commits
Subject:    svn commit: r980358 - in
From:       olegk () apache ! org
Date:       2010-07-29 8:30:43
Message-ID: 20100729083043.DCDC7238899C () eris ! apache ! org
[Download RAW message or body]

Author: olegk
Date: Thu Jul 29 08:30:43 2010
New Revision: 980358

URL: http://svn.apache.org/viewvc?rev=980358&view=rev
Log:
HTTPCLIENT-972: Cache config 
Contributed by Jonathan Moore <jonathan_moore at comcast.com>

Added:
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheConfig.java \
(with props) Modified:
    httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
  httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DoNotTestProtocolRequirements.java
  httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java
  httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java
  httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java


Added: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheConfig.java
                
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/main/java/org/apache/http/impl/client/cache/CacheConfig.java?rev=980358&view=auto \
                ==============================================================================
                
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheConfig.java \
                (added)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheConfig.java \
Thu Jul 29 08:30:43 2010 @@ -0,0 +1,51 @@
+package org.apache.http.impl.client.cache;
+
+/**
+ * Java Beans-style configuration for a
+ * {@link org.apache.http.impl.client.cache.CachingHttpClient}.
+ */
+public class CacheConfig {
+
+    /** Default setting for the maximum object size that will be
+     * cached, in bytes.
+     */
+    public final static int DEFAULT_MAX_OBJECT_SIZE_BYTES = 8192;
+
+    private int maxObjectSizeBytes = DEFAULT_MAX_OBJECT_SIZE_BYTES;
+    private boolean isSharedCache = true;
+
+    /**
+     * Returns the current maximum object size that will be cached.
+     * @return size in bytes
+     */
+    public int getMaxObjectSizeBytes() {
+        return maxObjectSizeBytes;
+    }
+
+    /**
+     * Specifies the maximum object size that will be eligible for caching.
+     * @param maxObjectSizeBytes size in bytes
+     */
+    public void setMaxObjectSizeBytes(int maxObjectSizeBytes) {
+        this.maxObjectSizeBytes = maxObjectSizeBytes;
+    }
+
+    /**
+     * Returns whether the cache will behave as a shared cache or not.
+     * @return true for a shared cache, false for a non-shared (private)
+     * cache
+     */
+    public boolean isSharedCache() {
+        return isSharedCache;
+    }
+
+    /**
+     * Sets whether the cache should behave as a shared cache or not.
+     * @param isSharedCache true to behave as a shared cache, false to
+     * behave as a non-shared (private) cache.
+     */
+    public void setSharedCache(boolean isSharedCache) {
+        this.isSharedCache = isSharedCache;
+    }
+
+}

Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheConfig.java
                
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheConfig.java
                
------------------------------------------------------------------------------
    svn:keywords = Date Revision

Propchange: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CacheConfig.java
                
------------------------------------------------------------------------------
    svn:mime-type = text/plain

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java
                
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java?rev=980358&r1=980357&r2=980358&view=diff
 ==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java \
                (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/main/java/org/apache/http/impl/client/cache/CachingHttpClient.java \
Thu Jul 29 08:30:43 2010 @@ -67,8 +67,6 @@ import org.apache.http.protocol.HttpCont
 public class CachingHttpClient implements HttpClient {
 
     private final static int MAX_CACHE_ENTRIES = 1000;
-    private final static int DEFAULT_MAX_OBJECT_SIZE_BYTES = 8192;
-
     private final static boolean SUPPORTS_RANGE_AND_CONTENT_RANGE_HEADERS = false;
 
     private final AtomicLong cacheHits = new AtomicLong();
@@ -87,16 +85,30 @@ public class CachingHttpClient implement
     private final CachedResponseSuitabilityChecker suitabilityChecker;
 
     private final ConditionalRequestBuilder conditionalRequestBuilder;
-    private final int maxObjectSizeBytes;
+
     private final CacheEntryUpdater cacheEntryUpdater;
 
+    private final int maxObjectSizeBytes;
+    private final boolean sharedCache;
+
     private final ResponseProtocolCompliance responseCompliance;
     private final RequestProtocolCompliance requestCompliance;
 
     private final Log log = LogFactory.getLog(getClass());
 
-    public CachingHttpClient(HttpClient client, HttpCache cache, int \
maxObjectSizeBytes) { +    public CachingHttpClient(HttpClient client, HttpCache \
cache, CacheConfig config) {  super();
+        if (client == null) {
+            throw new IllegalArgumentException("HttpClient may not be null");
+        }
+        if (cache == null) {
+            throw new IllegalArgumentException("HttpCache may not be null");
+        }
+        if (config == null) {
+            throw new IllegalArgumentException("CacheConfig may not be null");
+        }
+        this.maxObjectSizeBytes = config.getMaxObjectSizeBytes();
+        this.sharedCache = config.isSharedCache();
         this.backend = client;
         this.responseCache = cache;
         this.validityPolicy = new CacheValidityPolicy();
@@ -109,17 +121,37 @@ public class CachingHttpClient implement
         this.suitabilityChecker = new \
CachedResponseSuitabilityChecker(this.validityPolicy);  \
this.conditionalRequestBuilder = new ConditionalRequestBuilder();  \
                this.cacheEntryUpdater = new CacheEntryUpdater();
-        this.maxObjectSizeBytes = maxObjectSizeBytes;
+
         this.responseCompliance = new ResponseProtocolCompliance();
         this.requestCompliance = new RequestProtocolCompliance();
     }
 
     public CachingHttpClient() {
-        this(new DefaultHttpClient(), new BasicHttpCache(MAX_CACHE_ENTRIES), \
DEFAULT_MAX_OBJECT_SIZE_BYTES); +        this(new DefaultHttpClient(), new \
BasicHttpCache(MAX_CACHE_ENTRIES), new CacheConfig()); +    }
+
+    public CachingHttpClient(CacheConfig config) {
+        this(new DefaultHttpClient(), new BasicHttpCache(MAX_CACHE_ENTRIES), \
config); +    }
+
+    public CachingHttpClient(HttpClient client) {
+        this(client, new BasicHttpCache(MAX_CACHE_ENTRIES), new CacheConfig());
+    }
+
+    public CachingHttpClient(HttpClient client, CacheConfig config) {
+        this(client, new BasicHttpCache(MAX_CACHE_ENTRIES), config);
     }
 
-    public CachingHttpClient(HttpCache cache, int maxObjectSizeBytes) {
-        this(new DefaultHttpClient(), cache, maxObjectSizeBytes);
+    public CachingHttpClient(HttpCache cache) {
+        this(new DefaultHttpClient(), cache, new CacheConfig());
+    }
+
+    public CachingHttpClient(HttpCache cache, CacheConfig config) {
+        this(new DefaultHttpClient(), cache, config);
+    }
+
+    public CachingHttpClient(HttpClient client, HttpCache cache) {
+        this(client, cache, new CacheConfig());
     }
 
     CachingHttpClient(HttpClient backend, CacheValidityPolicy validityPolicy, \
ResponseCachingPolicy responseCachingPolicy, @@ -130,7 +162,9 @@ public class \
                CachingHttpClient implement
                              ConditionalRequestBuilder conditionalRequestBuilder, \
                CacheEntryUpdater entryUpdater,
                              ResponseProtocolCompliance responseCompliance,
                              RequestProtocolCompliance requestCompliance) {
-        this.maxObjectSizeBytes = DEFAULT_MAX_OBJECT_SIZE_BYTES;
+        CacheConfig config = new CacheConfig();
+        this.maxObjectSizeBytes = config.getMaxObjectSizeBytes();
+        this.sharedCache = config.isSharedCache();
         this.backend = backend;
         this.validityPolicy = validityPolicy;
         this.responseCachingPolicy = responseCachingPolicy;
@@ -383,7 +417,7 @@ public class CachingHttpClient implement
     }
 
     public boolean isSharedCache() {
-        return true;
+        return sharedCache;
     }
 
     Date getCurrentDate() {

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DoNotTestProtocolRequirements.java
                
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/test/java/org/apache/http/impl/client/cache/DoNotTestProtocolRequirements.java?rev=980358&r1=980357&r2=980358&view=diff
 ==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DoNotTestProtocolRequirements.java \
                (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/DoNotTestProtocolRequirements.java \
Thu Jul 29 08:30:43 2010 @@ -80,7 +80,9 @@ public class DoNotTestProtocolRequiremen
         mockBackend = EasyMock.createMock(HttpClient.class);
         mockEntity = EasyMock.createMock(HttpEntity.class);
         mockCache = EasyMock.createMock(HttpCache.class);
-        impl = new CachingHttpClient(mockBackend, cache, MAX_BYTES);
+        CacheConfig params = new CacheConfig();
+        params.setMaxObjectSizeBytes(MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, cache, params);
     }
 
     private HttpResponse make200Response() {

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java
                
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java?rev=980358&r1=980357&r2=980358&view=diff
 ==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java \
                (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestCachingHttpClient.java \
Thu Jul 29 08:30:43 2010 @@ -884,7 +884,7 @@ public class TestCachingHttpClient {
 
         HttpCache cacheImpl = new BasicHttpCache(100);
 
-        CachingHttpClient cachingClient = new CachingHttpClient(httpClient, \
cacheImpl, 8192); +        CachingHttpClient cachingClient = new \
CachingHttpClient(httpClient, cacheImpl);  
         HttpUriRequest request = new \
HttpGet("http://www.fancast.com/static-28262/styles/base.css");  

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java
                
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java?rev=980358&r1=980357&r2=980358&view=diff
 ==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java \
                (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolDeviations.java \
Thu Jul 29 08:30:43 2010 @@ -97,7 +97,10 @@ public class TestProtocolDeviations {
         mockBackend = EasyMock.createMock(HttpClient.class);
         mockEntity = EasyMock.createMock(HttpEntity.class);
         mockCache = EasyMock.createMock(HttpCache.class);
-        impl = new CachingHttpClient(mockBackend, cache, MAX_BYTES);
+
+        CacheConfig params = new CacheConfig();
+        params.setMaxObjectSizeBytes(MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, cache, params);
     }
 
     private HttpResponse make200Response() {

Modified: httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java
                
URL: http://svn.apache.org/viewvc/httpcomponents/httpclient/trunk/httpclient-cache/src \
/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java?rev=980358&r1=980357&r2=980358&view=diff
 ==============================================================================
--- httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java \
                (original)
+++ httpcomponents/httpclient/trunk/httpclient-cache/src/test/java/org/apache/http/impl/client/cache/TestProtocolRequirements.java \
Thu Jul 29 08:30:43 2010 @@ -84,6 +84,7 @@ public class TestProtocolRequirements {
     private HttpCache mockCache;
     private HttpRequest request;
     private HttpResponse originResponse;
+    private CacheConfig params;
 
     private CachingHttpClient impl;
 
@@ -101,7 +102,9 @@ public class TestProtocolRequirements {
         mockBackend = EasyMock.createMock(HttpClient.class);
         mockEntity = EasyMock.createMock(HttpEntity.class);
         mockCache = EasyMock.createMock(HttpCache.class);
-        impl = new CachingHttpClient(mockBackend, cache, MAX_BYTES);
+        params = new CacheConfig();
+        params.setMaxObjectSizeBytes(MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, cache, params);
     }
 
     private void replayMocks() {
@@ -140,7 +143,7 @@ public class TestProtocolRequirements {
         mockCache = EasyMock.createMock(HttpCache.class);
         mockEntity = EasyMock.createMock(HttpEntity.class);
 
-        impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, mockCache, params);
 
         EasyMock.expect(mockCache.getEntry((String) \
                EasyMock.anyObject())).andReturn(null)
                 .anyTimes();
@@ -2307,7 +2310,7 @@ public class TestProtocolRequirements {
 
         mockCache.putEntry(EasyMock.eq("http://foo.example.com/thing"), \
EasyMock.isA(HttpCacheEntry.class));  
-        impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, mockCache, params);
 
         HttpRequest validate = new BasicHttpRequest("GET", "/thing", \
HttpVersion.HTTP_1_1);  validate.setHeader("If-None-Match", "\"etag\"");
@@ -2337,7 +2340,7 @@ public class TestProtocolRequirements {
         Date tenSecondsAgo = new Date(now.getTime() - 10 * 1000L);
         Date nineSecondsAgo = new Date(now.getTime() - 9 * 1000L);
         Date eightSecondsAgo = new Date(now.getTime() - 8 * 1000L);
-        
+
         Header[] hdrs = new Header[] {
                 new BasicHeader("Date", DateUtils.formatDate(nineSecondsAgo)),
                 new BasicHeader("Cache-Control", "max-age=3600"),
@@ -2349,7 +2352,7 @@ public class TestProtocolRequirements {
 
         CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, \
bytes);  
-        impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, mockCache, params);
 
         EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry);
  
@@ -2390,7 +2393,7 @@ public class TestProtocolRequirements {
 
         CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, \
bytes);  
-        impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, mockCache, params);
 
         EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry);
  EasyMock.expect(
@@ -2591,7 +2594,7 @@ public class TestProtocolRequirements {
 
         CacheEntry entry = new CacheEntry(tenSecondsAgo, eightSecondsAgo, hdrs, \
bytes);  
-        impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, mockCache, params);
 
         EasyMock.expect(mockCache.getEntry("http://foo.example.com/thing")).andReturn(entry);
  
@@ -2635,7 +2638,7 @@ public class TestProtocolRequirements {
 
         CacheEntry entry = new CacheEntry(requestTime, responseTime, hdrs, bytes);
 
-        impl = new CachingHttpClient(mockBackend, mockCache, MAX_BYTES);
+        impl = new CachingHttpClient(mockBackend, mockCache, params);
 
         HttpResponse validated = make200Response();
         validated.setHeader("Cache-Control", "public");


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic