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

Using Session Scope CDI bean does not work in a HttpSessionListener

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • 8.0.0.Alpha1
    • None
    • CDI / Weld
    • None

      JBoss AS 7.1.x has a bug with using session bean scope in a HttpSessionListener.

      When i inject a session scope bean in a HttpSessionListener and i try to populate attribute in sessionCreated() method many HttpSession are created by JBoss AS. Is it normal the a web server create many Http session for the same request ?

      Normally, this behaviour should work. See : http://docs.jboss.org/cdi/api/1.1-PRD/javax/enterprise/context/SessionScoped.html

      I did a light Web Project to explain the problem with 1 JSP, 1 SessionScope bean and 1 HttpSessionListener.

      Here is the code.

      JSP page :

      <%@ page language="java" contentType="text/html; charset=UTF-8"
      pageEncoding="UTF-8"%>
      <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
      <html>
      <head>
      <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
      <title>Insert title here</title>
      </head>
      <body>

      </body>
      </html>

      SessionScope bean :

      @Named
      @SessionScoped
      public class UserState implements Serializable {

      private int state;

      public int getState()

      { return state; }

      public void setState(int state)

      { this.state = state; }

      }

      HttpSessionListener :

      @WebListener
      public class SessionListener implements HttpSessionListener {

      @Inject private UserState userState;

      @Override
      public void sessionCreated(HttpSessionEvent event)

      { System.out.println("New HTTP Session created : " + event.getSession().getId()); userState.setState(2); }

      @Override
      public void sessionDestroyed(HttpSessionEvent event) {}
      }

      After execution, you can read in the console at least 2 http session creation like this :
      New HTTP Session created : zvlF6vGLP1AaXM-rzFU02wAJ.undefined
      New HTTP Session created : TlrmmA8Eu4v32SHDT0QBBZza.undefined

      The first session seams to be the one which is used by the client. There is one more problem : The polutated attributes of the session scope bean are ignored after HttpSessionListener execution. At the end all session scope attributes are null.

              sdouglas1@redhat.com Stuart Douglas (Inactive)
              nmarchais nicolas marchais (Inactive)
              Votes:
              0 Vote for this issue
              Watchers:
              10 Start watching this issue

                Created:
                Updated:
                Resolved: