maia_modificado/.svn/pristine/a9/a91d8abd34eeeaf62a8ed986945...

162 lines
6.7 KiB
Plaintext
Executable File

package com.fp.general.scheduler;
import org.quartz.Job;
import org.quartz.JobDataMap;
import org.quartz.JobExecutionContext;
import org.quartz.JobExecutionException;
import com.fp.common.exception.CommonException;
import com.fp.common.exception.ExceptionHandler;
import com.fp.common.logger.APPLogger;
import com.fp.dto.rules.ScheduleRule;
import com.fp.dto.save.SaveRequest;
import com.fp.persistence.commondb.NestedSave;
import com.fp.persistence.commondb.PersistenceHelper;
import com.fp.persistence.commondb.PersistenceManager;
import com.fp.persistence.commondb.data.SessionData;
import com.fp.persistence.commondb.data.ThreadFacade;
import com.fp.persistence.commondb.helper.FormatDates;
import com.fp.persistence.pgeneral.date.TgeneAccountingDateBranch;
import com.fp.persistence.pgeneral.schedule.TgeneScheduleLog;
import com.fp.persistence.pgeneral.schedule.TgeneScheduleLogKey;
import com.fp.persistence.pgeneral.schedule.TgeneScheduleProcess;
/**
* Clase que se encarga de ejecutar tareas calendarizadas, que se parametrizan en TgeneSchdeleEven.
*
* @author Jorge Vaca
* @version 2.1
*/
public class SchedulerJob implements Job {
/*
* (non-Javadoc)
*
* @see org.quartz.Job#execute(org.quartz.JobExecutionContext)
*/
@Override
public void execute(JobExecutionContext context) throws JobExecutionException {
TgeneScheduleLog log = null;
Integer cia = null;
try {
JobDataMap jdm = context.getJobDetail().getJobDataMap();
String event = jdm.getString("evento");
APPLogger.getLogger().error("INICIA EJECUCION DE TAREA " + event);
// compania para obtener el entity manager
SessionData s = new SessionData();
cia = jdm.getInt("cia");
s.setCompany(cia);
ThreadFacade.setSaveRequest(s);
PersistenceHelper.setEntityManager(PersistenceManager.getInstance().createEntityManagerLocal());
PersistenceHelper.beginNewTransaction();
// ejecuta la tarea calendarizada.
TgeneScheduleProcess process = TgeneScheduleProcess.find(PersistenceHelper.getEntityManager(), event);
SaveRequest saveRequest = this.fillSaveRequest(jdm, process);
// Fija resultado de ejecucion de la tarea
log = this.createTgeneScheduleLog(event, saveRequest);
this.processByRule(process, jdm, saveRequest);
PersistenceHelper.save(log);
PersistenceHelper.commitNewTransaction();
} catch (Exception e) {
PersistenceHelper.rollbackNewTransaction();
this.saveError(cia, e, log);
} finally {
PersistenceHelper.closeSession();
}
}
/**
* Metodo que se encarga de grabar el error que se genera en la ejecucion de la tarea calendarizada.
*
* @param exception Excepcion que contiene el error presentado.
* @throws Exception
*/
private void saveError(Integer cia, Exception exeption, TgeneScheduleLog log) {
try {
ExceptionHandler eh = new ExceptionHandler(exeption, "es");
if (eh.getCode().length() > 20) {
log.setResultcode(eh.getCode().substring(0, 19));
} else {
log.setResultcode(eh.getCode());
}
if (eh.getUserMessage().length() > 399) {
log.setResultmessage(eh.getUserMessage().substring(0, 399));
} else {
log.setResultmessage(eh.getUserMessage());
}
new NestedSave(cia, log);
} catch (Exception e) {
APPLogger.getLogger().error(e, e);
}
}
/**
* Crea una instancia de TgeneScheduleLog, que almacena el resultado de la tarea calendarizada.
*
* @param pEvent codigo de evento de la tarea calendarizada.
* @param saveRequest Objeto que contiene el request de entrada de ejecucion de la tarea.
* @return TgeneScheduleLog
* @throws Exception
*/
private TgeneScheduleLog createTgeneScheduleLog(String pEvent, SaveRequest saveRequest) throws Exception {
TgeneScheduleLogKey key = new TgeneScheduleLogKey();
key.setEventcode(pEvent);
key.setRealdate(FormatDates.getInstance().getDataBaseTimestamp());
TgeneScheduleLog log = new TgeneScheduleLog(key);
TgeneAccountingDateBranch date = com.fp.persistence.commondb.db.DataHelper.getInstance().getTgeneAccountingDateBranch(
saveRequest.getCompany(), 0);
log.setProcessdate(date.getAccountingdate());
log.setUsercode(saveRequest.getUser());
log.setResultcode("0");
log.setResultmessage("TRANSACCION REALIZADA CORRECTAMENTE");
return log;
}
/**
* Metodo encargado de ejecutar reglas de procesos calendarizados.
*
* @param pProcess Objeto que contiene la regla a ejecutar.
* @throws Exception
*/
private void processByRule(TgeneScheduleProcess pProcess, JobDataMap jdm, SaveRequest saveRequest) throws Exception {
ScheduleRule rule = null;
try {
rule = (ScheduleRule) Class.forName(pProcess.getProcesscode()).newInstance();
} catch (ClassNotFoundException e) {
throw new CommonException("COMMON-0006", "REGLA {0} A EJECUTAR NO DEFINIDO MODULE: {1} TRANS: {2} VERSION {3}",
pProcess.getProcesscode(), e, saveRequest.getTransactionModule(), saveRequest.getTransactionCode(),
saveRequest.getTransactionVersion());
} catch (ClassCastException e) {
throw new CommonException("COMMON-0007", "REGLA {0} A EJECUTAR MODULE: {1} TRANS: {2} VERSION {3} NO IMPLEMENTA {4}", e,
pProcess.getProcesscode(), saveRequest.getTransactionModule(), saveRequest.getTransactionCode(),
saveRequest.getTransactionVersion(), ScheduleRule.class.getName());
}
rule.execute(saveRequest);
}
/**
* Arma y entrega un objeto SaveRequest, utilizado en la ejecucion de transacciones.
*
* @param jdm Map con parametros necesarios para ejecutar una tarea calendarizada.
* @param process
* @return SaveRequest
* @throws Exception
*/
private SaveRequest fillSaveRequest(JobDataMap jdm, TgeneScheduleProcess process) throws Exception {
SaveRequest sq = new SaveRequest();
sq.setCompany(jdm.getInt("cia"));
sq.setBranchCode(jdm.getInt("suc"));
sq.setOfficeCode(jdm.getInt("ofi"));
sq.setTerminalCode(jdm.getString("ter"));
sq.setChannelCode(jdm.getString("can"));
sq.setUser(jdm.getString("usu"));
sq.setTransactionModule(process.getTransactionmodule());
sq.setTransactionCode(process.getTransactioncode());
sq.setTransactionVersion(process.getTransactionversion());
return sq;
}
}