ghoward 2003/07/01 06:51:59
Modified: src/scratchpad/webapp/samples scratchpad-samples.xml Added: src/scratchpad/webapp/samples/eventcache eventcache.xsp sitemap.xmap Log: Scratchpad sample for event-based cache validity Revision Changes Path 1.1 cocoon-2.1/src/scratchpad/webapp/samples/eventcache/eventcache.xsp Index: eventcache.xsp =================================================================== <?xml version="1.0" encoding="ISO-8859-1"?> <!-- XSP event-based cache sample. $Id$ --> <xsp:page language="java" xmlns:xsp="http://apache.org/xsp" xmlns:xsp-request="http://apache.org/xsp/request/2.0"> <xsp:structure> <xsp:include>org.apache.excalibur.source.SourceValidity</xsp:include> <xsp:include>org.apache.cocoon.caching.validity.EventValidity</xsp:include> <xsp:include>org.apache.cocoon.caching.validity.NamedEvent</xsp:include> <xsp:include>java.io.Serializable</xsp:include> </xsp:structure> <xsp:logic> // artificial slowdown to make the effects of the cache visible final int DELAY_SECS = 2; /** * Generate the unique key for the cache. * * This key must be unique inside the space of this XSP page, it is used * to find the page contents in the cache (if getValidity says that the * contents are still valid). * * This method will be invoked before the getValidity() method. * * @return The generated key or null if the component * is currently not cacheable. */ public Serializable getKey() { // for our test, pages having the same value of "pageKey" will share // the same cache location return "" + request.getParameter("pageKey"); } /** * Generate the validity object, tells the cache how long to * keep contents having this key around. In this case, it will * be until an Event is retrieved matching the NamedEvent created below. * * Before this method can be invoked the getKey() method * will be invoked. * * @return The generated validity object or null if the * component is currently not cacheable. */ public SourceValidity getValidity() { return new EventValidity(new NamedEvent(request.getParameter("pageKey"))); } </xsp:logic> <page> <title>A Cacheable XSP Page (Demonstrating Event-Aware Caching)</title> <content> <para>This xsp page is based on (copied from) the cacheable xsp sample but there are some important differences. Read the text below, and the sitemap and source for more details. </para> <para> Hi there! I'm a simple dynamic page generated by XSP (eXtensible Server Pages). In order to use this sample property, you must have edited cocoon.roles and specified the class for role org.apache.cocoon.caching.Cache is set to be org.apache.cocoon.caching.impl.EventAwareCacheImpl. </para> <para> I need <xsp:expr>DELAY_SECS</xsp:expr> seconds to be generated, so you can tell if I'm being served from the cache or not. <br/> What you see here has been generated on <b><xsp:expr>new java.util.Date()</xsp:expr></b>. </para> <para> I'm cached for every different value of request parameter 'pageKey'. <br/> Here the value is: <b><xsp-request:get-parameter name="pageKey"/></b>. <br/> If this is not the same as the 'pageKey' parameter in the page URL, we have a problem. </para> <para> All other request parameters do not influence cache status. Unlike other cacheable pages in Cocoon, I can be un-cached by events external to Cocoon - for instance, when a database table or row is updated. <br/> My cache entry will be invalidated (actually, removed) when an event named <i><xsp-request:get-parameter name="pageKey"/></i> occurs. This can be manually simulated by clicking <a><xsp:attribute name="href">?<xsp-request:get-query-string/>&event=<xsp-request:get-parameter name="pageKey"/></xsp:attribute>here</a>. </para> <para> <b>NOTE: </b>Because the EventAwareCacheImpl has not yet implemented persistence for its mappings, the event mappings will disappear but the cached keys will not. Until this is implemented you will want to clear both the in-memory and persistent store after using this sample. Once the mapping from the EventAwareCacheImpl is gone, firing the events using the sample action <b>will not</b> clear those cached items. </para> <xsp:logic> // slowdown page generation. try { Thread.sleep(DELAY_SECS * 1000L); } catch (InterruptedException ie) { // Not much that can be done... } </xsp:logic> <para>Test links: <ul> <li><a target="_new" href="?pageKey=one">pageKey=one</a></li> <li><a target="_new" href="?pageKey=two">pageKey=two</a></li> <li><a target="_new" href="?pageKey=three&other=abc">pageKey=three, other=abc</a></li> <li><a target="_new" href="?pageKey=three&other=xyz">pageKey=three, other=xyz</a></li> </ul> </para> </content> </page> </xsp:page> 1.1 cocoon-2.1/src/scratchpad/webapp/samples/eventcache/sitemap.xmap Index: sitemap.xmap =================================================================== <?xml version="1.0"?> <!-- CVS $Id$ Event Cache Sample --> <map:sitemap xmlns:map="http://apache.org/cocoon/sitemap/1.0"> <map:components> <map:generators default="file"/> <map:transformers default="xslt"/> <map:readers default="resource"/> <map:serializers default="html"/> <map:matchers default="wildcard"/> <map:selectors default="browser"/> <map:actions> <map:action name="cacheevent" src="org.apache.cocoon.acting.CacheEventAction"/> </map:actions> </map:components> <map:pipelines> <map:pipeline> <map:match pattern=""> <map:act type="cacheevent"> <map:parameter name="event" value="{request-param:event}"/> </map:act> <map:generate type="serverpages" src="eventcache.xsp"/> <map:transform src="context://samples/stylesheets/dynamic-page2html.xsl"> <map:parameter name="servletPath" value="{request:servletPath}"/> <map:parameter name="sitemapURI" value="{request:sitemapURI}"/> <map:parameter name="contextPath" value="{request:contextPath}"/> <map:parameter name="file" value="xsp/{1}.xsp"/> <map:parameter name="remove" value="{0}"/> </map:transform> <map:serialize/> </map:match> </map:pipeline> </map:pipelines> </map:sitemap> 1.10 +8 -1 cocoon-2.1/src/scratchpad/webapp/samples/scratchpad-samples.xml Index: scratchpad-samples.xml =================================================================== RCS file: /home/cvs/cocoon-2.1/src/scratchpad/webapp/samples/scratchpad-samples.xml,v retrieving revision 1.9 retrieving revision 1.10 diff -u -r1.9 -r1.10 --- scratchpad-samples.xml 27 Jun 2003 20:10:43 -0000 1.9 +++ scratchpad-samples.xml 1 Jul 2003 13:51:59 -0000 1.10 @@ -40,4 +40,11 @@ A test of the Jelly generator - you have to download and install the jelly.jar first! </sample> </group> + <group name="Event Based Cache"> + <sample name="Event Based Cache" href="eventcache/?pageKey=one"> + A sample demonstrating a new system of cache invalidation based on + events usually external to Cocoon. Example uses include cache content + until a back-end database is updated, or EJB signals an update. + </sample> + </group> </samples>