Search in sources :

Example 81 with SchedulerException

use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.

the class QuartzScheduler method setJobTrigger.

private void setJobTrigger(Scheduler scheduler, Job job, Trigger trigger) throws SchedulerException, org.quartz.SchedulerException {
    QuartzJobKey jobKey = QuartzJobKey.parse(job.getJobId());
    String groupName = jobKey.getUserName();
    if (trigger instanceof SimpleTrigger) {
        SimpleTrigger simpleTrigger = (SimpleTrigger) trigger;
        SimpleJobTrigger simpleJobTrigger = new SimpleJobTrigger();
        simpleJobTrigger.setStartTime(simpleTrigger.getStartTime());
        simpleJobTrigger.setEndTime(simpleTrigger.getEndTime());
        simpleJobTrigger.setUiPassParam((String) job.getJobParams().get(RESERVEDMAPKEY_UIPASSPARAM));
        long interval = simpleTrigger.getRepeatInterval();
        if (interval > 0) {
            interval /= 1000;
        }
        simpleJobTrigger.setRepeatInterval(interval);
        simpleJobTrigger.setRepeatCount(simpleTrigger.getRepeatCount());
        job.setJobTrigger(simpleJobTrigger);
    } else if (trigger instanceof CronTrigger) {
        CronTrigger cronTrigger = (CronTrigger) trigger;
        ComplexJobTrigger complexJobTrigger = createComplexTrigger(cronTrigger.getCronExpression());
        complexJobTrigger.setUiPassParam((String) job.getJobParams().get(RESERVEDMAPKEY_UIPASSPARAM));
        complexJobTrigger.setCronString(((CronTrigger) trigger).getCronExpression());
        job.setJobTrigger(complexJobTrigger);
        if (trigger.getCalendarName() != null) {
            Calendar calendar = scheduler.getCalendar(trigger.getCalendarName());
            if (calendar instanceof QuartzSchedulerAvailability) {
                QuartzSchedulerAvailability quartzSchedulerAvailability = (QuartzSchedulerAvailability) calendar;
                complexJobTrigger.setStartTime(quartzSchedulerAvailability.getStartTime());
                complexJobTrigger.setEndTime(quartzSchedulerAvailability.getEndTime());
            }
        }
        complexJobTrigger.setCronString(((CronTrigger) trigger).getCronExpression());
    }
    int triggerState = scheduler.getTriggerState(job.getJobId(), groupName);
    switch(triggerState) {
        case Trigger.STATE_NORMAL:
            job.setState(JobState.NORMAL);
            break;
        case Trigger.STATE_BLOCKED:
            job.setState(JobState.BLOCKED);
            break;
        case Trigger.STATE_COMPLETE:
            job.setState(JobState.COMPLETE);
            break;
        case Trigger.STATE_ERROR:
            job.setState(JobState.ERROR);
            break;
        case Trigger.STATE_PAUSED:
            job.setState(JobState.PAUSED);
            break;
        default:
            job.setState(JobState.UNKNOWN);
            break;
    }
    job.setJobName(QuartzJobKey.parse(job.getJobId()).getJobName());
    job.setNextRun(trigger.getNextFireTime());
    job.setLastRun(trigger.getPreviousFireTime());
}
Also used : SimpleJobTrigger(org.pentaho.platform.api.scheduler2.SimpleJobTrigger) CronTrigger(org.quartz.CronTrigger) ComplexJobTrigger(org.pentaho.platform.api.scheduler2.ComplexJobTrigger) Calendar(org.quartz.Calendar) SimpleTrigger(org.quartz.SimpleTrigger)

Example 82 with SchedulerException

use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.

the class QuartzScheduler method updateJob.

