Author: ddumont
Date: Wed Feb 20 18:14:58 2013
New Revision: 1448337

URL: http://svn.apache.org/r1448337
Log:
Make jscontent max-age configurable for the server.

Modified:
    shindig/trunk/java/common/conf/shindig.properties
    
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/GetJsContentProcessor.java
    
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/GetJsContentProcessorTest.java

Modified: shindig/trunk/java/common/conf/shindig.properties
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/common/conf/shindig.properties?rev=1448337&r1=1448336&r2=1448337&view=diff
==============================================================================
--- shindig/trunk/java/common/conf/shindig.properties (original)
+++ shindig/trunk/java/common/conf/shindig.properties Wed Feb 20 18:14:58 2013
@@ -215,3 +215,9 @@ shindig.allowJSONP=true
 # Comma separated tags that need to have its relative path to be resolved as 
absolute.
 # Possible values are RESOURCES and HYPERLINKS
 shindig.gadgets.rewriter.absolutePath.tags=RESOURCES
+
+# Configure cache characteristics of js content (max-age in seconds)
+# where -1 caches "forever, 0 means "no-cache"
+shindig.jscontent.unversioned.maxage=3600
+shindig.jscontent.versioned.maxage=-1
+shindig.jscontent.invalid.maxage=0

Modified: 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/GetJsContentProcessor.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/GetJsContentProcessor.java?rev=1448337&r1=1448336&r2=1448337&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/GetJsContentProcessor.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/js/GetJsContentProcessor.java
 Wed Feb 20 18:14:58 2013
@@ -18,8 +18,8 @@
  */
 package org.apache.shindig.gadgets.js;
 
-import com.google.common.collect.Sets;
-import com.google.inject.Inject;
+import java.util.List;
+import java.util.Set;
 
 import org.apache.shindig.gadgets.GadgetContext;
 import org.apache.shindig.gadgets.GadgetException;
@@ -32,16 +32,25 @@ import org.apache.shindig.gadgets.rewrit
 import org.apache.shindig.gadgets.uri.JsUriManager.JsUri;
 import org.apache.shindig.gadgets.uri.UriStatus;
 
