I have a job in AEM that implements JobConsumer interface. My questions are:
1. Once it's triggered but not running yet, how to kill the job?
2. Once it's running, how to kill the job?
I saw JobConsumer interface has `cancel` method but I am not sure how to use it. I found an example online and it's not using cancel() in the exception clause:
@Overridepublic JobResult process(Job job) { try { logger.debug("Processing the JOB *******"); //A Property map will be passed on so we can fetch the values we need here to//Process the request String path = (String) job.getProperty("path"); logger.debug("The path in which the replication is triggered and passed to the Job is " + "{}", path); //TODO : Write your business logic here . Any properties you need to execute the job can be passed//TODO: on via the Map which is treated as the properties for the JOB. /** * Return the proper JobResult based on the work done... * * > OK : Processed successfully * > FAILED: Processed unsuccessfully and reschedule --> This will keep the JOB up for next retry * > CANCEL: Processed unsuccessfully and do NOT reschedule * > ASYNC: Process through the JobConsumer.AsyncHandler interface */return JobConsumer.JobResult.OK; } catch (Exception e) { logger.error("Exception is ", e); return JobResult.FAILED; } } }
Solved! Go to Solution.
Views
Replies
Total Likes
Hi @aemUser2345,
To kill the job in both cases you have described, you could use removeJobById method from JobManager. Here is a simple example:
package com.mysite.core.jobs;
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.JobManager;
import org.apache.sling.event.jobs.consumer.JobConsumer;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@Component(service=JobConsumer.class, property= {
JobConsumer.PROPERTY_TOPICS + "=my/special/jobtopic"
})
public class CustomJobConsumer implements JobConsumer {
@Reference
private JobManager jobManager;
@Override
public JobResult process(Job job) {
if (jobManager.removeJobById(job.getId())) {
return JobResult.CANCEL;
}
return JobResult.OK;
}
}
Hi @aemUser2345,
To kill the job in both cases you have described, you could use removeJobById method from JobManager. Here is a simple example:
package com.mysite.core.jobs;
import org.apache.sling.event.jobs.Job;
import org.apache.sling.event.jobs.JobManager;
import org.apache.sling.event.jobs.consumer.JobConsumer;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.component.annotations.Reference;
@Component(service=JobConsumer.class, property= {
JobConsumer.PROPERTY_TOPICS + "=my/special/jobtopic"
})
public class CustomJobConsumer implements JobConsumer {
@Reference
private JobManager jobManager;
@Override
public JobResult process(Job job) {
if (jobManager.removeJobById(job.getId())) {
return JobResult.CANCEL;
}
return JobResult.OK;
}
}
Requesting you to please confirm if the suggested answers helped.
If yes, requesting you to please mark the correct answer.
Views
Replies
Total Likes
Views
Likes
Replies
Views
Likes
Replies
Views
Likes
Replies