Although the impl of of the the LRU cache is neat and elegant, when it comes to caching, should we consider one of the jars that provides this sort of thing? eg ehcache? The main reason being that as caching gets closer to being used in production, there are always a never ending list of requests from ops teams. Invalidation, timeout, cluster, jmx etc etc things like ehcache have these (an support the almost defunct JSR-107 for what its worth), there are bound to be other caches required.

I can provide a patch if necessary.
but this is just a thought?
Ian



On 18 May 2008, at 05:50, [EMAIL PROTECTED] wrote:

Author: etnu
Date: Sat May 17 21:50:15 2008
New Revision: 657495

URL: http://svn.apache.org/viewvc?rev=657495&view=rev
Log:
Modified BasicHttpCache to use an LRU cache instead of a map.


Modified:
    incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/ shindig/gadgets/http/BasicHttpCache.java incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/SigningFetcherTest.java incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/http/BasicHttpCacheTest.java incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/http/BasicHttpFetcherTest.java

Modified: incubator/shindig/trunk/java/gadgets/conf/gadgets.properties
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/ gadgets/conf/gadgets.properties? rev=657495&r1=657494&r2=657495&view=diff ====================================================================== ======== --- incubator/shindig/trunk/java/gadgets/conf/gadgets.properties (original) +++ incubator/shindig/trunk/java/gadgets/conf/gadgets.properties Sat May 17 21:50:15 2008
@@ -7,3 +7,4 @@
 signing.key-file=
 locked-domain.enabled=false
 locked-domain.embed-host=127.0.0.1:8080
+cache.capacity=10000

Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/ apache/shindig/gadgets/http/BasicHttpCache.java URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/ gadgets/src/main/java/org/apache/shindig/gadgets/http/ BasicHttpCache.java?rev=657495&r1=657494&r2=657495&view=diff ====================================================================== ======== --- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/ shindig/gadgets/http/BasicHttpCache.java (original) +++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/ shindig/gadgets/http/BasicHttpCache.java Sat May 17 21:50:15 2008
@@ -17,30 +17,38 @@
  */
 package org.apache.shindig.gadgets.http;

+import org.apache.shindig.common.cache.Cache;
+import org.apache.shindig.common.cache.LruCache;
+
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
+
 import java.net.URI;
-import java.util.Map;
-import java.util.WeakHashMap;

 /**
* Simple cache of HttpResponse. Uses WeakHashMap for memory management
  */
 public class BasicHttpCache extends AbstractHttpCache {

-  private final Map<URI, HttpResponse> cache
-      = new WeakHashMap<URI, HttpResponse>();
+  private final Cache<URI, HttpResponse> cache;

   @Override
   protected HttpResponse getResponseImpl(URI uri) {
-    return cache.get(uri);
+    return cache.getElement(uri);
   }

   @Override
   protected void addResponseImpl(URI uri, HttpResponse response) {
-    cache.put(uri, response);
+    cache.addElement(uri, response);
   }

   @Override
   protected HttpResponse removeResponseImpl(URI uri) {
-    return cache.remove(uri);
+    return cache.removeElement(uri);
+  }
+
+  @Inject
+  public BasicHttpCache(@Named("cache.capacity") int capacity) {
+    cache = LruCache.create(capacity);
   }
 }

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/ apache/shindig/gadgets/SigningFetcherTest.java URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/ gadgets/src/test/java/org/apache/shindig/gadgets/ SigningFetcherTest.java?rev=657495&r1=657494&r2=657495&view=diff ====================================================================== ======== --- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/SigningFetcherTest.java (original) +++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/SigningFetcherTest.java Sat May 17 21:50:15 2008
@@ -14,22 +14,22 @@

 package org.apache.shindig.gadgets;

-import junit.framework.TestCase;
-
 import org.apache.shindig.common.BasicSecurityToken;
 import org.apache.shindig.gadgets.http.BasicHttpCache;
 import org.apache.shindig.gadgets.http.HttpCache;
 import org.apache.shindig.gadgets.http.HttpRequest;

 import net.oauth.OAuth;
