[ 
https://issues.apache.org/jira/browse/TILES-522?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Mck SembWever updated TILES-522:
--------------------------------

    Description: 
TeamplateAttributeRender.write(..) boils down to using 
JspRuntimeLibrary.include(..)

In Tomcat-6 this involves wrapping the request and response (a number of 
times?) and going through security checks (again and again and again...).

At FINN.no, norway's second largest website, we're getting scores of requests 
per second per jvm and seeing this method becoming a bottleneck, mainly due to 
thread contention in the security checks.

The method can be sped up by calling, if possible, requestDispatcher.include(..)

For example we have overridden TemplateAttributeRender like

    public void write(
            final Object template,
            final Attribute attribute,
            final TilesRequestContext request) throws IOException {

        if(request instanceof JspTilesRequestContext && template instanceof 
String){
            try {
                ((JspTilesRequestContext) request)
                        .getPageContext()
                        .getServletContext()
                        .getRequestDispatcher((String)template)
                        .include((ServletRequest) request.getRequest(), 
(ServletResponse) request.getResponse());
            } catch (ServletException ex) {
                throw new TilesIOException(ex);
            }
        }else{
            super.write(template, attribute, request);
        }
    }


I doubt that this is an appropriate patch to apply, it hides superclass 
functionality, but maybe there is a better place to apply it?

  was:
TeamplateAttributeRender.write(..) boils down to using 
JspRuntimeLibrary.include(..)

In Tomcat-6 this involves wrapping the request and response (a number of 
times?) and going through security checks (again and again and again...).

At FINN.no, norway's second largest website, we're getting scores of requests 
per second per jvm and seeing this method becoming a bottleneck, mainly due to 
thread contention in the security checks.

The method can be sped up by calling, if possible, requestDispatcher.include(..)

For example we have overridden TemplateAttributeRender like

    public void write(
            final Object template,
            final Attribute attribute,
            final TilesRequestContext request) throws IOException {

        if(request instanceof JspTilesRequestContext && template instanceof 
String){
            try {
                ((JspTilesRequestContext) request)
                        .getPageContext()
                        .getServletContext()
                        .getRequestDispatcher((String)template)
                        .include((ServletRequest) request.getRequest(), 
(ServletResponse) request.getResponse());
            } catch (ServletException ex) {
                throw new TilesIOException(ex);
            }
        }else{
            super.write(template, attribute, request);
        }
    }


Maybe it's possible to apply this code? Or better yet maybe there's a better 
place to apply it? (I've created the issue to spawn the discussion...i'm not 
totally convince myself this is code that should be committed...)


> Performance of TemplateAttributeRender in Tomcat
> ------------------------------------------------
>
>                 Key: TILES-522
>                 URL: https://issues.apache.org/jira/browse/TILES-522
>             Project: Tiles
>          Issue Type: Task
>          Components: tiles-core
>    Affects Versions: 2.2.2
>         Environment: Java6, Java7, Tomcat6
>            Reporter: Mck SembWever
>            Priority: Minor
>              Labels: performance
>
> TeamplateAttributeRender.write(..) boils down to using 
> JspRuntimeLibrary.include(..)
> In Tomcat-6 this involves wrapping the request and response (a number of 
> times?) and going through security checks (again and again and again...).
> At FINN.no, norway's second largest website, we're getting scores of requests 
> per second per jvm and seeing this method becoming a bottleneck, mainly due 
> to thread contention in the security checks.
> The method can be sped up by calling, if possible, 
> requestDispatcher.include(..)
> For example we have overridden TemplateAttributeRender like
>     public void write(
>             final Object template,
>             final Attribute attribute,
>             final TilesRequestContext request) throws IOException {
>         if(request instanceof JspTilesRequestContext && template instanceof 
> String){
>             try {
>                 ((JspTilesRequestContext) request)
>                         .getPageContext()
>                         .getServletContext()
>                         .getRequestDispatcher((String)template)
>                         .include((ServletRequest) request.getRequest(), 
> (ServletResponse) request.getResponse());
>             } catch (ServletException ex) {
>                 throw new TilesIOException(ex);
>             }
>         }else{
>             super.write(template, attribute, request);
>         }
>     }
> I doubt that this is an appropriate patch to apply, it hides superclass 
> functionality, but maybe there is a better place to apply it?

--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to