@Override
public void updateJob(String jobId, Map<String, Serializable> jobParams, IJobTrigger trigger) throws SchedulerException {
    QuartzJobKey jobKey = QuartzJobKey.parse(jobId);
    Trigger quartzTrigger = createQuartzTrigger(trigger, jobKey);
    quartzTrigger.setJobName(jobId);
    quartzTrigger.setJobGroup(jobKey.getUserName());
    Calendar triggerCalendar = quartzTrigger instanceof CronTrigger ? createQuartzCalendar((ComplexJobTrigger) trigger) : null;
    try {
        Scheduler scheduler = getQuartzScheduler();
        // int triggerState = scheduler.getTriggerState(jobId, jobKey.getUserName());
        // if (triggerState != Trigger.STATE_PAUSED) {
        // scheduler.pauseTrigger(jobId, jobKey.getUserName());
        // }
        JobDetail origJobDetail = scheduler.getJobDetail(jobId, jobKey.getUserName());
        if (origJobDetail.getJobDataMap().containsKey(RESERVEDMAPKEY_ACTIONCLASS)) {
            jobParams.put(RESERVEDMAPKEY_ACTIONCLASS, origJobDetail.getJobDataMap().get(RESERVEDMAPKEY_ACTIONCLASS).toString());
        } else if (origJobDetail.getJobDataMap().containsKey(RESERVEDMAPKEY_ACTIONID)) {
            jobParams.put(RESERVEDMAPKEY_ACTIONID, origJobDetail.getJobDataMap().get(RESERVEDMAPKEY_ACTIONID).toString());
        }
        if (origJobDetail.getJobDataMap().containsKey(RESERVEDMAPKEY_STREAMPROVIDER)) {
            jobParams.put(RESERVEDMAPKEY_STREAMPROVIDER, (Serializable) origJobDetail.getJobDataMap().get(RESERVEDMAPKEY_STREAMPROVIDER));
        }
        if (origJobDetail.getJobDataMap().containsKey(RESERVEDMAPKEY_UIPASSPARAM)) {
            jobParams.put(RESERVEDMAPKEY_UIPASSPARAM, (Serializable) origJobDetail.getJobDataMap().get(RESERVEDMAPKEY_UIPASSPARAM));
        }
        JobDetail jobDetail = createJobDetails(jobKey, jobParams);
        scheduler.addJob(jobDetail, true);
        if (triggerCalendar != null) {
            scheduler.addCalendar(jobId.toString(), triggerCalendar, true, true);
            quartzTrigger.setCalendarName(jobId.toString());
        }
        scheduler.rescheduleJob(jobId, jobKey.getUserName(), quartzTrigger);
        // if (triggerState != Trigger.STATE_PAUSED) {
        // scheduler.resumeTrigger(jobId, jobKey.getUserName());
        // }
        logger.debug(MessageFormat.format("Scheduling job {0} with trigger {1} and job parameters [ {2} ]", jobId.toString(), trigger, // $NON-NLS-1$
        prettyPrintMap(jobParams)));
    } catch (org.quartz.SchedulerException e) {
        throw new SchedulerException(Messages.getInstance().getString("QuartzScheduler.ERROR_0001_FAILED_TO_SCHEDULE_JOB", jobKey.getJobName()), // $NON-NLS-1$
        e);
    }
}
Also used : CronTrigger(org.quartz.CronTrigger) JobDetail(org.quartz.JobDetail) CronTrigger(org.quartz.CronTrigger) SimpleJobTrigger(org.pentaho.platform.api.scheduler2.SimpleJobTrigger) JobTrigger(org.pentaho.platform.api.scheduler2.JobTrigger) ComplexJobTrigger(org.pentaho.platform.api.scheduler2.ComplexJobTrigger) Trigger(org.quartz.Trigger) SimpleTrigger(org.quartz.SimpleTrigger) IJobTrigger(org.pentaho.platform.api.scheduler2.IJobTrigger) SchedulerException(org.pentaho.platform.api.scheduler2.SchedulerException) ComplexJobTrigger(org.pentaho.platform.api.scheduler2.ComplexJobTrigger) Scheduler(org.quartz.Scheduler) IScheduler(org.pentaho.platform.api.scheduler2.IScheduler) Calendar(org.quartz.Calendar)

Example 83 with SchedulerException

use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.

the class QuartzScheduler method triggerNow.

/**
 * {@inheritDoc}
 */
