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/06 15:13:59 UTC
git commit: WICKET-4532 Disable caching for particular resources
Updated Branches:
refs/heads/master d30af7d18 -> 91c604d55
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/91c604d5
Tree: http://git-wip-us.apache.org/repos/asf/wicket/tree/91c604d5
Diff: http://git-wip-us.apache.org/repos/asf/wicket/diff/91c604d5
Branch: refs/heads/master
Commit: 91c604d55c2a5692f8b6321c1980c4ba4b5574bf
Parents: d30af7d
Author: Peter Ertl <pe...@apache.org>
Authored: Sun May 6 14:40:22 2012 +0200
Committer: Peter Ertl <pe...@apache.org>
Committed: Sun May 6 14:40:22 2012 +0200
----------------------------------------------------------------------
.../mapper/BasicResourceReferenceMapper.java | 18 ++--
.../wicket/core/request/mapper/ResourceMapper.java | 21 +++--
.../wicket/request/resource/AbstractResource.java | 9 ++-
.../request/resource/CssPackageResource.java | 4 +-
.../request/resource/CssResourceReference.java | 2 +-
.../request/resource/ICssPackageResource.java | 28 +++++
.../resource/IJavaScriptPackageResource.java | 25 +++++
.../wicket/request/resource/IPackageResource.java | 59 ++++++++++
.../resource/JavaScriptPackageResource.java | 4 +-
.../resource/JavaScriptResourceReference.java | 2 +-
.../wicket/request/resource/PackageResource.java | 59 +++++-----
.../request/resource/PackageResourceDecorator.java | 85 +++++++++++++++
.../request/resource/PackageResourceReference.java | 2 +-
.../resource/caching/IStaticCacheableResource.java | 5 +-
.../NonCachingPackageResourceDecorator.java | 45 ++++++++
.../version/RequestCycleCachedResourceVersion.java | 2 +-
16 files changed, 314 insertions(+), 56 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/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..63b06d0 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
@@ -229,16 +229,20 @@ class BasicResourceReferenceMapper extends AbstractResourceReferenceMapper
// apply caching if required
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.getCacheKey() != null)
{
- throw new IllegalStateException(
- "caching strategy returned empty name for " + resource);
+ 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/91c604d5/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..2e26caa 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,27 @@ 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();
+ // is resource supposed to be cached?
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()))
+ // is caching enabled?
+ if (cacheable.getCacheKey() != null)
{
- 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/91c604d5/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..6d39189 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
@@ -480,7 +480,14 @@ public abstract class AbstractResource implements IResource
// let caching strategy decorate response if resource is intended to be cached
if (this instanceof IStaticCacheableResource)
{
- getCachingStrategy().decorateResponse(data, (IStaticCacheableResource)this);
+ final IStaticCacheableResource cacheable = (IStaticCacheableResource)this;
+
+ // is caching enabled?
+ if (cacheable.getCacheKey() != null)
+ {
+ // decorate web response
+ getCachingStrategy().decorateResponse(data, cacheable);
+ }
}
// set response header
setResponseHeaders(data, attributes);
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
index f6cf010..f7a77d9 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssPackageResource.java
@@ -26,7 +26,7 @@ import org.slf4j.LoggerFactory;
/**
* Package resource for css files. It strips comments and whitespace from css.
*/
-public class CssPackageResource extends PackageResource
+public class CssPackageResource extends PackageResource implements ICssPackageResource
{
private static final long serialVersionUID = 1L;
@@ -57,7 +57,7 @@ public class CssPackageResource extends PackageResource
ICssCompressor compressor = getCompressor();
- if (compressor != null && getCompress())
+ if (compressor != null && isCompress())
{
try
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
index c43ee3e..a3cf582 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/CssResourceReference.java
@@ -64,7 +64,7 @@ public class CssResourceReference extends PackageResourceReference
}
@Override
- public CssPackageResource getResource()
+ public ICssPackageResource getResource()
{
return new CssPackageResource(getScope(), getName(), getLocale(), getStyle(),
getVariation());
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/ICssPackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/ICssPackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/ICssPackageResource.java
new file mode 100644
index 0000000..cbb98a7
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/ICssPackageResource.java
@@ -0,0 +1,28 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * Represents a css stylesheet package resource
+ */
+public interface ICssPackageResource extends IPackageResource
+{
+ // to be extended in the future
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/IJavaScriptPackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/IJavaScriptPackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/IJavaScriptPackageResource.java
new file mode 100644
index 0000000..75f2316
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/IJavaScriptPackageResource.java
@@ -0,0 +1,25 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+/**
+ * Represents a javascript package resource
+ */
+public interface IJavaScriptPackageResource extends IPackageResource
+{
+ // to be extended in the future
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/IPackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/IPackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/IPackageResource.java
new file mode 100644
index 0000000..8f6ad99
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/IPackageResource.java
@@ -0,0 +1,59 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+import org.apache.wicket.request.resource.caching.IStaticCacheableResource;
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * Represents a localizable static resource.
+ */
+public interface IPackageResource extends IStaticCacheableResource
+{
+ /**
+ * Gets the scoping class, used for class loading and to determine the package.
+ *
+ * @return the scoping class
+ */
+ Class<?> getScope();
+
+ /**
+ * Gets the style.
+ *
+ * @return the style
+ */
+ String getStyle();
+
+ /**
+ * locate resource stream for current resource
+ *
+ * @return resource stream or <code>null</code> if not found
+ */
+ IResourceStream getResourceStream();
+
+ /**
+ * @return whether {@link org.apache.wicket.resource.ITextResourceCompressor}
+ * can be used to compress the resource.
+ */
+ boolean isCompress();
+
+ /**
+ * @param compress
+ * A flag indicating whether the resource should be compressed.
+ */
+ void setCompress(boolean compress);
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
index 210fee1..b317b8a 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptPackageResource.java
@@ -26,7 +26,7 @@ import org.slf4j.LoggerFactory;
/**
* Package resource for javascript files. It strips comments and whitespace from javascript.
*/
-public class JavaScriptPackageResource extends PackageResource
+public class JavaScriptPackageResource extends PackageResource implements IJavaScriptPackageResource
{
private static final long serialVersionUID = 1L;
@@ -57,7 +57,7 @@ public class JavaScriptPackageResource extends PackageResource
IJavaScriptCompressor compressor = getCompressor();
- if (compressor != null && getCompress())
+ if (compressor != null && isCompress())
{
try
{
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
index eb2887d..e1a7250 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/JavaScriptResourceReference.java
@@ -65,7 +65,7 @@ public class JavaScriptResourceReference extends PackageResourceReference
}
@Override
- public JavaScriptPackageResource getResource()
+ public IJavaScriptPackageResource getResource()
{
return new JavaScriptPackageResource(getScope(), getName(), getLocale(), getStyle(),
getVariation());
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/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..9975f2e 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
@@ -61,7 +61,7 @@ import org.slf4j.LoggerFactory;
* @author Juergen Donnerstag
* @author Matej Knopp
*/
-public class PackageResource extends AbstractResource implements IStaticCacheableResource
+public class PackageResource extends AbstractResource implements IPackageResource
{
private static final Logger log = LoggerFactory.getLogger(PackageResource.class);
@@ -171,9 +171,10 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
return style != null ? style : Session.get().getStyle();
}
+ @Override
public Serializable getCacheKey()
{
- IResourceStream stream = getCacheableResourceStream();
+ final IResourceStream stream = locateResourceStream(getCurrentStyle(), getCurrentLocale());
// if resource stream can not be found do not cache
if (stream == null)
@@ -185,21 +186,13 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
stream.getVariation());
}
- /**
- * Gets the scoping class, used for class loading and to determine the package.
- *
- * @return the scoping class
- */
+ @Override
public final Class<?> getScope()
{
return WicketObjects.resolveClass(scopeName);
}
- /**
- * Gets the style.
- *
- * @return the style
- */
+ @Override
public final String getStyle()
{
return style;
@@ -339,34 +332,25 @@ 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());
}
- /**
- * locate resource stream for current resource
- *
- * @return resource stream or <code>null</code> if not found
- */
+ @Override
public IResourceStream getResourceStream()
{
return internalGetResourceStream(style, locale);
}
- /**
- * @return whether {@link org.apache.wicket.resource.ITextResourceCompressor} can be used to compress the
- * resource.
- */
- public boolean getCompress()
+ @Override
+ public boolean isCompress()
{
return compress;
}
- /**
- * @param compress
- * A flag indicating whether the resource should be compressed.
- */
+ @Override
public void setCompress(boolean compress)
{
this.compress = compress;
@@ -374,10 +358,7 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
private IResourceStream internalGetResourceStream(final String style, final Locale locale)
{
- IResourceStreamLocator resourceStreamLocator = Application.get()
- .getResourceSettings()
- .getResourceStreamLocator();
- IResourceStream resourceStream = resourceStreamLocator.locate(getScope(), absolutePath, style, variation, locale, null, false);
+ IResourceStream resourceStream = locateResourceStream(style, locale);
Class<?> realScope = getScope();
String realPath = absolutePath;
@@ -415,6 +396,24 @@ public class PackageResource extends AbstractResource implements IStaticCacheabl
}
/**
+ * locate resource stream taking style and locale into account
+ *
+ * @param style
+ * client style
+ * @param locale
+ * client locale
+ * @return client-specific resource stream
+ */
+ private IResourceStream locateResourceStream(final String style, final Locale locale)
+ {
+ IResourceStreamLocator resourceStreamLocator = Application.get()
+ .getResourceSettings()
+ .getResourceStreamLocator();
+
+ return resourceStreamLocator.locate(getScope(), absolutePath, style, variation, locale, null, false);
+ }
+
+ /**
* @param scope
* resource scope
* @param path
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceDecorator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceDecorator.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceDecorator.java
new file mode 100644
index 0000000..372dc8e
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceDecorator.java
@@ -0,0 +1,85 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource;
+
+import java.io.Serializable;
+
+import org.apache.wicket.util.resource.IResourceStream;
+
+/**
+ * wraps an existing {@link org.apache.wicket.request.resource.IPackageResource} and
+ * enables overriding of its public methods.
+ *
+ * @autor Peter Ertl
+ */
+public class PackageResourceDecorator implements IPackageResource
+{
+ private final IPackageResource resource;
+
+ public PackageResourceDecorator(final IPackageResource resource)
+ {
+ this.resource = resource;
+ }
+
+ @Override
+ public Class<?> getScope()
+ {
+ return resource.getScope();
+ }
+
+ @Override
+ public String getStyle()
+ {
+ return resource.getStyle();
+ }
+
+ @Override
+ public IResourceStream getResourceStream()
+ {
+ return resource.getResourceStream();
+ }
+
+ @Override
+ public boolean isCompress()
+ {
+ return resource.isCompress();
+ }
+
+ @Override
+ public void setCompress(final boolean compress)
+ {
+ resource.setCompress(compress);
+ }
+
+ @Override
+ public Serializable getCacheKey()
+ {
+ return resource.getCacheKey();
+ }
+
+ @Override
+ public IResourceStream getCacheableResourceStream()
+ {
+ return resource.getCacheableResourceStream();
+ }
+
+ @Override
+ public void respond(final Attributes attributes)
+ {
+ resource.respond(attributes);
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
index 6becc8e..924555b 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/PackageResourceReference.java
@@ -107,7 +107,7 @@ public class PackageResourceReference extends ResourceReference
* @see org.apache.wicket.request.resource.ResourceReference#getResource()
*/
@Override
- public PackageResource getResource()
+ public IPackageResource getResource()
{
final String extension = getExtension();
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/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..09f74eb 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
@@ -34,8 +34,9 @@ public interface IStaticCacheableResource extends IResource
* get unique caching key for the resource stream produced by
* {@link #getCacheableResourceStream()}
*
- * @return serializable key with properly supports {@link #equals(Object)} and
- * {@link #hashCode()}
+ * @return serializable key with properly implements {@link #equals(Object)} and
+ * {@link #hashCode()} or {@code null} which indicates the resource
+ * must not be processed by {@link IResourceCachingStrategy}
*/
Serializable getCacheKey();
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/resource/NonCachingPackageResourceDecorator.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/resource/NonCachingPackageResourceDecorator.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/resource/NonCachingPackageResourceDecorator.java
new file mode 100644
index 0000000..ac4a8d7
--- /dev/null
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/resource/NonCachingPackageResourceDecorator.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.wicket.request.resource.caching.resource;
+
+import java.io.Serializable;
+
+import org.apache.wicket.request.resource.IPackageResource;
+import org.apache.wicket.request.resource.PackageResourceDecorator;
+
+/**
+ * wraps an existing {@link IPackageResource} and disables caching via
+ * {@link org.apache.wicket.request.resource.caching.IResourceCachingStrategy}
+ * by returning {@code null} for the cache key in method
+ * {@link org.apache.wicket.request.resource.caching.IStaticCacheableResource#getCacheKey()}
+ *
+ * @autor Peter Ertl
+ */
+public class NonCachingPackageResourceDecorator extends PackageResourceDecorator
+{
+ public NonCachingPackageResourceDecorator(final IPackageResource resource)
+ {
+ super(resource);
+ }
+
+ @Override
+ public Serializable getCacheKey()
+ {
+ // disable caching by returning null
+ return null;
+ }
+}
http://git-wip-us.apache.org/repos/asf/wicket/blob/91c604d5/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
----------------------------------------------------------------------
diff --git a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
index dbcec9d..03bd350 100644
--- a/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
+++ b/wicket-core/src/main/java/org/apache/wicket/request/resource/caching/version/RequestCycleCachedResourceVersion.java
@@ -81,7 +81,7 @@ public class RequestCycleCachedResourceVersion implements IResourceVersion
key = resource.getCacheKey();
// does cache exist within current request cycle?
- if (cache == null)
+ if (cache == null && key != null)
{
// no, so create it
requestCycle.setMetaData(CACHE_KEY, cache = Generics.newHashMap());