-import net.oauth.OAuth.Parameter;
 import net.oauth.OAuthAccessor;
 import net.oauth.OAuthConsumer;
 import net.oauth.OAuthMessage;
 import net.oauth.OAuthValidator;
 import net.oauth.SimpleOAuthValidator;
+import net.oauth.OAuth.Parameter;
 import net.oauth.signature.RSA_SHA1;

+import junit.framework.TestCase;
+
 import java.net.URI;
 import java.net.URISyntaxException;
 import java.net.URL;
@@ -41,7 +41,7 @@
  */
 public class SigningFetcherTest extends TestCase {
   private static final String PRIVATE_KEY_TEXT =
- "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALRiMLAh9iimur8V" + + "MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALRiMLAh9iimur8V" + "A7qVvdqxevEuUkW4K+2KdMXmnQbG9Aa7k7eBjK1S +0LYmVjPKlJGNXHDGuy5Fw/d" + "7rjVJ0BLB+ubPK8iA/ Tw3hLQgXMRRGRXXCn8ikfuQfjUS1uZSatdLB81mydBETlJ" + "hI6GH4twrbDJCR2Bwy/ XWXgqgGRzAgMBAAECgYBYWVtleUzavkbrPjy0T5FMou8H" +
@@ -79,7 +79,7 @@
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    cache = new BasicHttpCache();
+    cache = new BasicHttpCache(10);
     interceptor = new InterceptingContentFetcher();
     authToken = new BasicSecurityToken("o", "v", "a", "d", "u", "m");
     signer = SigningFetcher.makeFromB64PrivateKey(cache,
@@ -190,7 +190,7 @@
     assertTrue(contains(queryParams, "a", "b"));
     assertTrue(contains(queryParams, "a", "c"));
   }
-
+
   public void testValidParameterCharacters() throws Exception {
     String weird = "[EMAIL PROTECTED]()-_[]:,./";
     HttpRequest unsigned

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/ apache/shindig/gadgets/http/BasicHttpCacheTest.java URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/ gadgets/src/test/java/org/apache/shindig/gadgets/http/ BasicHttpCacheTest.java?rev=657495&r1=657494&r2=657495&view=diff ====================================================================== ======== --- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/http/BasicHttpCacheTest.java (original) +++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/http/BasicHttpCacheTest.java Sat May 17 21:50:15 2008
@@ -17,19 +17,16 @@
  */
 package org.apache.shindig.gadgets.http;

-import junit.framework.TestCase;
-
 import org.apache.shindig.gadgets.servlet.HttpUtil;

+import junit.framework.TestCase;
+
 import java.net.URI;
-import java.text.DateFormat;
 import java.util.Arrays;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
-import java.util.Locale;
 import java.util.Map;
-import java.util.TimeZone;

 /**
  * Tests for basic content cache
@@ -41,7 +38,7 @@
   @Override
   public void setUp() throws Exception {
     super.setUp();
-    cache = new BasicHttpCache();
+    cache = new BasicHttpCache(10);
   }

   @Override

Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/ apache/shindig/gadgets/http/BasicHttpFetcherTest.java URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/ gadgets/src/test/java/org/apache/shindig/gadgets/http/ BasicHttpFetcherTest.java?rev=657495&r1=657494&r2=657495&view=diff ====================================================================== ======== --- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/http/BasicHttpFetcherTest.java (original) +++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/ shindig/gadgets/http/BasicHttpFetcherTest.java Sat May 17 21:50:15 2008
@@ -25,7 +25,7 @@
 import java.net.URI;

 public class BasicHttpFetcherTest extends TestCase {
-  private HttpCache cache = new BasicHttpCache();
+  private HttpCache cache = new BasicHttpCache(10);
   private HttpFetcher fetcher
       = new BasicHttpFetcher(cache, Integer.MAX_VALUE);




Reply via email to