use of org.springframework.batch.core.JobInstance in project head by mifos.
the class MifosBatchJob method catchUpMissedLaunches.
public void catchUpMissedLaunches(Job job, JobExecutionContext context) throws Exception {
List<JobInstance> jobInstances = jobExplorer.getJobInstances(job.getName(), 0, 1);
if (jobInstances.size() > 0) {
JobInstance jobInstance = jobInstances.get(0);
Date previousFireTime = new Date(jobInstance.getJobParameters().getLong(JOB_EXECUTION_TIME_KEY));
Date scheduledFireTime = context.getScheduledFireTime();
Trigger trigger = context.getTrigger();
boolean onDemandRun = false;
if (Scheduler.DEFAULT_MANUAL_TRIGGERS.equals(trigger.getGroup())) {
// this is a manual run
trigger = context.getScheduler().getTrigger(job.getName(), Scheduler.DEFAULT_GROUP);
scheduledFireTime = new DateTimeService().getCurrentDateTime().toDate();
onDemandRun = true;
}
List<Date> missedLaunches = computeMissedJobLaunches(previousFireTime, scheduledFireTime, trigger, onDemandRun);
for (Date missedLaunch : missedLaunches) {
JobParameters jobParameters = createJobParameters(missedLaunch.getTime());
launchJob(job, jobParameters);
}
}
}
use of org.springframework.batch.core.JobInstance in project head by mifos.
the class MifosScheduler method getJobsPreviousRunTime.
public Date getJobsPreviousRunTime(String jobName) {
JobExplorer explorer = getBatchJobExplorer();
List<JobInstance> jobInstances = explorer.getJobInstances(jobName, 0, 1);
if (jobInstances.size() == 0) {
return new Date(0);
}
JobInstance jobInstance = jobInstances.get(0);
long executionTimeInMillis = jobInstance.getJobParameters().getLong(MifosBatchJob.JOB_EXECUTION_TIME_KEY);
return new Date(executionTimeInMillis);
}
use of org.springframework.batch.core.JobInstance in project head by mifos.
the class MifosScheduler method getJobFailDescription.
public String getJobFailDescription(String jobName) {
String failDescription = null;
JobExplorer explorer = getBatchJobExplorer();
List<JobInstance> jobInstances = explorer.getJobInstances(jobName, 0, 1);
if (jobInstances.size() > 0) {
List<JobExecution> jobExecutions = explorer.getJobExecutions(jobInstances.get(0));
if (jobExecutions.size() > 0) {
Collection<StepExecution> steps = jobExecutions.get(0).getStepExecutions();
if (steps.size() > 0) {
StepExecution step = steps.iterator().next();
if (!step.getExitStatus().getExitDescription().isEmpty()) {
failDescription = step.getExitStatus().getExitDescription();
}
}
}
}
return failDescription;
}
use of org.springframework.batch.core.JobInstance in project head by mifos.
the class MifosScheduler method getJobsLastSuccessfulRunTime.
public Date getJobsLastSuccessfulRunTime(String jobName) {
JobExplorer explorer = getBatchJobExplorer();
List<JobInstance> jobInstances = explorer.getJobInstances(jobName, 0, 100);
for (JobInstance job : jobInstances) {
for (JobExecution execution : explorer.getJobExecutions(job)) {
if (BatchStatus.COMPLETED.equals(execution.getStatus())) {
long executionTimeInMillis = job.getJobParameters().getLong(MifosBatchJob.JOB_EXECUTION_TIME_KEY);
return new Date(executionTimeInMillis);
}
}
}
return new Date(0);
}
use of org.springframework.batch.core.JobInstance in project head by mifos.
the class BatchJobCatchUpIntegrationTest method testIncompleteTaskDelay.
@Test
public void testIncompleteTaskDelay() throws Exception {
mifosScheduler = getMifosScheduler("org/mifos/framework/components/batchjobs/catchUpTask.xml");
Scheduler scheduler = mifosScheduler.getScheduler();
ProductStatus productStatusTask = new ProductStatus();
productStatusTask.setJobExplorer(mifosScheduler.getBatchJobExplorer());
productStatusTask.setJobLauncher(mifosScheduler.getBatchJobLauncher());
productStatusTask.setJobLocator(mifosScheduler.getBatchJobLocator());
productStatusTask.setJobRepository(mifosScheduler.getBatchJobRepository());
String quartzJobName = "ProductStatusJob";
String quartzTriggerName = "ProductStatusTrigger2";
Calendar calendar = Calendar.getInstance();
calendar.set(Calendar.MILLISECOND, 0);
calendar.set(Calendar.SECOND, 10);
Date previousFireTime = calendar.getTime();
calendar.set(Calendar.SECOND, 21);
Date quartzFireTime = calendar.getTime();
calendar.set(Calendar.SECOND, 22);
Date quartzNextFireTime = calendar.getTime();
calendar.set(Calendar.SECOND, 20);
Date quartzPrevFireTime = calendar.getTime();
JobDetail jobDetail = scheduler.getJobDetail(quartzJobName, Scheduler.DEFAULT_GROUP);
jobDetail.setJobDataMap(new JobDataMap());
CronTrigger trigger = new CronTrigger(quartzTriggerName, Scheduler.DEFAULT_GROUP, quartzJobName, Scheduler.DEFAULT_GROUP, "* * * * * ?");
trigger.setJobDataMap(new JobDataMap());
TriggerFiredBundle triggerFiredBundle = new TriggerFiredBundle(jobDetail, trigger, new BaseCalendar(), false, quartzFireTime, quartzFireTime, quartzPrevFireTime, quartzNextFireTime);
JobExecutionContext jobExecutionContext = new JobExecutionContext(scheduler, triggerFiredBundle, productStatusTask);
JobLauncher jobLauncher = mifosScheduler.getBatchJobLauncher();
JobLocator jobLocator = mifosScheduler.getBatchJobLocator();
jobLauncher.run(jobLocator.getJob(jobName), MifosBatchJob.createJobParameters(previousFireTime.getTime()));
Thread.sleep(1500);
productStatusTask.catchUpMissedLaunches(jobLocator.getJob(jobName), jobExecutionContext);
JobExplorer explorer = mifosScheduler.getBatchJobExplorer();
List<JobInstance> jobInstances = explorer.getJobInstances(jobName, 0, 20);
Assert.assertEquals(11, jobInstances.size());
for (JobInstance jobInstance : jobInstances) {
List<JobExecution> jobExecutions = explorer.getJobExecutions(jobInstance);
Assert.assertEquals(BatchStatus.COMPLETED, jobExecutions.get(0).getStatus());
Assert.assertEquals(calendar.getTimeInMillis(), jobInstance.getJobParameters().getLong(MifosBatchJob.JOB_EXECUTION_TIME_KEY));
calendar.roll(Calendar.SECOND, false);
}
}
Aggregations