[jboss-jira] [JBoss JIRA] (AS7-6428) Using Session Scope CDI bean does not work in a HttpSessionListener

nicolas marchais (JIRA) jira-events at lists.jboss.org
Thu Jan 31 05:57:51 EST 2013


nicolas marchais created AS7-6428:
-------------------------------------

             Summary: Using Session Scope CDI bean does not work in a HttpSessionListener
                 Key: AS7-6428
                 URL: https://issues.jboss.org/browse/AS7-6428
             Project: Application Server 7
          Issue Type: Feature Request
          Components: CDI / Weld
    Affects Versions: 7.1.1.Final
         Environment: linux 64bits, win7 64 bits
            Reporter: nicolas marchais
            Assignee: Stuart Douglas
             Fix For: No Release


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. 

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira


More information about the jboss-jira mailing list