cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Niels van Kampenhout <n.vankampenh...@hippo.nl>
Subject Re: Caching jx *without* flow
Date Mon, 18 Sep 2006 08:28:19 GMT
Leszek Gawron wrote:
> 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.
> 

I must admit that I don't know much about JXTG from a developer's 
p.o.v., but from a user's p.o.v. (building web sites) our 
HippoJXTemplateGenerator [1] has been a huge improvement over the JXTG. 
But then, maybe JXTG has features that I don't know about which could 
make life easier without the modifications in [1]. I can't find them in 
the documentation [2,3] however. I guess I need to dive into the code 
for that ;-)

Thanks,
Niels

[1] 
http://svn.hippocms.org/repos/hippo/hippo-cocoon-extensions/trunk/hippo-misc/src/java/nl/hippo/cocoon/generation/HippoJXTemplateGenerator.java
[2] http://cocoon.apache.org/2.1/userdocs/jx-generator.html
[3] http://wiki.apache.org/cocoon/JXTemplateGenerator


Mime
View raw message