Leszek Gawron wrote:

Sylvain Wallez wrote:

Leszek Gawron wrote:

Sylvain Wallez wrote:

<page jx:cache-key="news.id" jx:cache-validity="com.my.NewsHelper.getValidity(news.urgency)">



One question: if this NewsHelper is NOT an avalon component (or object instantiated by flow.createObject) then it doesn't have acces to any backend logic or data (for example database that stores expiration time for different news services). Would it be possible to instantiate this object via flow.createObject analogy?




Two anwsers to this:
- we could add a builtin "createObject()" to the JXG expression language, thus directly solving your problem. I don't think this is a good idea as it opens the door to too much code in the template.

I do not like it either.

- the NewsHelper object can be created in the flow and passed as viewData. This keeps things clean: the flow gives necessary data to the view, and the view pulls what it needs from that data, including means to compute the cache information.

That's fine by me. It's nearly the same what I proposed (if not the same). If somebody gave me some points I would like to implement some version of it.


Thinking out loud:
1. flow passes cache info to template via some object instance that provides cache key and validity. It could be 2 objects (one for key one for validity) but it looks like one object is cleaner (we could impose some interface - is there one in cocoon already?)


What flow passes to the view is completely up to your choices.

2. There is CachingJXTemplateGenerator that extends the one we have now.

3. CJXTG implements getKey() and getValidity(). According to cocoon docs if null is passed from these methods the result is not being cached. So we could even modify the existing generator and have only one that does caching or not.


Yep. No need for a cacheable extension.

4. "Compiled" page template has to hold 2 more values - cache key and validity assuming the values are Jexl or JXpath expressions.


Yep.

5. getValidity() and getKey() have access to the template and flow bizData (via FlowHelper). When invoked they get appropriate jexl(jxpath) expression and evaluate it against bizData. If there is no jx:cache-key jx:validity defined then null is returned and no caching is being performed.


Exactly.

6. voilla we have a jxtemplate that is very performant for sites slashdot like (I mean lots of reads, infrequent page updates).


Yupp.

I would like to become an active contributor but the entry step is too big without your help. I know it sounds a bit like a waste of time talking some simple functionality over and then doing the review instead of implementing it by oneself but if you choose the first variant you'll have a new active contributor in some future (near I hope).


You also have to consider time: we often don't have the time to implement all the nice feature we discuss here, and new contributors are therefore very welcome.

So ask whatever you need to get started, we'll try to help you in your way inside the Cocoon internals. Others will certainly learn from that too. About caching, you may want to read a wiki page [1] explaining how the pipeline machinery works.

[1] http://wiki.cocoondev.org/Wiki.jsp?page=WritingForCacheEfficiency

Sylvain

--
Sylvain Wallez                                  Anyware Technologies
http://www.apache.org/~sylvain           http://www.anyware-tech.com
{ XML, Java, Cocoon, OpenSource }*{ Training, Consulting, Projects }



Reply via email to