public String list() throws SchedulerException { List<JobDefinition> jobs = schedulerCoreService.getJobs(); return GsonHelper.GSON.toJson(jobs); }
private void synchronizeJob(JobDefinition jobDefinition) throws SynchronizationException { try { if (!schedulerCoreService.existsJob(jobDefinition.getName())) { schedulerCoreService.createJob(jobDefinition.getName(), jobDefinition.getGroup(), jobDefinition.getClazz(), jobDefinition.getHandler(), jobDefinition.getEngine(), jobDefinition.getDescription(), jobDefinition.getExpression(), jobDefinition.isSingleton()); logger.info("Synchronized a new Job [{}] from group: {}", jobDefinition.getName(), jobDefinition.getGroup()); } else { JobDefinition existing = schedulerCoreService.getJob(jobDefinition.getName()); if (!jobDefinition.equals(existing)) { schedulerCoreService.updateJob(jobDefinition.getName(), jobDefinition.getGroup(), jobDefinition.getClazz(), jobDefinition.getHandler(), jobDefinition.getEngine(), jobDefinition.getDescription(), jobDefinition.getExpression(), jobDefinition.isSingleton()); logger.info("Synchronized a modified Job [{}] from group: {}", jobDefinition.getName(), jobDefinition.getGroup()); } } JOBS_SYNCHRONIZED.add(jobDefinition.getName()); } catch (SchedulerException e) { throw new SynchronizationException(e); } }
@Override protected void cleanup() throws SynchronizationException { logger.trace("Cleaning up Jobs..."); try { List<JobDefinition> jobDefinitions = schedulerCoreService.getJobs(); for (JobDefinition jobDefinition : jobDefinitions) { if (!JOBS_SYNCHRONIZED.contains(jobDefinition.getName())) { schedulerCoreService.removeJob(jobDefinition.getName()); logger.warn("Cleaned up Job [{}] from group: {}", jobDefinition.getName(), jobDefinition.getGroup()); } } } catch (SchedulerException e) { throw new SynchronizationException(e); } logger.trace("Done cleaning up Jobs."); }
/** * Register predelivered job. * * @param jobPath * the job path * @throws IOException * Signals that an I/O exception has occurred. */ public void registerPredeliveredJob(String jobPath) throws IOException { InputStream in = JobSynchronizer.class.getResourceAsStream(jobPath); try { String json = IOUtils.toString(in, StandardCharsets.UTF_8); JobDefinition jobDefinition = schedulerCoreService.parseJob(json); jobDefinition.setName(jobPath); JOBS_PREDELIVERED.put(jobPath, jobDefinition); } finally { if (in != null) { in.close(); } } }
private void startJobs() throws SchedulerException { logger.trace("Start Jobs..."); for (String jobName : JOBS_SYNCHRONIZED) { if (!SchedulerManager.existsJob(jobName)) { try { JobDefinition jobDefinition = schedulerCoreService.getJob(jobName); SchedulerManager.scheduleJob(jobDefinition); } catch (SchedulerException e) { logger.error(e.getMessage(), e); } } } Set<TriggerKey> runningJobs = SchedulerManager.listJobs(); for (TriggerKey jobKey : runningJobs) { try { if (!JOBS_SYNCHRONIZED.contains(jobKey.getName())) { SchedulerManager.unscheduleJob(jobKey.getName(), jobKey.getGroup()); } } catch (SchedulerException e) { logger.error(e.getMessage(), e); } } logger.trace("Running Jobs: " + runningJobs.size()); logger.trace("Done starting Jobs."); }
@Override protected void synchronizeResource(IResource resource) throws SynchronizationException { String resourceName = resource.getName(); if (resourceName.endsWith(ISchedulerCoreService.FILE_EXTENSION_JOB)) { JobDefinition jobDefinition = schedulerCoreService.parseJob(resource.getContent()); jobDefinition.setName(getRegistryPath(resource)); synchronizeJob(jobDefinition); } }