Objective: The goal is to run a particualr task at regular interval. Ex: We have emails which are stored in a queue and this needs to be sent to all the recipients. There are several options which can be used to solve this problem -
a) Open source frameworks - Jcrontab. We setup the pattern of time when we would like a given task to be executed. (Pre Java 1.3 time)
b) TimerEJB : http://java.sun.com/j2ee/1.4/docs/tutorial/doc/Session5.html
c) TimerTask & Timer (Part of JDK)
http://java.sun.com/j2se/1.4.2/docs/api/java/util/Timer.html
With latest JDK's we can use TimerTask and Timer option as the most simple solution.
Sample Timer:
import java.util.Timer;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
public class EMailService extends Timer
{
private static boolean invokedOnce = false;
private static final Log log = LogFactory.getLog(EMailService.class);
private EMailService() {
}
public static synchronized void initialize(long delay, long period) {
if (!invokedOnce) {
invokedOnce = true;
EMailService mailService = new EMailService();
mailService.schedule(new SendEmail(), delay, period);
log.info("Timed EMailService has been initialized with delay: " + delay + "(ms) period: " + period + "(ms)");
}
}
}
Sample TimerTask: SendMail:
public class SendEmail extends TimerTask {
private static final Log log = LogFactory.getLog(SendEmail.class);
@Override
public void run()
{
long threadId = Thread.currentThread().getId();
...
...
}
How Timer Classes are initializd?
Typically this can be invoked from a Servlet which can be called during startup.
Tuesday, May 15, 2007
Subscribe to:
Post Comments (Atom)
No comments:
Post a Comment