/** * Copyright 1996-2014 FoxBPM ORG. * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. * * @author MAENLIANG */ package org.foxbpm.engine.impl.schedule; import java.util.ArrayList; import java.util.Date; import java.util.HashMap; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import org.foxbpm.engine.exception.FoxBPMException; import org.quartz.Calendar; import org.quartz.JobDataMap; import org.quartz.JobDetail; import org.quartz.JobExecutionContext; import org.quartz.JobKey; import org.quartz.ListenerManager; import org.quartz.Scheduler; import org.quartz.SchedulerContext; import org.quartz.SchedulerException; import org.quartz.SchedulerMetaData; import org.quartz.Trigger; import org.quartz.Trigger.TriggerState; import org.quartz.TriggerKey; import org.quartz.UnableToInterruptJobException; import org.quartz.impl.matchers.GroupMatcher; import org.quartz.spi.JobFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * FOXBPM 工作任务调度器,目前是封装的QUARTZ API,实现Scheduler以获取其所有行为 * * @author MAENLIANG * @date 2014-06-25 * */ public class FoxbpmScheduler implements Scheduler { private static Logger LOG = LoggerFactory.getLogger(FoxbpmScheduler.class); private Scheduler scheduler; public FoxbpmScheduler() { } public FoxbpmScheduler(Scheduler scheduler) { this.scheduler = scheduler; } public void scheduleFoxbpmJob(FoxbpmJobDetail<?> jobDetail) throws SchedulerException { // 进行FOXBPM操作 FoxbpmJobDetail<?> foxbpmJobDetail = (FoxbpmJobDetail<?>) jobDetail; List<Trigger> triggerList = foxbpmJobDetail.getTriggerList(); if (triggerList != null && triggerList.size() != 0) { if (triggerList.size() == 1) { this.scheduler.scheduleJob(foxbpmJobDetail.getJobDetail(), triggerList.get(0)); } else { Map<JobDetail, List<Trigger>> triggersAndJobs = new HashMap<JobDetail, List<Trigger>>(); triggersAndJobs.put(foxbpmJobDetail.getJobDetail(), triggerList); this.scheduler.scheduleJobs(triggersAndJobs, true); LOG.debug("调度工作成功,调度时间:" + new Date()); } } else { throw new FoxBPMException("FoxbpmSheduler 执行scheduleFoxbpmJob时候 triggerList为空"); } } public Scheduler getScheduler() { return scheduler; } public void setScheduler(Scheduler scheduler) { this.scheduler = scheduler; } public String getSchedulerName() throws SchedulerException { return this.getClass().getName(); } public String getSchedulerInstanceId() throws SchedulerException { return scheduler.getSchedulerInstanceId(); } public SchedulerContext getContext() throws SchedulerException { return scheduler.getContext(); } public void start() throws SchedulerException { scheduler.start(); } public void startDelayed(int seconds) throws SchedulerException { scheduler.startDelayed(seconds); } public boolean isStarted() throws SchedulerException { return scheduler.isStarted(); } public void standby() throws SchedulerException { scheduler.standby(); } public boolean isInStandbyMode() throws SchedulerException { return scheduler.isInStandbyMode(); } public void shutdown() throws SchedulerException { scheduler.shutdown(); } public void shutdown(boolean waitForJobsToComplete) throws SchedulerException { scheduler.shutdown(waitForJobsToComplete); } public boolean isShutdown() throws SchedulerException { return scheduler.isShutdown(); } public SchedulerMetaData getMetaData() throws SchedulerException { return scheduler.getMetaData(); } public List<JobExecutionContext> getCurrentlyExecutingJobs() throws SchedulerException { return scheduler.getCurrentlyExecutingJobs(); } public void setJobFactory(JobFactory factory) throws SchedulerException { scheduler.setJobFactory(factory); } public ListenerManager getListenerManager() throws SchedulerException { // TODO Auto-generated method stub return null; } public Date scheduleJob(JobDetail jobDetail, Trigger trigger) throws SchedulerException { return this.scheduler.scheduleJob(jobDetail, trigger); } public Date scheduleJob(Trigger trigger) throws SchedulerException { return scheduler.scheduleJob(trigger); } public void scheduleJobs(Map<JobDetail, List<Trigger>> triggersAndJobs, boolean replace) throws SchedulerException { // TODO Auto-generated method stub } public boolean unscheduleJob(TriggerKey triggerKey) throws SchedulerException { // TODO Auto-generated method stub return false; } public boolean unscheduleJobs(List<TriggerKey> triggerKeys) throws SchedulerException { // TODO Auto-generated method stub return false; } public Date rescheduleJob(TriggerKey triggerKey, Trigger newTrigger) throws SchedulerException { // TODO Auto-generated method stub return null; } public void addJob(JobDetail jobDetail, boolean replace) throws SchedulerException { // TODO Auto-generated method stub } public boolean deleteJob(JobKey jobKey) throws SchedulerException { return this.getScheduler().deleteJob(jobKey); } public boolean deleteJob(FoxbpmJobDetail<?> jobDetail) { FoxbpmScheduleJob foxbpmScheduleJob = (FoxbpmScheduleJob) jobDetail.getFoxbpmJob(); try { return this.getScheduler().deleteJob(new JobKey(foxbpmScheduleJob.getName(), foxbpmScheduleJob.getGroupName())); } catch (SchedulerException e) { // TODO Auto-generated catch block } return false; } public boolean deleteJobs(List<JobKey> jobKeys) throws SchedulerException { return this.scheduler.deleteJobs(jobKeys); } public boolean deleteJobsByGroupName(String groupName) throws SchedulerException { Set<JobKey> jobKeys = new HashSet<JobKey>(); jobKeys = this.getJobKeys(GroupMatcher.jobGroupContains(groupName)); List<JobKey> jobKeysList = null; if (jobKeys.size() > 0) { jobKeysList = new ArrayList<JobKey>(); jobKeysList.addAll(jobKeys); return this.scheduler.deleteJobs(jobKeysList); } return false; } public void triggerJob(JobKey jobKey) throws SchedulerException { // TODO Auto-generated method stub } public void triggerJob(JobKey jobKey, JobDataMap data) throws SchedulerException { // TODO Auto-generated method stub } public void pauseJob(JobKey jobKey) throws SchedulerException { // TODO Auto-generated method stub } public void pauseJobs(GroupMatcher<JobKey> matcher) throws SchedulerException { // TODO Auto-generated method stub } public void pauseTrigger(TriggerKey triggerKey) throws SchedulerException { scheduler.pauseTrigger(triggerKey); } public void pauseTriggers(GroupMatcher<TriggerKey> matcher) throws SchedulerException { scheduler.pauseTriggers(matcher); } public void resumeJob(JobKey jobKey) throws SchedulerException { scheduler.resumeJob(jobKey); } public void resumeJobs(GroupMatcher<JobKey> matcher) throws SchedulerException { scheduler.resumeJobs(matcher); } public void resumeTrigger(TriggerKey triggerKey) throws SchedulerException { // TODO Auto-generated method stub } public void resumeTriggers(GroupMatcher<TriggerKey> matcher) throws SchedulerException { // TODO Auto-generated method stub } public void pauseAll() throws SchedulerException { // TODO Auto-generated method stub } public void resumeAll() throws SchedulerException { // TODO Auto-generated method stub } public List<String> getJobGroupNames() throws SchedulerException { // TODO Auto-generated method stub return null; } public Set<JobKey> getJobKeys(GroupMatcher<JobKey> matcher) throws SchedulerException { return this.scheduler.getJobKeys(matcher); } public List<? extends Trigger> getTriggersOfJob(JobKey jobKey) throws SchedulerException { // TODO Auto-generated method stub return null; } public List<String> getTriggerGroupNames() throws SchedulerException { // TODO Auto-generated method stub return null; } public Set<TriggerKey> getTriggerKeys(GroupMatcher<TriggerKey> matcher) throws SchedulerException { // TODO Auto-generated method stub return null; } public Set<String> getPausedTriggerGroups() throws SchedulerException { // TODO Auto-generated method stub return null; } public JobDetail getJobDetail(JobKey jobKey) throws SchedulerException { // TODO Auto-generated method stub return null; } public Trigger getTrigger(TriggerKey triggerKey) throws SchedulerException { // TODO Auto-generated method stub return null; } public TriggerState getTriggerState(TriggerKey triggerKey) throws SchedulerException { // TODO Auto-generated method stub return null; } public void addCalendar(String calName, Calendar calendar, boolean replace, boolean updateTriggers) throws SchedulerException { // TODO Auto-generated method stub } public boolean deleteCalendar(String calName) throws SchedulerException { // TODO Auto-generated method stub return false; } public Calendar getCalendar(String calName) throws SchedulerException { // TODO Auto-generated method stub return null; } public List<String> getCalendarNames() throws SchedulerException { // TODO Auto-generated method stub return null; } public boolean interrupt(JobKey jobKey) throws UnableToInterruptJobException { // TODO Auto-generated method stub return false; } public boolean interrupt(String fireInstanceId) throws UnableToInterruptJobException { // TODO Auto-generated method stub return false; } public boolean checkExists(JobKey jobKey) throws SchedulerException { // TODO Auto-generated method stub return false; } public boolean checkExists(TriggerKey triggerKey) throws SchedulerException { // TODO Auto-generated method stub return false; } public void clear() throws SchedulerException { // TODO Auto-generated method stub } }