You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@wicket.apache.org by pe...@apache.org on 2012/05/07 11:43:37 UTC

[1/2] git commit: WICKET-4532 Disable caching for particular resources

Updated Branches:
  refs/heads/master 40bdfd41d -> 8ee7eaea5


WICKET-4532 Disable caching for particular resources


Project: http://git-wip-us.apache.org/repos/asf/wicket/repo
Commit: http://git-wip-us.apache.org/repos/asf/wicket/commit/8ee7eaea
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/8ee7eaea
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/8ee7eaea

Branch: refs/heads/master
Commit: 8ee7eaea544b49a37daa4a4fbdf41df855a7fa6e
Parents: 6ccdbb7
Author: Peter Ertl <pe...@apache.org>
Authored: Mon May 7 11:23:53 2012 +0200
Committer: Peter Ertl <pe...@apache.org>
Committed: Mon May 7 11:23:53 2012 +0200

----------------------------------------------------------------------
 .../mapper/BasicResourceReferenceMapper.java       |   23 +++++++++------
 .../wicket/core/request/mapper/ResourceMapper.java |   21 ++++++++------
 .../wicket/request/resource/AbstractResource.java  |   11 ++++++-
 .../request/resource/ContextRelativeResource.java  |   17 +++++++++-
 .../wicket/request/resource/PackageResource.java   |   23 ++++++++++++++-
 .../resource/caching/IStaticCacheableResource.java |    7 ++++
 .../resource/bundles/ConcatBundleResource.java     |   13 ++++++++
 .../mapper/BasicResourceReferenceMapperTest.java   |    6 ++++
 8 files changed, 98 insertions(+), 23 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
index 6f4d417..3ec6cea 100755
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapper.java
@@ -226,19 +226,24 @@ class BasicResourceReferenceMapper extends AbstractResourceReferenceMapper
 				{
 					final IResource resource = reference.getResource();
 
-					// apply caching if required
+					// is resource supposed to be cached?
 					if (resource instanceof IStaticCacheableResource)
 					{
-						// add caching related information to filename + query parameters
 						final IStaticCacheableResource cacheable = (IStaticCacheableResource)resource;
-						final ResourceUrl resourceUrl = new ResourceUrl(token, parameters);
-						getCachingStrategy().decorateUrl(resourceUrl, cacheable);
-						token = resourceUrl.getFileName();
-
-						if (Strings.isEmpty(token))
+						
+						// is caching enabled?
+						if(cacheable.isCacheEnabled())
 						{
-							throw new IllegalStateException(
-								"caching strategy returned empty name for " + resource);
+							// apply caching scheme to resource url
+							final ResourceUrl resourceUrl = new ResourceUrl(token, parameters);
+							getCachingStrategy().decorateUrl(resourceUrl, cacheable);
+							token = resourceUrl.getFileName();
+	
+							if (Strings.isEmpty(token))
+							{
+								throw new IllegalStateException(
+									"caching strategy returned empty name for " + resource);
+							}
 						}
 					}
 				}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
index 984f0ad..912bf09 100644
--- a/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
+++ b/wicket-core/src/main/java/org/apache/wicket/core/request/mapper/ResourceMapper.java
@@ -215,22 +215,25 @@ public class ResourceMapper extends AbstractMapper implements IRequestMapper
 
 		if (Strings.isEmpty(filename) == false)
 		{
-			// TODO is calling getResource() a potential performance bottleneck?
 			final IResource resource = resourceReference.getResource();
 
 			if (resource instanceof IStaticCacheableResource)
 			{
 				final IStaticCacheableResource cacheable = (IStaticCacheableResource)resource;
-				final ResourceUrl cacheUrl = new ResourceUrl(filename, parameters);
-
-				getCachingStrategy().decorateUrl(cacheUrl, cacheable);
-
-				if (Strings.isEmpty(cacheUrl.getFileName()))
+				
+				if(cacheable.isCacheEnabled())
 				{
-					throw new IllegalStateException("caching strategy returned empty name for " +
-						resource);
+					final ResourceUrl cacheUrl = new ResourceUrl(filename, parameters);
+	
+					getCachingStrategy().decorateUrl(cacheUrl, cacheable);
+	
+					if (Strings.isEmpty(cacheUrl.getFileName()))
+					{
+						throw new IllegalStateException("caching strategy returned empty name for " +
+							resource);
+					}
+					segments.set(lastSegmentAt, cacheUrl.getFileName());
 				}
-				segments.set(lastSegmentAt, cacheUrl.getFileName());
 			}
 		}
 	}

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
index 2033a72..0bbd4e6 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/AbstractResource.java
@@ -477,10 +477,17 @@ public abstract class AbstractResource implements IResource
 		// Get a "new" ResourceResponse to write a response
 		ResourceResponse data = newResourceResponse(attributes);
 
-		// let caching strategy decorate response if resource is intended to be cached
+		// is resource supposed to be cached?
 		if (this instanceof IStaticCacheableResource)
 		{
-			getCachingStrategy().decorateResponse(data, (IStaticCacheableResource)this);
+			final IStaticCacheableResource cacheable = (IStaticCacheableResource)this;
+
+			// is caching enabled?
+			if (cacheable.isCacheEnabled())
+			{
+				// apply caching strategy to response
+				getCachingStrategy().decorateResponse(data, cacheable);
+			}
 		}
 		// set response header
 		setResponseHeaders(data, attributes);

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
index 8b3e87b..3b99377 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ContextRelativeResource.java
@@ -44,6 +44,7 @@ public class ContextRelativeResource extends AbstractResource implements IStatic
 	private static final Logger log = LoggerFactory.getLogger(ContextRelativeResource.class);
 
 	private final String path;
