This release would best be described as a ‘Consolidation Release’. The biggest improvements are under the hood and result in an Oddjob that runs much better but in an almost indiscernible way. There are however a few new and noteworthy features. These include:
Setting a Time Next Due Date
This can now be changed while the timer is running. No need to stop, reconfigure, and restart.
The For Each job has been improved. The run window (The number of jobs loaded at any one time) is now also used in parallel execution mode. The ability to use Oddjob designer on the nested configuration has also been added.
One under the hood improvement worth a brief mention is Bean Bus. Bean Bus is Oddjob’s internal Pipes and Filters framework, and was previously only used by SQLJob to transform String queries into Streams of Magic Beans (BeanUtils DynaBeans really – but doesn’t Magic Beans sound cool?). Bean Bus has now been given a polish and bought above the hood with the introduction of a bean-bus job that allows arbitrary pipelines to be assembled. A Bean Bus starts with a Bus Driver that is a Java Runnable that drives Beans to a series of destinations that are just Java Collections. The idea being to create a framework that is as non-invasive as possible.
Here’s a Simple Bean Bus:
And here’s how this looks as configuration:
<oddjob> <job> <bean-bus> <parts> <bus:iterable-driver id="bean-bus" xmlns:bus="oddjob:beanbus"> <beans> <list> <values> <value value="Apple"/> <value value="Orange"/> <value value="Pear"/> <value value="Kiwi"/> <value value="Banana"/> </values> </list> </beans> </bus:iterable-driver> <bean batchSize="2" class="org.oddjob.beanbus.destinations.Batcher" id="batcher"/> <bus:bean-capture id="results" xmlns:bus="oddjob:beanbus"/> </parts> </bean-bus> </job> </oddjob>
Bean Bus is very much a work in progress. There will be more on Bean Bus in the coming months.