check concurrency problems over static maps holding class metadata information 
(_ComponentAttributesMap and MetaRulesetImpl)
----------------------------------------------------------------------------------------------------------------------------

                 Key: MYFACES-3216
                 URL: https://issues.apache.org/jira/browse/MYFACES-3216
             Project: MyFaces Core
          Issue Type: Bug
          Components: JSR-314
            Reporter: Leonardo Uribe
            Assignee: Leonardo Uribe


There is something suspicious about these two maps:

javax.faces.component._ComponentAttributesMap

    // Cache for component property descriptors
    private static Map<Class<?>, Map<String, PropertyDescriptor>> 
_propertyDescriptorCache = 
        new WeakHashMap<Class<?>, Map<String, PropertyDescriptor>>();

org.apache.myfaces.view.facelets.tag

    private final static WeakHashMap<ClassLoader, Map<String, MetadataTarget>> 
_metadata
            = new WeakHashMap<ClassLoader, Map<String, MetadataTarget>>();

Both maps do something similar, cache PropertyDescriptor and other information 
that is unique per class. The problem is WeakHashMap is not thread safe, so in 
both cases there is a potential risk of throw exceptions when calling "put" 
method under high load.

The solution is put proper synchronized blocks when calling to put is done, 
just like FactoryFinder does.

Reported stack trace by Rajadurai_p. See 
http://markmail.org/message/4md2rsiii5mjhvcr?q=MyFaces+-+Thread+issues+under+High+load
 for details:

Hi,

we are facing problems in MyFaces framework under high load. Bulk of the
application container threads (weblogic) are stuck upon a same stack trace.
I have pasted a sample stack trace below. Kindly help.

We use JSF 1.2, MyFaces 1.2.9, Tomahawk 1.1.9 & RichFaces 3.3.3.

java.beans.PropertyDescriptor.getReadMethod(PropertyDescriptor.java:158)

javax.faces.component._ComponentAttributesMap.getComponentProperty(_ComponentAttributesMap.java:382)

javax.faces.component._ComponentAttributesMap.get(_ComponentAttributesMap.java:227)

org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.renderHTMLAttribute(HtmlRendererUtils.java:584)

org.apache.myfaces.shared_tomahawk.renderkit.html.HtmlRendererUtils.renderHTMLAttributes(HtmlRendererUtils.java:598)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeBegin(HtmlTagRenderer.java:73)
       
javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:600)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:525)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeChildren(HtmlTagRenderer.java:111)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:528)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeChildren(HtmlTagRenderer.java:111)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)
       org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
       org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)

org.richfaces.renderkit.AbstractGridRenderer.encodeOneRow(AbstractGridRenderer.java:96)

org.richfaces.renderkit.AbstractRowsRenderer.process(AbstractRowsRenderer.java:83)
       org.ajax4jsf.model.SequenceDataModel.walk(SequenceDataModel.java:101)
       
org.ajax4jsf.component.UIDataAdaptorBase.walk(UIDataAdaptorBase.java:1156)

org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:104)

org.richfaces.renderkit.AbstractRowsRenderer.encodeRows(AbstractRowsRenderer.java:88)

org.richfaces.renderkit.AbstractRowsRenderer.encodeChildren(AbstractRowsRenderer.java:137)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)
       org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
       org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)

org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRenderer.java:78)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:528)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeChildren(HtmlTagRenderer.java:111)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)
       javax.faces.component.UIComponent.encodeAll(UIComponent.java:250)

com.sun.facelets.component.RepeatRenderer.encodeChildren(RepeatRenderer.java:64)
       com.sun.facelets.component.UIRepeat.process(UIRepeat.java:423)
       com.sun.facelets.component.UIRepeat.encodeChildren(UIRepeat.java:684)
       org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
       org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)

org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:200)

org.richfaces.renderkit.html.PanelRenderer.doEncodeChildren(PanelRenderer.java:195)
       org.ajax4jsf.renderkit.RendererBase.encodeChildren(RendererBase.java:120)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)
       org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
       org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
       org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:279)
       org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)

org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRenderer.java:78)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:528)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeChildren(HtmlTagRenderer.java:111)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:528)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:532)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeChildren(HtmlTagRenderer.java:111)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:528)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeChildren(HtmlTagRenderer.java:111)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:528)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeChildren(HtmlTagRenderer.java:111)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChild(RendererUtils.java:528)

org.apache.myfaces.shared_tomahawk.renderkit.RendererUtils.renderChildren(RendererUtils.java:511)

org.apache.myfaces.custom.htmlTag.HtmlTagRenderer.encodeChildren(HtmlTagRenderer.java:111)

javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:627)
       javax.faces.component.UIComponent.encodeAll(UIComponent.java:250)
       javax.faces.component.UIComponent.encodeAll(UIComponent.java:257)
       
com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:594)

org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)

org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)

org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:41)
       org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:140)
       javax.faces.webapp.FacesServlet.service(FacesServlet.java:187)

weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)

weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
       
weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:283)
       weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
       org.ajax4jsf.webapp.BaseXMLFilter.doXmlFilter(BaseXMLFilter.java:206)
       org.ajax4jsf.webapp.BaseFilter.handleRequest(BaseFilter.java:290)

org.ajax4jsf.webapp.BaseFilter.processUploadsAndHandleRequest(BaseFilter.java:388)
       org.ajax4jsf.webapp.BaseFilter.doFilter(BaseFilter.java:515)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

org.tuckey.web.filters.urlrewrite.RuleChain.handleRewrite(RuleChain.java:164)
       org.tuckey.web.filters.urlrewrite.RuleChain.doRules(RuleChain.java:141)

org.tuckey.web.filters.urlrewrite.UrlRewriter.processRequest(UrlRewriter.java:90)

org.tuckey.web.filters.urlrewrite.UrlRewriteFilter.doFilter(UrlRewriteFilter.java:407)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

org.apache.myfaces.webapp.filter.ExtensionsFilter.doFilter(ExtensionsFilter.java:384)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

com.xxx.yyy.zzz.CookieCartCountFilter.doFilter(CookieCartCountFilter.java:69)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

com.xxx.yyy.zzz.webservice.onesite.OneSiteCacheFilter.doFilter(OneSiteCacheFilter.java:388)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
       com.xxx.yyy.zzz.util.CachingFilter.doFilter(CachingFilter.java:143)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)
       com.xxx.yyy.zzz.util.JsessionidFilter.doFilter(JsessionidFilter.java:43)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

com.xxx.yyy.zzz.util.SessionCookieSupportFilter.doFilter(SessionCookieSupportFilter.java:180)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

de.hybris.platform.util.RootRequestFilter.doFilter(RootRequestFilter.java:741)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

weblogic.servlet.internal.RequestEventsFilter.doFilter(RequestEventsFilter.java:26)
       
weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:42)

weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3229)

weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
       weblogic.security.service.SecurityManager.runAs(SecurityManager.java:121)

weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2002)

weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:1908)

weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1362)
       weblogic.work.ExecuteThread.execute(ExecuteThread.java:209)
       weblogic.work.ExecuteThread.run(ExecuteThread.java:181)




--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to