You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@tomcat.apache.org by Jason Bucholtz <ja...@scs.uiuc.edu> on 2004/04/05 21:03:50 UTC

Servlet Context Listener problem

I am using tomcat 5.0.19 and am experiencing different behavior from a
servlet context listener than what is outlined in the servlet spec.   My
expectation is that the listener methods  contextInitialized()  and
contextDestroyed() should be called respectively each time the application
is undeployed and redeployed.

However, in practice it appears the methods are only called once per
tomcat session.  I have  a class that implements Servlet context listener
and the methods contextInitialized() and  contextDestroyed()  are only
called once and not on subsequent undeploys and redeploys.  However,
restarting tomcat causes the methods to be called again, but only for a
single deployment of the application.  Those methods are not called again
unless tomcat is restarted (I have also tried the reload task, start and
stop all with no success).

That is, if the application is deployed and tomcat is restarted, the
method contextInitialized() is called, and if the app is undelpoyed the
method contextDestroyed() is also correctly called.  On any subsequent
deployments or undeployments the servlet context listener methods are not
called.  Restarting  tomcat always results in the methods being called
again on the first deployment or undeployment after the restart.

First, is the witnessed behavior the way context listeners are supposed
behave?  If not, do you have any suggestions on where I might look to
correct the problem.


For completeness, I am including my listener tag from web.xml file and the
source of the class that implements ServletContextListener.


In my web.xml file I have registered the listener as follows:

<listener>
     <listener class>
scs.reaction.common.init.ReactionInitialization
</listener-class>
</listener>



And here is my implementation:


package scs.reaction.common.init;
import java.io.IOException;
import java.util.logging.*;

import javax.servlet.*;

public class ReactionInitialization implements ServletContextListener {

	Logger logger = null;

	public ReactionInitialization(){}

	public void contextInitialized(ServletContextEvent arg0){

		// Check to see if the root log manager for this
application exists if
		// not initialize it and set its default atributes
		if(LogManager.getLogManager().getLogger("scs.reaction")==
null)
		{

			//Call the supers initialization first
			// we will name all loggers after thier fully
qaulified class name

			logger = Logger.getLogger("scs.reaction");

			FileHandler fileHandler = null;


			//creare our own file handler
			// the file handler will cycle through 2 files
			// files are limited in size to 100KB and sessions
are appended

			try {
				fileHandler = new
FileHandler(System.getProperty("catalina.home")+ "/logs/" +
"scs.reaction.log",1000000,2,true);
			} catch (SecurityException e) {
				e.printStackTrace();
			} catch (IOException e) {
				e.printStackTrace();
			}


			// use a standard text formatter for the file
output
			fileHandler.setFormatter(new SimpleFormatter());
			//attach the handler
			logger.addHandler(fileHandler);
			//Set the level to all messages
			logger.setLevel(Level.FINEST);

			logger.finer("Context Intitalized");



		}

	}


	public void contextDestroyed(ServletContextEvent arg0) {

		logger.finer("Context Destroyed");

	}

}



---------------------------------------------------------------------
To unsubscribe, e-mail: tomcat-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: tomcat-user-help@jakarta.apache.org