[ 
https://issues.apache.org/jira/browse/WW-4147?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13713660#comment-13713660
 ] 

Jasper Rosenberg edited comment on WW-4147 at 7/23/13 11:39 AM:
----------------------------------------------------------------

Sounds wise.  BTW, is there a better way to get access to the Container in the 
Filter?  If not, that might be worth exposing for subclasses of 
StrutsPrepareAndExecuteFilter.

Nevermind, I found the override method: postInit(Dispatcher, 
FilterConfig),which I can use to get the Container.
                
      was (Author: perfnorm):
    Sounds wise.  BTW, is there a better way to get access to the Container in 
the Filter?  If not, that might be worth exposing for subclasses of 
StrutsPrepareAndExecuteFilter.
                  
> 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.17
>
>
> 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 is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to