-import java.util.List;
-import java.util.Set;
+import com.google.common.collect.Sets;
+import com.google.inject.Inject;
+import com.google.inject.name.Named;
 
 /**
  * Retrieves the requested Javascript code using a {@link JsProcessor}.
  */
 public class GetJsContentProcessor implements JsProcessor {
+  public static final int DEFAULT_VERSIONED_MAXAGE = -1;
+  public static final int DEFAULT_UNVERSIONED_MAXAGE = 3600;
+  public static final int DEFAULT_INVALID_MAXAGE = 0;
+
   private final FeatureRegistryProvider registryProvider;
   private final JsCompiler compiler;
 
+  private int versionedMaxAge = DEFAULT_VERSIONED_MAXAGE;
+  private int unversionedMaxAge = DEFAULT_UNVERSIONED_MAXAGE;
+  private int invalidMaxAge = DEFAULT_INVALID_MAXAGE;
+
   @Inject
   public GetJsContentProcessor(
       FeatureRegistryProvider registryProvider,
@@ -50,6 +59,25 @@ public class GetJsContentProcessor imple
     this.compiler = compiler;
   }
 
+  @Inject(optional=true)
+  public void setVersionedMaxAge(@Named("shindig.jscontent.versioned.maxage") 
Integer maxAge) {
+    if (maxAge != null) {
+      versionedMaxAge = maxAge;
+    }
+  }
+  @Inject(optional=true)
+  public void 
setUnversionedMaxAge(@Named("shindig.jscontent.unversioned.maxage") Integer 
maxAge) {
+    if (maxAge != null) {
+      unversionedMaxAge = maxAge;
+    }
+  }
+  @Inject(optional=true)
+  public void setInvalidMaxAge(@Named("shindig.jscontent.invalid.maxage") 
Integer maxAge) {
+    if (maxAge != null) {
+      invalidMaxAge = maxAge;
+    }
+  }
+
   public boolean process(JsRequest request, JsResponseBuilder builder) throws 
JsException {
     // Get JavaScript content from features aliases request.
     JsUri jsUri = request.getJsUri();
@@ -104,17 +132,14 @@ public class GetJsContentProcessor imple
   protected void setResponseCacheTtl(JsResponseBuilder builder, UriStatus 
vstatus) {
     switch (vstatus) {
       case VALID_VERSIONED:
-        // Versioned files get cached indefinitely
-        builder.setCacheTtlSecs(-1);
+        builder.setCacheTtlSecs(versionedMaxAge);
         break;
       case VALID_UNVERSIONED:
-        // Unversioned files get cached for 1 hour.
-        builder.setCacheTtlSecs(60 * 60);
+        builder.setCacheTtlSecs(unversionedMaxAge);
         break;
       case INVALID_VERSION:
         // URL is invalid in some way, likely version mismatch.
-        // Indicate no-cache forcing subsequent requests to regenerate URLs.
-        builder.setCacheTtlSecs(0);
+        builder.setCacheTtlSecs(invalidMaxAge);
         break;
     }
   }

Modified: 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/GetJsContentProcessorTest.java
URL: 
http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/GetJsContentProcessorTest.java?rev=1448337&r1=1448336&r2=1448337&view=diff
==============================================================================
--- 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/GetJsContentProcessorTest.java
 (original)
+++ 
shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/js/GetJsContentProcessorTest.java
 Wed Feb 20 18:14:58 2013
@@ -72,6 +72,9 @@ public class GetJsContentProcessorTest {
     request = control.createMock(JsRequest.class);
     response = new JsResponseBuilder();
     processor = new GetJsContentProcessor(new 
DefaultFeatureRegistryProvider(registry), compiler);
+    
processor.setVersionedMaxAge(GetJsContentProcessor.DEFAULT_VERSIONED_MAXAGE);
+    
processor.setUnversionedMaxAge(GetJsContentProcessor.DEFAULT_UNVERSIONED_MAXAGE);
+    processor.setInvalidMaxAge(GetJsContentProcessor.DEFAULT_INVALID_MAXAGE);
   }
 
   @Test
@@ -79,7 +82,7 @@ public class GetJsContentProcessorTest {
     setupForVersionAndProxy(true, UriStatus.VALID_UNVERSIONED);
     control.replay();
     processor.process(request, response);
-    checkResponse(true, 3600, JS_CODE1 + JS_CODE2, "");
+    checkResponse(true, GetJsContentProcessor.DEFAULT_UNVERSIONED_MAXAGE, 
JS_CODE1 + JS_CODE2, "");
     control.verify();
   }
 
@@ -88,7 +91,7 @@ public class GetJsContentProcessorTest {
     setupForVersionAndProxy(true, UriStatus.VALID_VERSIONED);
     control.replay();
     processor.process(request, response);
-    checkResponse(true, -1, JS_CODE1 + JS_CODE2, "");
+    checkResponse(true, GetJsContentProcessor.DEFAULT_VERSIONED_MAXAGE, 
JS_CODE1 + JS_CODE2, "");
     control.verify();
   }
 
@@ -97,7 +100,7 @@ public class GetJsContentProcessorTest {
     setupForVersionAndProxy(true, UriStatus.INVALID_VERSION);
     control.replay();
     processor.process(request, response);
-    checkResponse(true, 0, JS_CODE1 + JS_CODE2, "");
+    checkResponse(true, GetJsContentProcessor.DEFAULT_INVALID_MAXAGE, JS_CODE1 
+ JS_CODE2, "");
     control.verify();
   }
 
@@ -106,7 +109,7 @@ public class GetJsContentProcessorTest {
     setupForVersionAndProxy(false, UriStatus.VALID_UNVERSIONED);
     control.replay();
     processor.process(request, response);
-    checkResponse(false, 3600, JS_CODE1 + JS_CODE2, "");
+    checkResponse(false, GetJsContentProcessor.DEFAULT_UNVERSIONED_MAXAGE, 
JS_CODE1 + JS_CODE2, "");
     control.verify();
   }
 
@@ -129,7 +132,7 @@ public class GetJsContentProcessorTest {
 
     control.replay();
     processor.process(request, response);
-    checkResponse(true, 3600, JS_CODE1, "export2", "extern2");
+    checkResponse(true, GetJsContentProcessor.DEFAULT_UNVERSIONED_MAXAGE, 
JS_CODE1, "export2", "extern2");
     control.verify();
   }
 


Reply via email to