Uploaded image for project: 'WildFly'
  1. WildFly
  2. WFLY-13252

JSF IdMapper can create repeated ids in clustered environments causing: IllegalStateException with postback

XMLWordPrintable

    • Hide

      Reproducer

      test.zip
       ├── node1
       │   └── deployments
       │       └── test-jsf.war    <- test application
       ├── node2
       │   └── deployments
       │       └── test-jsf.war    <- test application
       ├── README.txt
       └── standalone
           └── configuration
               └── standalone.xml    <- added the proxy configuration for ndoes
      
      test-jsf.war
       ├── META-INF
       │   └── MANIFEST.MF
       ├── view.xhtml
       └── WEB-INF
           ├── classes
           │   └── test
           │       └── bean
           │           ├── TestBean.class
           │           └── TestBean.java
           ├── faces-config.xml
           ├── lib
           └── web.xml    <- added javax.faces.PARTIAL_STATE_SAVING=false
      

      Steps to reproduce
      1. Install JBoss EAP 7.2.x.
      2. unzip test.zip under the EAP_HOME
      3. Execute the following commands under the EAP_HOME/bin.
      Run a proxy server

      $ ./standalone.sh
      

      Run nodes

      # node1
      $ ./standalone.sh -c standalone-ha.xml -Djboss.server.base.dir=../node1 -Djboss.server.config.dir=../standalone/configuration/ -Djboss.server.name=node1 -Djboss.socket.binding.port-offset=100
      
      # node2
      $ ./standalone.sh -c standalone-ha.xml -Djboss.server.base.dir=../node2 -Djboss.server.config.dir=../standalone/configuration/ -Djboss.server.name=node2 -Djboss.socket.binding.port-offset=200
      

      4. Open http://localhost:8080/test-jsf/view.jsf
      5. If you push the submit button, the following error would be output either node.

      13:34:29,098 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-1) Error Rendering View[/view.xhtml]: java.lang.IllegalStateException: Component ID j_idt2 has already been found in the view.  
              at com.sun.faces.util.Util.checkIdUniqueness(Util.java:1127)
              at com.sun.faces.util.Util.checkIdUniqueness(Util.java:1111)
              at com.sun.faces.application.view.JspStateManagementStrategy.saveView(JspStateManagementStrategy.java:298)
              at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:89)
              at com.sun.faces.application.view.WriteBehindStateWriter.getState(WriteBehindStateWriter.java:334)
              at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:228)
              at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:507)
              at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:194)
              at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151)
              at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151)
              at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:126)
      ...
      
      Show
      Reproducer test.zip ├── node1 │ └── deployments │ └── test-jsf.war <- test application ├── node2 │ └── deployments │ └── test-jsf.war <- test application ├── README.txt └── standalone └── configuration └── standalone.xml <- added the proxy configuration for ndoes test-jsf.war ├── META-INF │ └── MANIFEST.MF ├── view.xhtml └── WEB-INF ├── classes │ └── test │ └── bean │ ├── TestBean.class │ └── TestBean.java ├── faces-config.xml ├── lib └── web.xml <- added javax.faces.PARTIAL_STATE_SAVING=false Steps to reproduce 1. Install JBoss EAP 7.2.x. 2. unzip test.zip under the EAP_HOME 3. Execute the following commands under the EAP_HOME/bin. Run a proxy server $ ./standalone.sh Run nodes # node1 $ ./standalone.sh -c standalone-ha.xml -Djboss.server.base.dir=../node1 -Djboss.server.config.dir=../standalone/configuration/ -Djboss.server.name=node1 -Djboss.socket.binding.port-offset=100 # node2 $ ./standalone.sh -c standalone-ha.xml -Djboss.server.base.dir=../node2 -Djboss.server.config.dir=../standalone/configuration/ -Djboss.server.name=node2 -Djboss.socket.binding.port-offset=200 4. Open http://localhost:8080/test-jsf/view.jsf 5. If you push the submit button, the following error would be output either node. 13:34:29,098 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (default task-1) Error Rendering View[/view.xhtml]: java.lang.IllegalStateException: Component ID j_idt2 has already been found in the view. at com.sun.faces.util.Util.checkIdUniqueness(Util.java:1127) at com.sun.faces.util.Util.checkIdUniqueness(Util.java:1111) at com.sun.faces.application.view.JspStateManagementStrategy.saveView(JspStateManagementStrategy.java:298) at com.sun.faces.application.StateManagerImpl.saveView(StateManagerImpl.java:89) at com.sun.faces.application.view.WriteBehindStateWriter.getState(WriteBehindStateWriter.java:334) at com.sun.faces.application.view.WriteBehindStateWriter.flushToWriter(WriteBehindStateWriter.java:228) at com.sun.faces.application.view.FaceletViewHandlingStrategy.renderView(FaceletViewHandlingStrategy.java:507) at com.sun.faces.application.view.MultiViewHandler.renderView(MultiViewHandler.java:194) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151) at javax.faces.application.ViewHandlerWrapper.renderView(ViewHandlerWrapper.java:151) at com.sun.faces.lifecycle.RenderResponsePhase.execute(RenderResponsePhase.java:126) ...

      In the round-robin load-balancing environment, IllegalStateException occurs with postback action.
      This issue seems to occur notably when set javax.faces.PARTIAL_STATE_SAVING=false.

              rhn-support-rmartinc Ricardo Martin Camarero
              rhn-support-rmartinc Ricardo Martin Camarero
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: