CachingServletServiceSerializer
-------------------------------

                 Key: COCOON-2320
                 URL: https://issues.apache.org/jira/browse/COCOON-2320
             Project: Cocoon
          Issue Type: Improvement
          Components: * Cocoon Core, - Servlet service framework
    Affects Versions: 2.2-dev (Current SVN)
            Reporter: Javier Puerto
            Priority: Minor


Hello Cocoon developers,

We are using Apache Cocoon 2.2 for a project and I've found a bottleneck in our 
template system. We use servlet service components to render our pages in the 
same way you can see for Style Block. The current Cocoon Welcome block is an 
example.

This way of rendering is very useful but as currently the servlet services 
components doesn't implement CacheableServiceComponent interface, all the 
request will be processed completely at the end.

For our usecase, here is an example:

<map:match pattern="x">
  <map:generate ...
  <map:transform ...
  <map:include ...
  <map:serialize type="servletService">
    <map:parameter name="service" 
value="servlet:style:/service/common/simple-page2html"/>
  </map:serialize>
</map:match>

The most expensive part is the serialization process because we use i18n, Link 
rewriter and some transformations. We can configure everything to be cacheable 
but at the end, the serialization process must be performed entirely. I've 
simply extended the current ServletServiceSerializer in 
CachingServletServiceSerializer adding the cache key as requested service URL 
and NOPValidity as validity object. This approach has a problem, due to the 
nature of the servlet service components we need to move all the dynamically 
generated content from our GUI block since if we detect that the content hasn't 
changed, the CachingServletServiceSerializer will not perform any process and 
will return the cached content. Also, as there's a little hack for serializer 
output mime type, if you want to use the new component you must set the 
serialization content type explicitly. See 
http://article.gmane.org/gmane.text.xml.cocoon.devel/73261

<map:match pattern="x">
  <map:generate ...
  <map:transform ...
  <map:include ...
  <map:serialize type="caching-servletService" mime-type="text/html">
    <map:parameter name="service" 
value="servlet:style:/service/common/simple-page2html"/>
  </map:serialize>
</map:match>

For our usecase seems to fit well and will allow us to enable the powerful 
cocoon caching system for a lot of pages. IMO, it's a problem when you want to 
use the ServletServiceSerializer to have a clean and common output for the 
template system and you can't use the caching even with static files.

Attached is the patch for cocoon-servlet-service-components block.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to