public void triggerNow(String jobId) throws SchedulerException {
    try {
        QuartzJobKey jobKey = QuartzJobKey.parse(jobId);
        Scheduler scheduler = getQuartzScheduler();
        String groupName = jobKey.getUserName();
        for (Trigger trigger : scheduler.getTriggersOfJob(jobId, groupName)) {
            if ("MANUAL_TRIGGER".equals(trigger.getGroup())) {
                continue;
            }
            if (trigger instanceof SimpleTrigger) {
                ((SimpleTrigger) trigger).setPreviousFireTime(new Date());
            } else if (trigger instanceof CronTrigger) {
                ((CronTrigger) trigger).setPreviousFireTime(new Date());
            }
            // force the trigger to be updated with the previous fire time
            scheduler.rescheduleJob(jobId, jobKey.getUserName(), trigger);
        }
        scheduler.triggerJob(jobId, jobKey.getUserName());
    } catch (org.quartz.SchedulerException e) {
        throw new SchedulerException(Messages.getInstance().getString("QuartzScheduler.ERROR_0007_FAILED_TO_GET_JOB", jobId), // $NON-NLS-1$
        e);
    }
}
Also used : CronTrigger(org.quartz.CronTrigger) CronTrigger(org.quartz.CronTrigger) SimpleJobTrigger(org.pentaho.platform.api.scheduler2.SimpleJobTrigger) JobTrigger(org.pentaho.platform.api.scheduler2.JobTrigger) ComplexJobTrigger(org.pentaho.platform.api.scheduler2.ComplexJobTrigger) Trigger(org.quartz.Trigger) SimpleTrigger(org.quartz.SimpleTrigger) IJobTrigger(org.pentaho.platform.api.scheduler2.IJobTrigger) SchedulerException(org.pentaho.platform.api.scheduler2.SchedulerException) Scheduler(org.quartz.Scheduler) IScheduler(org.pentaho.platform.api.scheduler2.IScheduler) SimpleTrigger(org.quartz.SimpleTrigger) Date(java.util.Date)

Example 84 with SchedulerException

use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.

the class RepositoryCleanerSystemListener method rescheduleIfNecessary.

private void rescheduleIfNecessary(IScheduler scheduler, List<Job> jobs) throws SchedulerException {
    JobTrigger trigger = findJobTrigger();
    if (trigger == null) {
        return;
    }
    List<Job> matched = new ArrayList<Job>(jobs.size());
    for (Job job : jobs) {
        JobTrigger tr = job.getJobTrigger();
        // unfortunately, JobTrigger does not override equals
        if (trigger.getClass() != tr.getClass()) {
            logger.info("Removing job with id: " + job.getJobId());
            scheduler.removeJob(job.getJobId());
        } else {
            matched.add(job);
        }
    }
    if (matched.isEmpty()) {
        logger.info("Need to re-schedule job");
        scheduleJob(scheduler);
    }
}
Also used : ArrayList(java.util.ArrayList) Job(org.pentaho.platform.api.scheduler2.Job) SimpleJobTrigger(org.pentaho.platform.api.scheduler2.SimpleJobTrigger) JobTrigger(org.pentaho.platform.api.scheduler2.JobTrigger) ComplexJobTrigger(org.pentaho.platform.api.scheduler2.ComplexJobTrigger)

Example 85 with SchedulerException

use of org.pentaho.platform.api.scheduler2.SchedulerException in project pentaho-platform by pentaho.

the class RepositoryCleanerSystemListener method unscheduleJob.

private void unscheduleJob(IScheduler scheduler, List<Job> jobs) throws SchedulerException {
    for (Job job : jobs) {
        logger.info("Removing job with id: " + job.getJobId());
        scheduler.removeJob(job.getJobId());
    }
}
Also used : Job(org.pentaho.platform.api.scheduler2.Job)

Aggregations

SchedulerException (org.pentaho.platform.api.scheduler2.SchedulerException)51 Test (org.junit.Test)49 Job (org.pentaho.platform.api.scheduler2.Job)43 IScheduler (org.pentaho.platform.api.scheduler2.IScheduler)23 ComplexJobTrigger (org.pentaho.platform.api.scheduler2.ComplexJobTrigger)18 SimpleJobTrigger (org.pentaho.platform.api.scheduler2.SimpleJobTrigger)16 Serializable (java.io.Serializable)15 IJobTrigger (org.pentaho.platform.api.scheduler2.IJobTrigger)11 Date (java.util.Date)10 JobTrigger (org.pentaho.platform.api.scheduler2.JobTrigger)9 Scheduler (org.quartz.Scheduler)9 ArrayList (java.util.ArrayList)8 IJobFilter (org.pentaho.platform.api.scheduler2.IJobFilter)8 IOException (java.io.IOException)6 Calendar (java.util.Calendar)6 HashMap (java.util.HashMap)6 CronTrigger (org.quartz.CronTrigger)6 SimpleTrigger (org.quartz.SimpleTrigger)6 Trigger (org.quartz.Trigger)6 Response (javax.ws.rs.core.Response)5