[ 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)