Aha pa zasto samo ne napravis jedan listener koji ce da pokrene taj modul? Mislim da se listeneri uvek izvrsavaju kada se pokrene web aplikacija...
Za ovaj scheduler, mozes koristiti Quartz, koji je integrisan u Spring pa mozda i u EJB, a mozes ga koristiti i samostalno.
Ja sam jednom napisao jedan programcic koji proverava postu pa ako ima nesto novo onda napravi sms od njega. Uglavnom ovo je web.xml:
Code:
<?xml version="1.0"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<listener>
<listener-class>hello.NotesScheduler</listener-class>
</listener>
<env-entry>
<env-entry-name>cronExpression</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>0 0/2 * * * ?</env-entry-value>
</env-entry>
</web-app>
Listener klasa:
Code:
package hello;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.servlet.ServletContextEvent;
import javax.servlet.ServletContextListener;
import javax.sql.DataSource;
import org.quartz.CronTrigger;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerException;
import org.quartz.impl.StdSchedulerFactory;
import org.apache.log4j.*;
public class NotesScheduler implements ServletContextListener {
private static Logger log = Logger.getLogger(NotesScheduler.class);
private Scheduler scheduler;
public void contextInitialized(ServletContextEvent sce) {
try {
log.info("Starting Notes Scheduler...");
Context iContext = new InitialContext();
scheduler = StdSchedulerFactory.getDefaultScheduler();
scheduler.start();
JobDetail jd = new JobDetail("Notes check", "notes", NotesCheck.class);
jd.getJobDataMap().put("type", "FULL");
CronTrigger trigger = new CronTrigger("Notes check", "notes");
trigger.setCronExpression((String)iContext.lookup(Consts.CRON_EXPRESSION)); // every minute
scheduler.scheduleJob(jd, trigger);
} catch (Exception ex) {
log.error("Error starting the Notes scheduler: " + Util.getStackTrace(ex));
}
}
public void contextDestroyed(ServletContextEvent sce) {
try {
log.info("Shutting down Notes Scheduler...");
scheduler.shutdown();
} catch (Exception ex) {
log.error("Error shutting down the Notes scheduler: " + Util.getStackTrace(ex));
}
}
}
Tamo gde pise trigger.setCronExpression() tamo se cita cron expression iz web.xml-a, tj. da se posao izvrsava svaki minut.
Zatim napravis Job klasu, koja ce vec da proverava ftp, tj. ono sto kazes da vec imas.