myfaces-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Leonardo Uribe (JIRA)" <...@myfaces.apache.org>
Subject [jira] [Created] (MYFACES-3216) check concurrency problems over static maps holding class metadata information (_ComponentAttributesMap and MetaRulesetImpl)
Date Mon, 11 Jul 2011 18:17:00 GMT
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

        

Mime
View raw message