+	private boolean cacheEnabled;
 
 	/**
 	 * Construct.
@@ -62,9 +63,21 @@ public class ContextRelativeResource extends AbstractResource implements IStatic
 		{
 			pathRelativeToContextRoot = "/" + pathRelativeToContextRoot;
 		}
-		path = pathRelativeToContextRoot;
+		this.path = pathRelativeToContextRoot;
+		this.cacheEnabled = true;
 	}
-	
+
+	@Override
+	public boolean isCacheEnabled()
+	{
+		return cacheEnabled;
+	}
+
+	public void setCacheEnabled(final boolean cacheEnabled)
+	{
+		this.cacheEnabled = cacheEnabled;
+	}
+
 	@Override
 	public Serializable getCacheKey()
 	{

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
index 640639b..93e65b5 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResource.java
@@ -124,6 +124,13 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 	private boolean compress = false;
 
 	/**
+	 * controls whether {@link org.apache.wicket.request.resource.caching.IResourceCachingStrategy}
+	 * should be applied to resource
+	 */
+	
+	private boolean cacheEnabled;
+	
+	/**
 	 * Hidden constructor.
 	 * 
 	 * @param scope
@@ -155,10 +162,11 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 			path = name;
 		}
 
-		scopeName = scope.getName();
+		this.scopeName = scope.getName();
 		this.locale = locale;
 		this.style = style;
 		this.variation = variation;
+		this.cacheEnabled = true;
 	}
 
 	private Locale getCurrentLocale()
@@ -171,6 +179,18 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 		return style != null ? style : Session.get().getStyle();
 	}
 
+	@Override
+	public boolean isCacheEnabled()
+	{
+		return cacheEnabled;
+	}
+
+	public void setCacheEnabled(final boolean cacheEnabled)
+	{
+		this.cacheEnabled = cacheEnabled;
+	}
+
+	@Override
 	public Serializable getCacheKey()
 	{
 		IResourceStream stream = getCacheableResourceStream();
@@ -339,6 +359,7 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
 	 * @see org.apache.wicket.request.resource.caching.IStaticCacheableResource#getCacheableResourceStream()
 	 * @see #getResourceStream()
 	 */
+	@Override
 	public IResourceStream getCacheableResourceStream()
 	{
 		return internalGetResourceStream(getCurrentStyle(), getCurrentLocale());

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
index a861e27..b182056 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/IStaticCacheableResource.java
@@ -31,6 +31,13 @@ import org.apache.wicket.util.resource.IResourceStream;
 public interface IStaticCacheableResource extends IResource
 {
 	/**
+	 * controls whether caching of the resource is enabled or disabled
+	 * 
+	 * @return @{code true} if caching is enabled
+	 */
+	boolean isCacheEnabled();
+	
+	/**
 	 * get unique caching key for the resource stream produced by
 	 * {@link #getCacheableResourceStream()}
 	 * 

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java b/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
index 2307f23..4eb04c5 100644
--- a/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/resource/bundles/ConcatBundleResource.java
@@ -54,6 +54,7 @@ public class ConcatBundleResource extends AbstractResource implements IStaticCac
 
 	private static final long serialVersionUID = 1L;
 	private List<? extends IReferenceHeaderItem> providedResources;
+	private boolean cacheEnabled;
 
 	/**
 	 * Construct.
@@ -63,6 +64,7 @@ public class ConcatBundleResource extends AbstractResource implements IStaticCac
 	public ConcatBundleResource(List<? extends IReferenceHeaderItem> providedResources)
 	{
 		this.providedResources = Args.notNull(providedResources, "providedResources");
+		this.cacheEnabled = true;
 	}
 
 	@Override
@@ -173,6 +175,17 @@ public class ConcatBundleResource extends AbstractResource implements IStaticCac
 	}
 
 	@Override
+	public boolean isCacheEnabled()
+	{
+		return cacheEnabled;
+	}
+
+	public void setCacheEnabled(final boolean cacheEnabled)
+	{
+		this.cacheEnabled = cacheEnabled;
+	}
+
+	@Override
 	public Serializable getCacheKey()
 	{
 		ArrayList<Serializable> key = new ArrayList<Serializable>(providedResources.size());

http://git-wip-us.apache.org/repos/asf/wicket/blob/8ee7eaea/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
index 21e30a0..ff76ed0 100644
--- a/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
+++ b/wicket-core/src/test/java/org/apache/wicket/core/request/mapper/BasicResourceReferenceMapperTest.java
@@ -477,6 +477,12 @@ public class BasicResourceReferenceMapperTest extends AbstractResourceReferenceM
 			public void respond(Attributes attributes)
 			{
 			}
+
+			@Override
+			public boolean isCacheEnabled()
+			{
+				return true;
+			}
 		};
 
 		final ResourceReference reference = new ResourceReference(getClass(), "versioned",