maia/.svn/pristine/05/05ac6bcba3a5d9715a2419cf017...

95 lines
3.4 KiB
Plaintext
Executable File

package com.fp.general.scheduler;
import java.util.List;
import org.quartz.CronTrigger;
import org.quartz.JobDataMap;
import org.quartz.JobDetail;
import org.quartz.Scheduler;
import org.quartz.SchedulerFactory;
import org.quartz.impl.StdSchedulerFactory;
import com.fp.general.exception.GeneralException;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.commondb.data.ThreadFacade;
import com.fp.persistence.pgeneral.schedule.TgeneScheduleEvent;
import com.fp.persistence.pgeneral.schedule.TgeneScheduleParameters;
/**
* Clase que se encarga de ejecutar tareas calendarizadas, que se parametrizan en TgeneSchdeleEven.
* @author Jorge Vaca
* @version 2.1
*/
public class MiaScheduler {
private MiaScheduler cahce;
private Scheduler scheduler;
public void init() {
try {
SchedulerFactory sfact = new StdSchedulerFactory();
scheduler = sfact.getScheduler();
scheduler.start();
//Obtine lista de eventos a procesar.
List<TgeneScheduleEvent> ldata = TgeneScheduleEvent.find(PersistenceHelper.getEntityManager());
if(ldata == null || ldata.isEmpty()){
return;
}
TgeneScheduleParameters params = TgeneScheduleParameters.find(PersistenceHelper.getEntityManager(),
ThreadFacade.getSessionData().getCompany());
if(params == null){
throw new GeneralException("GENE-0034", "PARAMETROS PARA EJECUTAR TAREAS CALENDARIZADAS NO DEFINIDOS EN TGENSCHEDULEPARAMETERS", ThreadFacade.getSessionData().getCompany());
}
//Calendariza tareas por evento.
for (TgeneScheduleEvent obj : ldata) {
//Va dentro del for para crear un nuevo JobDataMap de parametros por cada ejecucion.
JobDataMap jdm = this.fillMap(params);
this.processByEvent(obj,jdm);
}
} catch (Exception e) {
e.printStackTrace();
}
}
/**
* Metodo que define tareas calendarizadas, de acuerdo a la definicion del evento.
* @param event Objeto que contien caracteristicas de ejecucion de un evento.
* @param jdm Map con parametros que se asocian a la tarea calendarizada.
* @throws Exception
*/
private void processByEvent(TgeneScheduleEvent event,JobDataMap jdm) throws Exception {
jdm.put("evento", event.getPk());
//crea un jobdetail
JobDetail jd = new JobDetail(event.getPk(),event.getPk(), SchedulerJob.class);
jd.setJobDataMap(jdm);
//crea el cron segundos minutos horas diames mes diasemana
//CronTrigger ct = new CronTrigger(event.getPk(),event.getPk(), "0 05 15 ? * 2-6");
String cron = ""+event.getExesecond()+" "+event.getExeminute()+" "+event.getExehour()+" ? * "+event.getBeginweekday()+"-"+event.getEndweekday();
CronTrigger ct = new CronTrigger(event.getPk(),event.getPk(), cron);
scheduler.scheduleJob(jd, ct);
}
/**
* Crea un map con los datos de parametros de ejecucion de una tarea automatica.
* @param params Parametros de ejecucion de tareas automaticas.
* @return JobDataMap
* @throws Exception
*/
private JobDataMap fillMap(TgeneScheduleParameters params) throws Exception {
JobDataMap jdm = new JobDataMap();
jdm.put("cia", params.getPk());
jdm.put("suc", params.getBranchcode());
jdm.put("ofi", params.getOfficecode());
jdm.put("area", params.getAreacode());
jdm.put("ter", params.getTerminalcode());
jdm.put("can", params.getChannelcode());
jdm.put("usu", params.getUsercode());
return jdm;
}
public void detenerJob() throws Exception{
scheduler.shutdown();
}
}