A Task element can have one of the following transaction types:
|atomicInternal||This task is executed atomically: it either fails or succeeds entirely. Since the implementation is internal to the system, the atomicity can be maintained through transactions (e.g. by the JEE framework)|
|atomicExternal||This task is executed atomically, but its execution is external to the system. If the task fails, a ‘compensating’ task is required to revert its changes.|
|aggregateTask||This task can be split up into smaller subtasks. The task keeps the state of the overal progress, so that it can continue after being interrupted. e.g. a task that reads a CSV file can be split into several subtasks that read segments of 500 lines. The last line that was read is kept. If the task needs to restart, it can start from the last read line.|
|noTransaction||This task is not transactional. If it fails, no actions are taken to revert any changes. This is the default behaviour.|
The implementation of transactions is handled by the Executor classes
|201712||3.2.0||Implemented atomicInternal and noTransaction variants|
In the 2017.12 release, the atomicInternal type is implemented so that it uses a transaction provided by the JEE framework. The atomicExternal, aggregateTask and noTransaction are not yet functionally different when expanded. Compensating tasks or extra state keeping need to be implemented with custom code.