Re: freemarker Struts 2 Thread Lock Issue

Daniel Dekany <[email protected]>
Newsgroups gmane.comp.web.freemarker.user
Message-ID <[email protected]>
Wednesday, May 20, 2009, 4:47:23 PM, sanrosh95 wrote:
>
> Hi ,
>
> Is there a way to disable the caching in Freemarker

Setting maximum cache size to 0 ("cache_storage" setting to
""strong:0, soft:0"") should do that effectively (I didn't tried it)
or to plug-in a dummy freemarker.cache.CacheStorage implementation
with the sme setting (use a value like
"com.example.YourDummyCacheStorage").

> and what will be its impact on Performance .

It has serious performance impact, as without cache getting a template
includes reading it from the HDD (or from the OS disk cache, of
course...) plus parsing the template to Abstract Syntax Tree.

> I Saw a lot of threads hanging with below kind of stack .

That's a can easily be a critical bug if it's indeed the mistake of
FreeMarker... What FreeMarker version does ${.version} print?

> Thanks
> San
>
> "ExecuteThread: '22' for queue: 'default'" daemon prio=5 tid=0x00286df8
> nid=0x20 waiting for monitor entry [0x655f9000..0x655ffc30]
>         at
> freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:245)
>         - waiting to lock <0x959b51d0> (a freemarker.cache.MruCacheStorage)
>         at
> freemarker.cache.TemplateCache.getTemplate(TemplateCache.java:229)
>         at
> freemarker.template.Configuration.getTemplate(Configuration.java:487)
>         at
> freemarker.core.Environment.getTemplateForInclusion(Environment.java:1357)
>         at freemarker.core.Include.accept(Include.java:143)
>         at freemarker.core.Environment.visit(Environment.java:196)
>         at freemarker.core.MixedContent.accept(MixedContent.java:92)
>         at freemarker.core.Environment.visit(Environment.java:196)
>         at freemarker.core.Environment.process(Environment.java:176)
>         at freemarker.template.Template.process(Template.java:232)
>         at
> org.apache.struts2.components.template.FreemarkerTemplateEngine.renderTemplate(FreemarkerTemplateEngine.java:168)
>         at
> org.apache.struts2.components.UIBean.mergeTemplate(UIBean.java:530)
>         at
> org.apache.struts2.components.ClosingUIBean.start(ClosingUIBean.java:58)
>         at
> org.apache.struts2.views.jsp.ComponentTagSupport.doStartTag(ComponentTagSupport.java:54)
>         at
> jsp_servlet._portlet._jsp.__DisplayPortlet._jspService(__DisplayPortlet.java:286)
>         at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
>         at
> weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
>         at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
>         at
> weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> com.sherwin.portal.user.action.AuthenticationFilter.doFilter(AuthenticationFilter.java:259)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:644)
>         at
> weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:423)
>         at
> org.apache.struts2.dispatcher.ServletDispatcherResult.doExecute(ServletDispatcherResult.java:141)
>         at
> org.apache.struts2.dispatcher.StrutsResultSupport.execute(StrutsResultSupport.java:178)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.executeResult(DefaultActionInvocation.java:348)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:253)
>         at
> com.opensymphony.xwork2.interceptor.DefaultWorkflowInterceptor.doIntercept(DefaultWorkflowInterceptor.java:221)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.validator.ValidationInterceptor.doIntercept(ValidationInterceptor.java:150)
>         at
> org.apache.struts2.interceptor.validation.AnnotationValidationInterceptor.doIntercept(AnnotationValidationInterceptor.java:48)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.ConversionErrorInterceptor.intercept(ConversionErrorInterceptor.java:123)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.ParametersInterceptor.doIntercept(ParametersInterceptor.java:184)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.StaticParametersInterceptor.intercept(StaticParametersInterceptor.java:105)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> org.apache.struts2.interceptor.CheckboxInterceptor.intercept(CheckboxInterceptor.java:83)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> org.apache.struts2.interceptor.FileUploadInterceptor.intercept(FileUploadInterceptor.java:207)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.ModelDrivenInterceptor.intercept(ModelDrivenInterceptor.java:74)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.ScopedModelDrivenInterceptor.intercept(ScopedModelDrivenInterceptor.java:127)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> org.apache.struts2.interceptor.ProfilingActivationInterceptor.intercept(ProfilingActivationInterceptor.java:107)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> org.apache.struts2.interceptor.debugging.DebuggingInterceptor.intercept(DebuggingInterceptor.java:206)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.ChainingInterceptor.intercept(ChainingInterceptor.java:115)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.I18nInterceptor.intercept(I18nInterceptor.java:143)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.PrepareInterceptor.doIntercept(PrepareInterceptor.java:121)
>         at
> com.opensymphony.xwork2.interceptor.MethodFilterInterceptor.intercept(MethodFilterInterceptor.java:86)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> org.apache.struts2.interceptor.ServletConfigInterceptor.intercept(ServletConfigInterceptor.java:170)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.AliasInterceptor.intercept(AliasInterceptor.java:123)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> com.opensymphony.xwork2.interceptor.ExceptionMappingInterceptor.intercept(ExceptionMappingInterceptor.java:176)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:224)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation$2.doProfiling(DefaultActionInvocation.java:223)
>         at
> com.opensymphony.xwork2.util.profiling.UtilTimerStack.profile(UtilTimerStack.java:455)
>         at
> com.opensymphony.xwork2.DefaultActionInvocation.invoke(DefaultActionInvocation.java:221)
>         at
> org.apache.struts2.impl.StrutsActionProxy.execute(StrutsActionProxy.java:50)
>         at
> org.apache.struts2.dispatcher.Dispatcher.serviceAction(Dispatcher.java:504)
>         at
> org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:422)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:644)
>         at
> weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:423)
>         at
> weblogic.servlet.jsp.PageContextImpl.include(PageContextImpl.java:154)
>         at jsp_servlet._main.__home_sw._jspService(__home_sw.java:171)
>         at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
>         at
> weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
>         at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
>         at
> weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> com.sherwin.portal.user.action.AuthenticationFilter.doFilter(AuthenticationFilter.java:259)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:644)
>         at
> weblogic.servlet.internal.RequestDispatcherImpl.include(RequestDispatcherImpl.java:423)
>         at
> weblogic.servlet.jsp.PageContextImpl.include(PageContextImpl.java:154)
>         at jsp_servlet._main.__main._jspService(__main.java:1473)
>         at weblogic.servlet.jsp.JspBase.service(JspBase.java:33)
>         at
> weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
>         at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
>         at
> weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> com.sherwin.portal.user.action.AuthenticationFilter.doFilter(AuthenticationFilter.java:259)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:326)
>         at
> org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
>         at
> org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
>         at
> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
>         at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
>         at
> org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
>         at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>         at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>         at
> weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
>         at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
>         at
> weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> com.sherwin.portal.user.action.AuthenticationFilter.doFilter(AuthenticationFilter.java:259)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> weblogic.servlet.internal.RequestDispatcherImpl.forward(RequestDispatcherImpl.java:326)
>         at
> org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
>         at
> org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
>         at
> org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
>         at
> org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
>         at
> org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
>         at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
>         at
> javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
>         at
> weblogic.servlet.internal.ServletStubImpl$ServletInvocationAction.run(ServletStubImpl.java:1006)
>         at
> weblogic.servlet.internal.ServletStubImpl.invokeServlet(ServletStubImpl.java:419)
>         at
> weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:28)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> com.sherwin.portal.user.action.AuthenticationFilter.doFilter(AuthenticationFilter.java:259)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> org.displaytag.filter.ResponseOverrideFilter.doFilter(ResponseOverrideFilter.java:125)
>         at
> weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:27)
>         at
> weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:6724)
>         at
> weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
>         at
> weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)
>         at
> weblogic.servlet.internal.WebAppServletContext.invokeServlet(WebAppServletContext.java:3764)
>         at
> weblogic.servlet.internal.ServletRequestImpl.execute(ServletRequestImpl.java:2644)
>         at
> weblogic.kernel.ExecuteThread.execute(ExecuteThread.java:219)
>         at weblogic.kernel.ExecuteThread.run(ExecuteThread.java:178)

-- 
Best regards,
 Daniel Dekany


------------------------------------------------------------------------------
Crystal Reports - New Free Runtime and 30 Day Trial
Check out the new simplified licensing option that enables 
unlimited royalty-free distribution of the report engine 
for externally facing server and web deployment. 
http://p.sf.net/sfu/businessobjects
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.