DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG 
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9367>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND 
INSERTED IN THE BUG DATABASE.

http://nagoya.apache.org/bugzilla/show_bug.cgi?id=9367

HttpSessionBindingEvent not thrown for HttpSessionBindingListener objects when session 
expires

           Summary: HttpSessionBindingEvent not thrown for
                    HttpSessionBindingListener objects when session expires
           Product: Tomcat 3
           Version: 3.2.3 Final
          Platform: HP
        OS/Version: HP-UX
            Status: NEW
          Severity: Major
          Priority: Other
         Component: Servlet
        AssignedTo: [EMAIL PROTECTED]
        ReportedBy: [EMAIL PROTECTED]


This was reported by a user for TC 3.3. I have found it on 3.2.3 on HPUX as 
well. The attached code works perfectly on TC 3.2.3 on Win NT 4 SP 6. Fails 
always (i.e. HttpSessionBindingListener objects never get an unbound event) 
when sessions expire on HPUX. 

The following two JSP's demonstrate the bug. Install them in any web-
application. Open Monitor.jsp in a browser (it refreshes every 5 secs). Open 
SessionTest.jsp in another (Monitor should now show the new session) and then 
close the "SessionTest" browser window. After "session-timeout" minutes, the 
row should vanish in the "Monitor" browser. It does on Windows. It does not on 
HPUX.

Thank you.

----------- Begin Monitor.jsp --------------------------
<%@ page import="java.util.Map, java.util.Iterator" %>
<html><head>
<title>Test Monitor</title>
<META http-equiv="Refresh" content="5">
</head>
<body>
<h1>Monitor</h1>
Current time is <%= new java.util.Date().toString() %>
<h2>Bound objects</h2>
<table border = "1">
<tr><th>Session ID</th><th>Object Info</th></tr>
<%
ServletContext context = this.getServletConfig().getServletContext();
Map map = (Map)context.getAttribute("VALID_SESSIONS");
if (map != null) {
  for (Iterator iter = map.keySet().iterator(); iter.hasNext() ; ) {
    Object key = iter.next();
    Object val = map.get(key);
%>
<tr><td><%= key %></td><td><%= val %></td></tr>
<%
  }
}
%>
</table>
</body>
----------- End Monitor.jsp --------------------------
----------- Begin SessionTest.jsp --------------------------
<%@ page import="java.util.Map, java.util.Date, java.util.Hashtable, 
java.util.Iterator" %>
<html>
<head><title>Session Test</title></head>
<body>
<h1>Session Test</h1>
<%!
class SessionSquatter implements HttpSessionBindingListener {
  private Date myDate;
  private String myId;
  SessionSquatter(String id) {
    this.myDate = new Date();
    this.myId = id;
  }
  public String toString() {
    return  "Squatter for session " + myId + " created at " + myDate.toString();
  }
  public void valueBound(HttpSessionBindingEvent event) {
    bound(myId, this);
  }
  public void valueUnbound(HttpSessionBindingEvent event) {
    unbound(myId);
  }
}
%>
<%!
private void bound(String id, SessionSquatter squatter) {
  ServletContext context = this.getServletConfig().getServletContext();
  Map map = (Map)context.getAttribute("VALID_SESSIONS");
  if (map == null) {
    map = new Hashtable(10);
    context.setAttribute("VALID_SESSIONS", map);
  }
  map.put(id, squatter);
  System.out.println("+++   Bound! " + toString());
}
%>
<%!
private void unbound(String id) {
  ServletContext context = this.getServletConfig().getServletContext();
  Map map = (Map)context.getAttribute("VALID_SESSIONS");
  if (map == null) { return; }
  map.remove(id);
  System.out.println("--- Unbound! " + toString());
}
%>
<%
ServletContext context = this.getServletConfig().getServletContext();
Map map = (Map)context.getAttribute("VALID_SESSIONS");
if (map == null) {
  map = new Hashtable(10);
  context.setAttribute("VALID_SESSIONS", map);
}
String sessionId = session.getId();
SessionSquatter squatter = new SessionSquatter(sessionId);
session.setAttribute("SQUATTER", squatter);
%>
Session <%= sessionId %> contains <%= squatter.toString() %>.
<br/><a href="javascript:window.close()">Close this window.</a><br/>
</body>
</html>
----------- End SessionTest.jsp --------------------------

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to