Creating JobWork

The most important goal of a BatchJob class is to return an instance of JobWork describing what work should be done (ThreadWorkUnits) and have that work split into manageable chunks (ThreadWork) that can be processed by a single ThreadWorker.

Most commonly, ThreadWorkUnits contain only the ID values of the entities to be processed. For example, one can envision a process that performs an operation on a set of accounts. In general, one would expect that each ThreadWorkUnit would contain a single AccountId. The ThreadWorker objects would then be constructed in such a way that when asked to execute for a ThreadWorkUnit it would pull out the embedded AccountId and then perform the required business function.

There are convenience methods available from the AbstractBatchJob that make it easier to create JobWork instances. For example, the createJobWorkForEntityQuery(Query) method will accept a query returning BusinessEntity instances and create a JobWork instance containing the appropriate number of ThreadWork instances each containing (notwithstanding rounding) the same number of ThreadWorkUnits.