org.quartz.listeners
public class: JobChainingJobListener [javadoc |
source]
java.lang.Object
org.quartz.listeners.JobListenerSupport
org.quartz.listeners.JobChainingJobListener
All Implemented Interfaces:
JobListener
Keeps a collection of mappings of which Job to trigger after the completion
of a given job. If this listener is notified of a job completing that has a
mapping, then it will then attempt to trigger the follow-up job. This
achieves "job chaining", or a "poor man's workflow".
Generally an instance of this listener would be registered as a global
job listener, rather than being registered directly to a given job.
If for some reason there is a failure creating the trigger for the
follow-up job (which would generally only be caused by a rare serious
failure in the system, or the non-existence of the follow-up job), an error
messsage is logged, but no other action is taken. If you need more rigorous
handling of the error, consider scheduling the triggering of the flow-up
job within your job itself.
- author:
James - House (jhouse AT revolition DOT net)
| Constructor: |
public JobChainingJobListener(String name) {
if(name == null)
throw new IllegalArgumentException("Listener name cannot be null!");
this.name = name;
chainLinks = new HashMap();
}
Construct an instance with the given name. Parameters:
name - the name of this instance
|
| Method from org.quartz.listeners.JobChainingJobListener Detail: |
public void addJobChainLink(Key firstJob,
Key secondJob) {
if(firstJob == null || secondJob == null)
throw new IllegalArgumentException("Key cannot be null!");
if(firstJob.getName() == null || secondJob.getName() == null)
throw new IllegalArgumentException("Key cannot have a null name!");
chainLinks.put(firstJob, secondJob);
}
Add a chain mapping - when the Job identified by the first key completes
the job identified by the second key will be triggered. |
public String getName() {
return name;
}
|
public void jobWasExecuted(JobExecutionContext context,
JobExecutionException jobException) {
Key sj = (Key) chainLinks.get(context.getJobDetail().getKey());
if(sj == null)
return;
getLog().info("Job '" + context.getJobDetail().getFullName() + "' will now chain to Job '" + sj + "'");
try {
if(context.getJobDetail().isVolatile() || context.getTrigger().isVolatile())
context.getScheduler().triggerJobWithVolatileTrigger(sj.getName(), sj.getGroup());
else
context.getScheduler().triggerJob(sj.getName(), sj.getGroup());
}
catch(SchedulerException se) {
getLog().error("Error encountered during chaining to Job '" + sj + "'", se);
}
}
|