[
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.7.1
(was: 6.7.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.7.1
>
>
> 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)