package org.javaee7.batch.samples.scheduling; import javax.annotation.Resource; import javax.batch.runtime.BatchRuntime; import javax.batch.runtime.BatchStatus; import javax.ejb.Local; import javax.ejb.Stateless; import javax.enterprise.concurrent.LastExecution; import javax.enterprise.concurrent.ManagedScheduledExecutorService; import javax.enterprise.concurrent.Trigger; import java.util.Calendar; import java.util.Date; import java.util.List; import java.util.concurrent.TimeUnit; /** * @author arungupta */ @Stateless @Local(MyManagedScheduledBatch.class) public class MyManagedScheduledBatchBean implements MyManagedScheduledBatch { @Resource private ManagedScheduledExecutorService executor; @Override public void runJob() { executor.schedule(createJob(), new Trigger() { @Override public Date getNextRunTime(LastExecution lastExecutionInfo, Date taskScheduledTime) { if (MyJob.executedBatchs.size() >= 3) { return null; } Calendar cal = Calendar.getInstance(); if (lastExecutionInfo == null) { cal.setTime(taskScheduledTime); } else { cal.setTime(lastExecutionInfo.getRunStart()); } cal.add(Calendar.SECOND, 10); return cal.getTime(); } @Override public boolean skipRun(LastExecution lastExecutionInfo, Date scheduledRunTime) { List<Long> executedBatchs = MyJob.executedBatchs; for (Long executedBatch : executedBatchs) { if (!BatchRuntime.getJobOperator().getJobExecution(executedBatch).getBatchStatus().equals( BatchStatus.COMPLETED)) { return true; } } return false; } }); } public void runJob2() { executor.scheduleWithFixedDelay(new MyJob(), 1, 2, TimeUnit.MINUTES); } protected MyJob createJob() { return new MyJob(); } }