Hi Jorg,
I think the idea that each ServiceTask is atomic would be ok if Activiti is rarely used, or used at a very high level (i.e. similarly to the examples on the tutorial). If, however, Activiti is used for more low-level business logic, or used for more complex flows, this idea would fail at providing what Activiti programmers need.
To give you an idea of scope, we generally have over 100 service tasks in a flow with configurable paths through the flow, often times utilizing sub-flows to get what we need. We chose Activiti because of the complexity and configurability of the business logic that we must provide, and utilize Activiti to give our developers and BAs insight into how the flows work. About 10% of those service tasks perform Create, Update, and/or Delete operations in the database. Some are done conditionally. If we weren't able to carry a session across flows, what would that mean for our flows? Well, essentially the "flow" would be "start" -> "serviceTask" (which does 100% of the complex logic in Java) -> "end". Not much of a flow there anymore.
Taking it down a notch, imagine a very simple flow, wherein based we enter into the "startEvent", then perform a "create" operation on the database, then evaluate some conditional statement (xor). If the condition is true, we update another database record. If the condition is false, we end. Per the model you propose, the create and the update happen as atomic operations, and thus the create would not be able to be rolled back. This cannot possibly be how Activiti plans to handle this situation, it would be completely usable.
@Activiti, I'd be interested if the Activiti development team has any input into this conversation. Are ServiceTasks meant to execute all CRUD operations atomically per ServiceTask, or are sessions allowed/expected to be carried between tasks?