@Nullable @Override public JobRunnerResponse runJob(final JobRunnerRequest request) { final Map<FileType, ReplicationResult> result = performReplication(); if (result == null) { return JobRunnerResponse.aborted("Full replication is already in progress"); } return JobRunnerResponse.success(result.toString()); } }
@Nullable private JobRunnerResponse validateJobDetails() { if (jobDetails == null) { jobDetails = schedulerService.getJobDetails(jobId); if (jobDetails == null) { return aborted("No corresponding job details"); } } if (jobDetails.getRunMode() != schedulerRunMode) { return aborted("Inconsistent run mode: expected '" + jobDetails.getRunMode() + "' got: '" + schedulerRunMode + '\''); } return null; }
@Override public JobRunnerResponse runJob(JobRunnerRequest request) { // set the context class loader to the current bundle ClassLoader ctxClassLoader = Thread.currentThread().getContextClassLoader(); Thread.currentThread().setContextClassLoader(getClass().getClassLoader()); try { TaskMonitor<Void> monitor = start(); monitor.get(); return JobRunnerResponse.success(); } catch (InterruptedException e) { return JobRunnerResponse.aborted(e.getMessage()); } catch (ExecutionException e) { return JobRunnerResponse.failed(e.getCause()); } finally { // restore the original classloader Thread.currentThread().setContextClassLoader(ctxClassLoader); } }
@Nonnull private JobRunnerResponse runJob() { final RunningJob job = new RunningJobImpl(firedAt, jobId, jobConfig); final RunningJob existing = schedulerService.enterJob(jobId, job); if (existing != null) { LOG.debug("Unable to start job {} because it is already running as {}", job, existing); return JobRunnerResponse.aborted("Already running"); } schedulerService.preJob(); final Thread thd = Thread.currentThread(); final ClassLoader originalClassLoader = thd.getContextClassLoader(); try { // SCHEDULER-11: Ensure that the Job runs with its own class loader set as the thread's CCL thd.setContextClassLoader(jobRunner.getClass().getClassLoader()); final JobRunnerResponse response = jobRunner.runJob(job); return (response != null) ? response : JobRunnerResponse.success(); } finally { thd.setContextClassLoader(originalClassLoader); schedulerService.leaveJob(jobId, job); schedulerService.postJob(); } }
private static JobRunnerResponse runServiceId(final Long serviceId) { JobRunnerResponse response; final JiraServiceContainer service; try { final ServiceManager serviceManager = ComponentAccessor.getComponent(ServiceManager.class); service = serviceManager.getServiceWithId(serviceId); if (service == null) { response = JobRunnerResponse.aborted("Service ID '" + serviceId + "' no longer exists!"); } else { response = runService(service); } } catch (Exception e) { LOG.error("An error occurred while trying to run service with ID '" + serviceId + "'. " + e.getMessage(), e); response = JobRunnerResponse.failed(e); } return response; }
@Override public JobRunnerResponse runJob(@Nonnull JobRunnerRequest request) { if (!CLEANUP_JOB_ID.equals(request.getJobId())) { return JobRunnerResponse.aborted("Unknown job ID: " + request.getJobId()); } try { run(); } catch(Exception e) { return JobRunnerResponse.failed(e); } return JobRunnerResponse.success(); }
@Nullable private JobRunnerResponse validateJobConfig() { try { jobConfig = JobConfig.forJobRunnerKey(jobDetails.getJobRunnerKey()) .withRunMode(jobDetails.getRunMode()) .withSchedule(jobDetails.getSchedule()) .withParameters(jobDetails.getParameters()); return null; } catch (SchedulerRuntimeException sre) { return aborted(jobDetails.toString()); } }
@Nullable @Override public JobRunnerResponse runJob(JobRunnerRequest request) { if (!CLEANUP_JOB_ID.equals(request.getJobId())) { return JobRunnerResponse.aborted("Unknown job ID: " + request.getJobId()); } try { run(); } catch(Exception e) { return JobRunnerResponse.failed(e); } return JobRunnerResponse.success(); }