Re: freemarker Struts 2 Thread Lock Issue

Santosh Sharma <[email protected]>
Newsgroups gmane.comp.web.freemarker.user
Message-ID <OFFF21625F.E30D04FD-ON852575BC.005A2CAF-852575BC.005A2CB0@sherwin.com>
Hi Daniel ,

I m using version 3.2.8 . I looked at Freemarker site and they have done a lot of fixes in cache in version 3.2.13 . I m upgrading to latest 3.2.15 and will test with new version .

Thanks

San

-----Daniel Dekany <[email protected]> wrote: -----

To: sanrosh95 <[email protected]>
From: Daniel Dekany <[email protected]>
Date: 05/20/2009 11:14AM
cc: [email protected]
Subject: Re: [FreeMarker-user] freemarker Struts 2 Thread Lock Issue

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

_______________________________________________
FreeMarker-user mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/freemarker-user
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.