in src/main/java/org/apache/sling/event/impl/jobs/JobManagerImpl.java [247:296]
private boolean internalRemoveJobById(final String jobId, final boolean forceRemove) {
logger.debug("Trying to remove job {}", jobId);
boolean result = true;
JobImpl job = (JobImpl)this.getJobById(jobId);
if ( job != null ) {
if ( logger.isDebugEnabled() ) {
logger.debug("Found removal job: {}", Utility.toString(job));
}
final JobImpl retryJob = (JobImpl)this.configuration.getJobFromRetryList(jobId);
if ( retryJob != null ) {
job = retryJob;
}
// currently running?
if ( !forceRemove && job.getProcessingStarted() != null ) {
if ( logger.isDebugEnabled() ) {
logger.debug("Unable to remove job - job is started: {}", Utility.toString(job));
}
result = false;
} else {
final boolean isHistoryJob = this.configuration.isStoragePath(job.getResourcePath());
// if history job, simply remove - otherwise move to history!
if ( isHistoryJob ) {
final ResourceResolver resolver = this.configuration.createResourceResolver();
try {
final Resource jobResource = resolver.getResource(job.getResourcePath());
if ( jobResource != null ) {
resolver.delete(jobResource);
resolver.commit();
logger.debug("Removed job with id: {}", jobId);
} else {
logger.debug("Unable to remove job with id - resource already removed: {}", jobId);
}
NotificationUtility.sendNotification(this.eventAdmin, NotificationConstants.TOPIC_JOB_REMOVED, job, null);
} catch ( final PersistenceException pe) {
logger.warn("Unable to remove job at " + job.getResourcePath(), pe);
result = false;
} finally {
resolver.close();
}
} else {
final JobHandler jh = new JobHandler(job, null, this.configuration);
jh.finished(Job.JobState.DROPPED, true, null);
}
this.configuration.getAuditLogger().debug("REMOVE OK : {}", jobId);
}
} else {
logger.debug("Job for removal does not exist (anymore): {}", jobId);
}
return result;
}