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

Lukasz Lenart updated WW-4147:
------------------------------
    Fix Version/s: 6.2.0
                       (was: 6.1.0)

> Have StrutsPrepareAndExecuteFilter initialize Freemarker rather than first 
> actual Request
> -----------------------------------------------------------------------------------------
>
>                 Key: WW-4147
>                 URL: https://issues.apache.org/jira/browse/WW-4147
>             Project: Struts 2
>          Issue Type: Improvement
>          Components: Other
>    Affects Versions: 2.3.15.1
>            Reporter: Jasper Rosenberg
>            Priority: Minor
>              Labels: freemarker, performance, startup
>             Fix For: 6.2.0
>
>
> Currently, the first request to the web app triggers getting the Freemarker 
> Configuration, which causes it to be built for the first time.  
> Depending on circumstances, this might be a bit slow.  It would be nice if 
> when struts was coming up, it forced Freemarker initialization before it the 
> server was declared ready to accept requests.
> The way I hacked around this was to extend StrutsPrepareAndExecuteFilter so 
> that in init(FilterConfig), I get the current FreemarkerManager, and call 
> .getConfiguration(filterConfig.getServletContext()) on it.
> As an aside, it was surprisingly difficult to get the Container to use to 
> inject the FreemarkerManager instance in StrutsPrepareAndExecuteFilter.  I'm 
> guessing I'm just missing something.
> I recognize not all struts apps are using freemarker, which is probably why 
> it inits lazily, but it would be great to have an easy hook, and 
> StrutsPrepareAndExecuteFilter is the obvious place since you have access to 
> the ServletContext.
> {code:java}
>     private FreemarkerManager freemarkerManager;
>     /**
>      * Override to initialize freemarker hooks proactively.
>      */
>     @Override
>     public void init(final FilterConfig filterConfig) throws ServletException 
> {
>         super.init(filterConfig);
>         // Inject the freemarker manager
>         prepare.assignDispatcherToThread();
>         try {
>             Dispatcher.getInstance().getContainer().inject(this);
>         } finally {
>             Dispatcher.setInstance(null);
>         }
>         
>         // Force initialization of the freemarker configuration
>         freemarkerManager.getConfiguration(filterConfig.getServletContext());
>     }
>     @Inject
>     public void setFreemarkerManager(FreemarkerManager freemarkerManager) {
>         this.freemarkerManager = freemarkerManager;
>     }
> {code}



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

Reply via email to