/*
  Author: DevTech, Inc. / Noel J. Bergman noel@devtech.com
  Permission to reproduce is granted, even for commercial purposes.
  If you find this sample program useful, feel free to let me know.

  javac -classpath .;"c:\jakarta-tomcat-4.1.12\common\lib\servlet.jar" -d . TomcatTestListener.java

  web.xml:

   <listener>
	   <listener-class>com.devtech.servlet.TomcatTestListener</listener-class>
   </listener>
*/

package com.devtech.servlet;

import javax.servlet.ServletContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.http.HttpSession;
import javax.servlet.http.HttpSessionEvent;
import javax.servlet.http.HttpSessionBindingEvent;

public class TomcatTestListener
   implements javax.servlet.ServletContextListener,
			  javax.servlet.http.HttpSessionListener
{
	public class TestListenerAttribute
		implements javax.servlet.http.HttpSessionBindingListener,
				   javax.servlet.http.HttpSessionActivationListener
	{
		public TestListenerAttribute()
		{
			super();
		}

		public void sessionDidActivate(HttpSessionEvent se)
		{
			HttpSession s = se.getSession();
			ServletContext sc = s.getServletContext();

			sc.log("Session Activated (" + s.getId() + ")");
		}

		public void sessionWillPassivate(HttpSessionEvent se)
		{
			HttpSession s = se.getSession();
			ServletContext sc = s.getServletContext();

			sc.log("Session Passivating (" + s.getId() + ")");
			// s.invalidate(); -- uncomment this to see what happens if
			// you invalidate a session rather than allow it to persist.
		}

		public void valueBound (HttpSessionBindingEvent event)
		{
			String name = event.getName();
			HttpSession session = event.getSession();
			ServletContext sc = session.getServletContext();

			sc.log("Binding " + name + " to " + session.toString() + " at " + new java.util.Date());
		}

		public void valueUnbound (HttpSessionBindingEvent event)
		{
			String name = event.getName();
			HttpSession session = event.getSession();
			ServletContext sc = session.getServletContext();

			sc.log("Unbinding " + name + " from " + session.toString() + " at " + new java.util.Date());
		}
	}

	public void contextInitialized(ServletContextEvent sce)
	{
		ServletContext sc = sce.getServletContext();

		sc.log("Context Initialized");
	}

	public void contextDestroyed(ServletContextEvent sce)
	{
		ServletContext sc = sce.getServletContext();
		sc.log("Context Destroyed");
	}

	public void sessionCreated(HttpSessionEvent se)
	{
		HttpSession s = se.getSession();
		ServletContext sc = s.getServletContext();

		sc.log("Session Created (" + s.getId() + ")");

		s.setAttribute("TestListenerAttribute", new TestListenerAttribute());
	}

	public void sessionDestroyed(HttpSessionEvent se)
	{
		HttpSession s = se.getSession();
		ServletContext sc = s.getServletContext();

		sc.log("Session Destroyed (" + s.getId() + ")");
	}
}

