3 Replies Latest reply on Nov 8, 2010 5:00 AM by ermanito

    Simultaneous a4j-requests cause exception

    ermanito

      Hi there,

       

      we got an issue in our JSF/RichFaces based application:

       

      If there are two simultaneous requests, one from a user (a4j:jsFunction) and another and by the system (a4j:poll), we get the following exception.

       

      Caused by: java.lang.NullPointerException: null
           at java.lang.String.compareTo(String.java:1167)
           at java.lang.String.compareTo(String.java:92)
           at java.util.Arrays.mergeSort(Arrays.java:1144)
           at java.util.Arrays.sort(Arrays.java:1079)
           at com.sun.faces.renderkit.RenderKitUtils.renderPassThruAttributesOptimized(RenderKitUtils.java:529)
           at com.sun.faces.renderkit.RenderKitUtils.renderPassThruAttributes(RenderKitUtils.java:365)
           at com.sun.faces.renderkit.html_basic.OutputLinkRenderer.renderAsActive(OutputLinkRenderer.java:226)
           at com.sun.faces.renderkit.html_basic.OutputLinkRenderer.encodeBegin(OutputLinkRenderer.java:102)
           at javax.faces.component.UIComponentBase.encodeBegin(UIComponentBase.java:813)
           at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:275)
           at org.ajax4jsf.renderkit.RendererBase.renderChildren(RendererBase.java:258)
           at org.ajax4jsf.renderkit.html.AjaxOutputPanelRenderer.encodeChildren(AjaxOutputPanelRenderer.java:78)
           at javax.faces.component.UIComponentBase.encodeChildren(UIComponentBase.java:837)
           at org.ajax4jsf.renderkit.RendererBase.renderChild(RendererBase.java:277)
           at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:166)
           at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:83)
           at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:157)
           at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:83)
           at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:157)
           at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxChildren(AjaxChildrenRenderer.java:83)
           at org.ajax4jsf.renderkit.AjaxChildrenRenderer.encodeAjaxComponent(AjaxChildrenRenderer.java:157)
           at org.ajax4jsf.renderkit.AjaxContainerRenderer.encodeAjax(AjaxContainerRenderer.java:123)
           at org.ajax4jsf.component.UIAjaxRegion.encodeAjax(UIAjaxRegion.java:263)
           at org.ajax4jsf.component.AjaxViewRoot$4.invokeContextCallback(AjaxViewRoot.java:489)
           at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:711)
           at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:675)
           at javax.faces.component.UIComponent.invokeOnComponent(UIComponent.java:720)
           at javax.faces.component.UIComponentBase.invokeOnComponent(UIComponentBase.java:675)
           at org.ajax4jsf.component.AjaxViewRoot.encodeChildren(AjaxViewRoot.java:543)
           at javax.faces.component.UIComponent.encodeAll(UIComponent.java:930)
           at com.sun.facelets.FaceletViewHandler.renderView(FaceletViewHandler.java:592)
           at org.restfaces.application.RestViewHandler.renderView(RestViewHandler.java:148)
           at org.ajax4jsf.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:100)
           at org.ajax4jsf.application.AjaxViewHandler.renderView(AjaxViewHandler.java:176)
           at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:110)
           at com.sun.faces.lifecycle.Phase.doPhase(Phase.java:100)
           at com.sun.faces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:139)
           at javax.faces.webapp.FacesServlet.service(FacesServlet.java:266)
      

       

      Those requests are synchronized via a4j:queue with a size of 2 and the default "sizeexceededbehaviour".

       

      We use RichFaces 3.3.1.GA

       

      Does somebody have any hints for us?

        • 1. Re: Simultaneous a4j-requests cause exception
          ermanito

           

           

          Maybe someone can tell me, what's happening here:

           

               at com.sun.faces.renderkit.RenderKitUtils.renderPassThruAttributesOptimized(RenderKitUtils.java:529)
               at com.sun.faces.renderkit.RenderKitUtils.renderPassThruAttributes(RenderKitUtils.java:365)
               at com.sun.faces.renderkit.html_basic.OutputLinkRenderer.renderAsActive(OutputLinkRenderer.java:226)
               at com.sun.faces.renderkit.html_basic.OutputLinkRenderer.encodeBegin(OutputLinkRenderer.java:102)
          

           

          It seems to me that there the list of attributes is in a way sorted. There's a String array created from a Set. Under normal circumstances this String array cannot be null, right? (JSF 1.2_13)

          I think there's some kind of concurrency problem.

          • 2. Re: Simultaneous a4j-requests cause exception
            ilya_shaikovsky

            try to remove size from queue.

            • 3. Re: Simultaneous a4j-requests cause exception
              ermanito

              Thanks for your response.

               

              We'll have a try. Why do you think this could help us?