struts-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Lukasz Lenart (JIRA)" <j...@apache.org>
Subject [jira] [Updated] (WW-4147) Have StrutsPrepareAndExecuteFilter initialize Freemarker rather than first actual Request
Date Sat, 08 Mar 2014 17:16:44 GMT

     [ 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:     (was: 2.3.17)
                   2.3.x

> 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: 2.3.x
>
>
> 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
(v6.2#6252)

Mime
View raw message