apache > cocoon
 

Portal: The CachingURICoplet

The CachingURICoplet is an extension of the URICoplet (see previous section) providing caching of the coplet content. Usually the user of a portal only interacts with one single coplet at a time. As the interaction redraws the whole portal page with several coplets, all coplets are asked to give their content. In many situations this is not wanted. For example if the coplet contains a form or has a state, asking the coplet to give its content although the user has not submitted the form, might result in unwanted responses.

Therefore the CachingURICoplet caches the content of a coplet in the session of the user. All further requests are served from the cache until the user interacts with exactly this coplet. In this case the cache is cleared, the coplet is invoked again and the new content is cached for further requests.

If you want to disable the caching, you can specify the boolean attribute cache-enabled with the value false in the coplet data configuration.

You can also programmatically turn off caching for a coplet for a single request by setting the attribute doNotCache with any value on the coplet instance data. For example if you want to set this from flow:

     ...
       var coplet = GET_THE_COPLET_INSTANCE_DATA;
       coplet.setAttribute("doNotCache", "1");
     ...
     

By default the caching uri adapter ignores sizing events for clearing the cache. This ensures that minimizing a coplet does not clear the cache. However, if you want to disable the cache on a sizing event you can turn this on in the configuration for a coplet data:

...
<coplet-data id="Portal-Demo" name="standard">
   <title>Introduction</title>
   <coplet-base-data>CachingURICoplet</coplet-base-data>
   <attribute>
      <name>uri</name>
      <value xsi:type="java:java.lang.String" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         cocoon:/coplets/docs/portal-demo.html
      </value>
   </attribute>
   <attribute>
      <name>ignore-sizing-events</name>
      <value xsi:type="java:java.lang.Boolean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">false</value>
   </attribute>
</coplet-data>
...
   

Global Caching

The default caching mechanism caches the contents in the user session. If you want to use a global cache across all users, you can turn this on with an attribute on the coplet data configuration:

...
<coplet-data id="Portal-Demo" name="standard">
   <title>Introduction</title>
   <coplet-base-data>CachingURICoplet</coplet-base-data>
   <attribute>
     <name>uri</name>
     <value xsi:type="java:java.lang.String" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
         cocoon:/coplets/docs/portal-demo.html
     </value>
   </attribute>
   <attribute>
     <name>cache-global</name>
     <value xsi:type="java:java.lang.Boolean" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">true</value>
   </attribute>
</coplet-data>
...
     

By using the boolean cache-global attribute with the value true the contents of the coplet is cached in the usual Cocoon cache making it available to all users.

The global cache is useful for static content that is the same for all users.