ServletContextListener with Timer
In this section, you will learn how to use timer with ServletContextListener to run code snippet after every 1 minute immediate after the application run.
EXAMPLE
In this example, we will display a message on console after every 1 minute. This code will start executing immediately after the execution of the project.
Listener is used for listening to events in a web container. For example, when a context is initialized or destroyed or session is created or an attribute is placed in a session. To receive these events regularly listener is configure into web.xml .
In the below code, we are using ServletContextListener with timer to run code after every 1 min. ServletContextListener immediately starts after code execution. And the Timer class of java.util.Timer is used inside contextInitialized() function, which runs the code after every 1 minute.
The code is given below :
import java.util.Timer; import java.util.TimerTask; import javax.servlet.ServletContext; import javax.servlet.ServletContextEvent; import javax.servlet.ServletContextListener; /** * Application Lifecycle Listener implementation class MyServletContextListener * */ public class MyServletContextListener implements ServletContextListener { /** * @see ServletContextListener#contextInitialized(ServletContextEvent) */ public void contextInitialized(ServletContextEvent arg0) { ServletContext servletContext = arg0.getServletContext(); System.out.println("*********ServletContextListener started*********"); int delay = 1000; Timer timer = new Timer(); //final Calendar calendar = Calendar.getInstance(); //System.out.println("Tweet at Time = " + calendar.getTime()); //calendar.add(Calendar.SECOND, -60); timer.scheduleAtFixedRate(new TimerTask(){ public void run(){ System.out.println("Running this code every 1 minute...."); }//End of Run },delay, 60000); servletContext.setAttribute ("timer", timer); } /** * @see ServletContextListener#contextDestroyed(ServletContextEvent) */ public void contextDestroyed(ServletContextEvent arg0) { ServletContext servletContext = arg0.getServletContext(); // get our timer from the Context Timer timer = (Timer)servletContext.getAttribute ("timer"); // cancel all pending tasks in the timers queue if (timer != null) timer.cancel(); // remove the timer from the servlet context servletContext.removeAttribute ("timer"); System.out.println("ServletContextListener destroyed"); } }
OUTPUT
*********ServletContextListener
started********* Mar 15, 2012 6:53:55 PM org.apache.coyote.http11.Http11Protocol start INFO: Starting Coyote HTTP/1.1 on http-9090 Mar 15, 2012 6:53:55 PM org.apache.jk.common.ChannelSocket init INFO: JK: ajp13 listening on /0.0.0.0:8009 Mar 15, 2012 6:53:55 PM org.apache.jk.server.JkMain start INFO: Jk running ID=0 time=0/15 config=null Mar 15, 2012 6:53:55 PM org.apache.catalina.startup.Catalina start INFO: Server startup in 217 ms Running this code every 1 minute.... |