Niels van Kampenhout wrote:
Leszek Gawron wrote:
Thorsten Scherler wrote:
Hi all, hi Ard,
http://marc.theaimsgroup.com/?l=xml-cocoon-users&m=115194685214066&w=2
"...
Now, the cached jx would depend on these three parameters.
Very easy to use, and less error prone than the flow part.
If somebody is interested in the code I will hear "
Yes very interested.
http://svn.apache.org/viewvc?view=rev&rev=446701
https://issues.apache.org/jira/browse/FOR-931
Can you attach a patch to this issue or commit it to cocoon directly?
Would be awesome.
Do I get it right:
you want to patch JXTG to automatically build up a cache key from
cocoon parameters?
<map:match pattern="foo">
<map:generate src="foobar.jx">
<map:parameter name="foo" value="bar"/>
<map:parameter name="bar" value="foo"/>
</map:generate>
<map:serialize/>
</map:match>
so cocoon:/foo gets cached with something like "foo=bar&bar=foo"?
Why need a patch for that? After all you already have jx:cache-key and
jx:cache-validity.
Since Ard is on holiday until the GetTogether, I'll try to answer this
question.
The reason is, as Ard said, to make it less error prone. People easily
make mistakes if they have to build a cachekey string themselves, en
they also easily forget to actually put the jx:cache-key and
jx:cache-validity attributes in the JX template. I am talking from
experience!
It also makes the code more readable/transparent/explicit, because you
don't need the extra flow step anymore in many cases.
1. You don't need the extraflow step even right now. jx:cache-key and
jx:cache-validity works no matter what controller was used.
2. The solution you are proposing is error prone. The jx object model
does not get narrowed only to cocoon parameters so you are still able to
use cocoon.session, cocoon.request.
3. I hardly see the point to make any JXTG customizations if you can do
something like:
<page
jx:cache-key="${Packages.org.apache.cocoon.template.CocoonParametersCacheKeyBuilder.buildKey(
cocoon.parameters )}" jx:cache-validity="${some validity}">
<.../>
</page>
and
public class CocoonParametersCacheKeyBuilder {
public static String buildKey( Parameters parameters ) {
// you probably need to sort cocoon parameters here so the order is
// explicit
StringBuffer buffer = new StringBuffer();
String[] parameterNames = parameters.getNames();
for ( int i = 0; i < parameterNames.length; ++i ) {
String currentParameterName = parameterNames[ i ];
if ( i > 0 )
buffer.append( "&" );
buffer.append( urlEncode( currentParameterName ) );
buffer.append( "=" );
buffer.append( urlEncode( parameters.getParameter(
currentParameterName ) ) );
}
return buffer.toString();
}
}
We could probably add this class to cocoon-template block and provide
some samples. Still - nothing needs to be changed.
--
Leszek Gawron, IT Manager MobileBox sp. z o.o.
+48 (61) 855 06 67 http://www.mobilebox.pl
mobile: +48 (501) 720 812 fax: +48 (61) 853 29 65