Chaining job execution in Quartz

Quartz javaThere isn’t explicit way to chain jobs in Quartz. However this is still possible, by doing some tricks. Here is an explanation on how to do that (in very few words).

There are two ways to put job in chain:
– first one, by using Listeners( for example JobChainingJobListener),
– and the second one, by using JobDataMap which every job contains.
I prefer the second way with JobDataMaps. Why ? Because DataMaps are persistent so information about chained jobs survives restart of the server.

Chain is nothing more than normal queue of the jobs, so to put two jobs into chain we need to create queue from them. Queue should be bidirectional to allow easy manipulation. The idea is to put 4 properties into JobDataMaps:
– nextJobName, nextJobGroup – identify next job in chain
– previousJobName, previousJobGroup – identify previous job in chain

Those 4 variables are enough to implement standard bi-directional queue operations like: addJobToQueue(..), removeFromQueue(..), moveUp(..) and moveDown(..). One thing to remeber: adding job to chain should stop it, to avoid triggering jobs in unspecified order.

Last thing to do is to create own implementation of the Quartz Job interface which, in execute() method, will fire/trigger next job in chain, if there is any.

That’s all.

You May Also Like

Me on Hadoop on Parleys

Finally I've managed to import my WarJUG presentation to parleys.com. See for yourself :) If you've got problems with opening the parleys' version try the ones uploaded to youtube. Here is part 1: And here is part 2: Finally I've managed to import my WarJUG presentation to parleys.com. See for yourself :) If you've got problems with opening the parleys' version try the ones uploaded to youtube. Here is part 1: And here is part 2:

Using Eclipse snippets for faster JUnit test creation (with Mockito!)

I'm using this snippet to create a template of new unit test method supporting BDD mockito tests. This is a good example for adding static imports to a class from snippets.@${testType:newType(org.junit.Test)}public void should${testname}() { ${staticIm...I'm using this snippet to create a template of new unit test method supporting BDD mockito tests. This is a good example for adding static imports to a class from snippets.@${testType:newType(org.junit.Test)}public void should${testname}() { ${staticIm...

Mentoring in Software Craftsmanship

Maria Diaconu and  Alexandru Bolboaca are both strong supporters of Software Craftsmanship and Agile movements in Romania, with years of experience as developers, leaders, architects, managers and instructors. On their lecture at Agile Central Eur...Maria Diaconu and  Alexandru Bolboaca are both strong supporters of Software Craftsmanship and Agile movements in Romania, with years of experience as developers, leaders, architects, managers and instructors. On their lecture at Agile Central Eur...