Leszek Gawron wrote:
While almost everybody buried XSP it has got one great feature that JXTG lacks: it's cacheable. I know that there is no way to implement automatic JXTG caching but what if I know on what env does jx template operate. If I know that it is for example only request param "abc" and "bcd" and session attribute "xxx" then I know when I can use cached entry. The question is: how?
Should I extend JXTemplateGenerator so it is a cached component? I understand it gets the validity methods to implement then. So every time I call my extended component from flow I pass also the validity calculated in flow. Something like this:
function niceCachedResponse() { var cacheKey = cocoon.request.get( "abc" ) + "!!spacer!!" + cocoon.request.get( "bcd" ) + "!!spacer!!" + cocoon.session.getAttribute( "xxx" ); var pageValidity = new DeltaTimeCacheValidity( 60 * 60 * 24 ); // one day cocoon.sendPage( "view/cached.jx", { JXTGExtCacheKey: cacheKey, JXTGExtpageValidity: pageValidity someOtherBizData: data } ); }
Does it have a chance to work ?
Well, it _could_ have a chance to work, but flowscript is definitely not the appropriate location to compute cache information for an element of the view pipeline.
The problem with JXG is that the template is the generate() method _only_ whereas an XSP is the full class, allowing to define getKey() and getValidity().
So what about adding two optional attributes on the template's root element, defining the cache information?
<page
xmlns:jx="http://apache.org/cocoon/templates/jx/1.0"
jx:cache-key='${cocoon.request.get("abc") + "!!spacer!!" + cocoon.request.get("bcd")....'
jx:cache-validity='${new DeltaTimeCacheValidity(60 * 60 * 24)}'>
... template ....
</page>
WDYT?
Sylvain
-- Sylvain Wallez Anyware Technologies http://www.apache.org/~sylvain http://www.anyware-tech.com { XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }
