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

Lukasz Lenart resolved WW-5690.
-------------------------------
    Resolution: Fixed

> Defer loading the dev-mode error template until first use
> ---------------------------------------------------------
>
>                 Key: WW-5690
>                 URL: https://issues.apache.org/jira/browse/WW-5690
>             Project: Struts 2
>          Issue Type: Task
>          Components: Core
>            Reporter: Lukasz Lenart
>            Assignee: Lukasz Lenart
>            Priority: Major
>             Fix For: 7.4.0
>
>          Time Spent: 40m
>  Remaining Estimate: 0h
>
> {{DefaultDispatcherErrorHandler.init()}} built a FreeMarker configuration and 
> loaded {{/org/apache/struts2/dispatcher/error.ftl}} on *every* startup — 
> including production, where the problem report is never rendered. 
> {{handleError(...)}} only reaches it when devMode is on; otherwise it 
> delegates to the container's error page via {{sendErrorResponse(...)}}.
> So every Struts application paid to initialise FreeMarker for a page most of 
> them never show.
> h2. Change
> {{init(ServletContext)}} now only stores the servlet context. A new 
> {{protected getTemplate()}} loads the template on first use and caches it in 
> a {{volatile}} field.
> No lock: two threads racing on the very first error may both load it, which 
> is harmless — FreeMarker caches templates in its own {{Configuration}} — and 
> cheaper than locking a path taken once per application lifetime.
> h2. Behavioural change
> A missing or unparsable {{error.ftl}} used to throw {{StrutsException}} from 
> {{init()}} and fail the application at boot. It now surfaces on the first 
> dev-mode error, where the existing {{catch}} in {{handleErrorInDevMode(...)}} 
> degrades to {{sendError(code, "Unable to show problem report: ...")}}. A 
> dev-only template should not stop a production application starting.
> h2. Scope
> Startup cost only. The {{FreemarkerManager}} injection, the 
> {{freemarker.template.Template}} import and {{error.ftl}} itself all remain — 
> removing them is WW-5693.
> This ticket was originally filed as "Remove core's FreeMarker dependency from 
> DefaultDispatcherErrorHandler" and has been narrowed to the change that 
> actually shipped.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to