001 /* 002 * Copyright 2011 The Kuali Foundation. 003 * 004 * Licensed under the Educational Community License, Version 2.0 (the "License"); 005 * you may not use this file except in compliance with the License. 006 * You may obtain a copy of the License at 007 * 008 * http://www.opensource.org/licenses/ecl2.php 009 * 010 * Unless required by applicable law or agreed to in writing, software 011 * distributed under the License is distributed on an "AS IS" BASIS, 012 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 013 * See the License for the specific language governing permissions and 014 * limitations under the License. 015 */ 016 package org.kuali.kfs.sys.batch.service; 017 018 import java.util.Date; 019 import java.util.List; 020 021 import org.kuali.kfs.sys.batch.BatchJobStatus; 022 import org.kuali.kfs.sys.batch.Job; 023 import org.quartz.JobDetail; 024 import org.quartz.JobExecutionContext; 025 import org.quartz.Scheduler; 026 027 public interface SchedulerService { 028 public static final String PENDING_JOB_STATUS_CODE = "Pending"; 029 public static final String SCHEDULED_JOB_STATUS_CODE = "Scheduled"; 030 public static final String RUNNING_JOB_STATUS_CODE = "Running"; 031 public static final String SUCCEEDED_JOB_STATUS_CODE = "Succeeded"; 032 public static final String FAILED_JOB_STATUS_CODE = "Failed"; 033 public static final String CANCELLED_JOB_STATUS_CODE = "Cancelled"; 034 035 public static final String SCHEDULED_GROUP = "scheduled"; 036 public static final String UNSCHEDULED_GROUP = "unscheduled"; 037 038 public void initialize(); 039 040 public void initializeJob(String jobName, Job job); 041 042 /** 043 * This method checks whether any jobs in the SCHEDULED job group are pending or currently scheduled. 044 * 045 * @return hasIncompleteJob 046 */ 047 public boolean hasIncompleteJob(); 048 049 /** 050 * This method should be used to determine when the daily batch schedule should terminate. It compares the start time of the 051 * schedule job from quartz with a time specified by the scheduleStep_CUTOFF_TIME system parameter in the SYSTEM security group 052 * on the day after the schedule job started running. 053 * 054 * @return pastScheduleCutoffTime 055 */ 056 public boolean isPastScheduleCutoffTime(); 057 058 public void processWaitingJobs(); 059 060 public void logScheduleResults(); 061 062 public boolean shouldNotRun(JobDetail jobDetail); 063 064 public String getStatus(JobDetail jobDetail); 065 066 public void updateStatus(JobDetail jobDetail, String jobStatus); 067 068 public void setScheduler(Scheduler scheduler); 069 070 public List<BatchJobStatus> getJobs(String groupName); 071 072 /** 073 * Get all jobs known to the scheduler wrapped within a BusinessObject-derived class. 074 * 075 * @return 076 */ 077 public List<BatchJobStatus> getJobs(); 078 079 /** 080 * Gets a single job based on its name and group. 081 * 082 * @param groupName 083 * @param jobName 084 * @return 085 */ 086 public BatchJobStatus getJob(String groupName, String jobName); 087 088 /** 089 * Immediately runs the specified job. 090 * 091 * @param jobName 092 * @param startStep 093 * @param stopStep 094 * @param requestorEmailAddress 095 */ 096 public void runJob(String jobName, int startStep, int stopStep, Date startTime, String requestorEmailAddress); 097 098 /** 099 * Immediately runs the specified job. 100 * 101 * @param jobName 102 * @param requestorEmailAddress 103 */ 104 public void runJob(String jobName, String requestorEmailAddress); 105 106 /** 107 * Returns the list of job currently running within the scheduler. 108 * 109 * @return 110 */ 111 public List<JobExecutionContext> getRunningJobs(); 112 113 /** 114 * Removes a job from the scheduled group. 115 * 116 * @param jobName 117 */ 118 public void removeScheduled(String jobName); 119 120 /** 121 * Adds the given job to the "scheduled" group. 122 * 123 * @param job 124 */ 125 public void addScheduled(JobDetail job); 126 127 /** 128 * Adds the given job to the "unscheduled" group. 129 * 130 * @param job 131 */ 132 public void addUnscheduled(JobDetail job); 133 134 /** 135 * Returns a list of all groups defined in the scheduler. 136 * 137 * @return 138 */ 139 public List<String> getSchedulerGroups(); 140 141 /** 142 * Returns a list of all possible statuses. 143 * 144 * @return 145 */ 146 public List<String> getJobStatuses(); 147 148 /** 149 * Requests that the given job be stopped as soon as possble. It is up to the job to watch for this request and terminiate. Long 150 * running steps may not end unless they check for the interrupted status on their current Thread ot Step instance. 151 * 152 * @param jobName 153 */ 154 public void interruptJob(String jobName); 155 156 /** 157 * Tests whether the referenced job name is running, regardless of group. 158 * 159 * @param jobName 160 * @return 161 */ 162 public boolean isJobRunning(String jobName); 163 164 /** 165 * Returns the next start time for the given job. 166 * 167 * @param job 168 * @return 169 */ 170 public Date getNextStartTime(BatchJobStatus job); 171 172 /** 173 * Returns the next start time for the given job. 174 * 175 * @param groupName 176 * @param jobName 177 * @return 178 */ 179 public Date getNextStartTime(String groupName, String jobName); 180 181 public void reinitializeScheduledJobs(); 182 }