Hello,
i did a step by step analysis of the problem using eclipse debugger and i found the
culprit. Before i submit a bugreport, can someone confirm me this is unexpected behaviour?
Inside
com.xpn.xwiki.internal.cache.rendering.DefaultRenderingCache.getRenderedContent(DocumentReference
documentReference, String source, XWikiContext context), there is a call to
this.cache.get(documentReference, source, getAction(context), context.getLanguage(),
getRequestParameters(context));
which uses this information to generate a cache Key that is then looked up in cache.
However, getRequestParameters(context) in my case is returning
{menu=[Ljava.lang.String;@3e5da853, xpage=[Ljava.lang.String;@76d60121}
where it should return something like
{menu={SysAdminRmi.Menu}, xpage={plain}}
As a result, my cache key change at each reaquest because values are not properly used and
so even if my page is cache, it's never rendered from cache.
Reason, behind this is this code in getRequestParameters:
Map<String, String> parameters = context.getRequest().getParameterMap();
...
return parameters.toString();
This map is generated by com.xpn.xwiki.web.XWikiServletRequest.getParameterMap, and is
Map<String,Object> and not a Map<String,String>! Here is the proving code
public Map getParameterMap()
{
Map newMap = new HashMap();
Map map = this.request.getParameterMap();
Iterator it = map.keySet().iterator();
while (it.hasNext()) {
String key = (String) it.next();
Object value = map.get(key);
if (value instanceof String) {
newMap.put(key, filterString((String) value));
} else if (value instanceof String[]) {
newMap.put(key, filterStringArray((String[]) value));
} else {
newMap.put(key, value);
}
}
return map;
}
Clearly,
In my case, catalina request facade does decode so that ParameterMap return
Map<String,String[1]> instead of Map<String,String>.
Consequences? Cache only works when there are no request parameters.
Is there some way for me to replace DefaultRenderingCache with another implementation i
write that does not have this issue, as a temporary solution?
----- Mail original -----
De: "Thomas Mortagne" <thomas.mortagne(a)xwiki.com>
À: "XWiki Users" <users(a)xwiki.org>
Envoyé: Mercredi 5 Décembre 2012 18:05:59
Objet: Re: [xwiki-users] xwiki render cache not working?
On Wed, Dec 5, 2012 at 3:29 PM, David Delbecq <david.delbecq(a)meteo.be>wrote;wrote:
Hello,
i have a specific wiki page that is quite slow to render because some
groovy code and macros in there are quite slow. Fortunately, content does
not change often, si i tried to make it faster for user by using cache
rendering.
Here is what is inside my xwiki.cfg:
xwiki.rendering.defaultCacheDuration=3600
And here is my xwiki.properties
core.renderingcache.enabled=true
core.renderingcache.documents=wiki:.*
core.renderingcache.size=200
# Default value is 300 (5 min).
# core.renderingcache.duration=300
I have also this inside my page:
{{velocity}}
$context.setCacheDuration(60)
//complex content here that has a custom groovy macro and a velocity
include
{{/velocity}}
{{groovy}}
System.out.println("***************************************phone menu not
in cache")
{{/groovy}}
And i see in my log that, everytime, the System.out is executed, meaning
the render cache is not used. What's my configuration problem? What did i
miss?
Note: using xwiki 4.1.2 and the url i try is
http://server/xwiki/bin/view/MySpace/MyPage?menu=Test.Menu&xpage=plain
Thank you.
David Delbecq
_______________________________________________
users mailing list
users(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/users
Rendering cache works well for me.
First of all, not that your are mixing two different features here: what
you find in xwiki.cfg and $context.setCacheDuration() are old caching
system which is maintained for retro-compatibility reasons only in
xwiki/1.0 syntax.
Now about the more generic rendering cache located in xwiki.properties, is
your wiki name really "wiki" ? Because here you indicated that you wanted
to cache all the pages in the wiki which has "wiki" as identifier. If you
are in a single wiki mode (XWiki Enterprise for example) you can simply
remove the wiki part as in
core.renderingcache.documents=Space.Page
--
Thomas Mortagne
_______________________________________________
users mailing list
users(a)xwiki.org
http://lists.xwiki.org/mailman/listinfo/users