control-mjsr352java-batch

Design of JSR352 batch job: Is several steps a better design than one large batchlet?


My JSR352 batch job needs to read from a database, and then depending on the result flows to one of two pathways, each of which involves some more if/else scenarios. I wonder what the pros and cons between writing a single step with a large batchlet and several steps consisting of smaller batchlets would be. This job does not involves chunk steps with chunk size larger than 1, as it needs to persists the read result immediately in case there is any before proceeding to other logic. The job will be run using Control-M, I wonder if using multiple smaller steps provides more control points.


Solution

  • From that description, I'd suggest these

    Benefits of more, fine-grained steps

    1. Restart

    After a job failure, the default behavior on restart is to begin executing at the step where the previous job execution failed. So breaking the job up into more steps allows you to avoid writing the logic to resume where you left off and avoid re-processing, and may save execution time in the process.

    2. Reuse

    By encapsulating a discrete function as its own batchlet, you can potentially compose other steps in other jobs (or even later in this job) implemented with this same batchlet.

    3. Extract logic into XML

    By moving the transition logic into the transition elements, and extracting the conditional flow (e.g. <next on="RC1" to="step3"/>, etc.) into the job definition XML (JSL), you can introduce changes at a standard control point, without having to go into the Java source and find the right place.

    Final Thoughts

    You'll have to decide if those benefits are worth it for your case.

    One more thought

    I wouldn't automatically rule out the chunk step just because you are using a 1-item chunk, if you can still find benefits from the checkpointing or even possibly the skip/retry. (But that's probably a separate question.)