001// Copyright (c) 2001 Hursh Jain (http://www.mollypages.org) 
002// The Molly framework is freely distributable under the terms of an
003// MIT-style license. For details, see the molly pages web site at:
004// http://www.mollypages.org/. Use, modify, have fun !
005
006package fc.web.servlet;
007
008import javax.servlet.*;
009import javax.servlet.http.*;
010import java.io.*;
011import java.util.*;
012
013import fc.io.*;
014
015/** 
016For debugging session attribute set/get events. Enable this listener in the
017server configuration file to ease <i>development time</i> debugging.
018
019@author hursh jain
020**/
021public class DebugSessionListener implements 
022       HttpSessionListener, HttpSessionAttributeListener
023{
024Log log;
025
026void initLog(HttpSession session)
027  {
028  if (log == null) {
029    log = Log.getDefault();
030    }
031  }
032
033//Session Listener
034public void sessionCreated(HttpSessionEvent event)
035  {
036  synchronized (this) { 
037    HttpSession session = event.getSession();
038    initLog(session); 
039    log.bug("session CREATED=", session); 
040    }
041  }
042
043public void sessionDestroyed(HttpSessionEvent event)
044  {
045  synchronized (this) { 
046    HttpSession session = event.getSession();
047    initLog(session); 
048    log.bug("session DESTROYED=", session); 
049    }
050  }
051
052//AttributeListener 
053public void attributeAdded(HttpSessionBindingEvent event) 
054  {
055  synchronized (this) { 
056    HttpSession session = event.getSession();
057    initLog(session); 
058    log.bug("attribute ADDED to session=", session,
059      "name=", event.getName(),
060      "value=", event.getValue());
061    }
062  }
063  
064public void attributeRemoved(HttpSessionBindingEvent event) 
065  {
066  synchronized (this) { 
067    HttpSession session = event.getSession();
068    initLog(session); 
069    log.bug("attribute REMOVED to session=", session, 
070      "name=", event.getName(),
071      "value=", event.getValue());
072    }
073  }
074
075public void attributeReplaced(HttpSessionBindingEvent event) {
076  synchronized (this) { 
077    HttpSession session = event.getSession();
078    initLog(session); 
079    log.bug("attribute REPLACED to session=", session, 
080      "name=", event.getName(),
081      "value=", event.getValue());
082    }
083  }
084}