An execution listener is executed multiple times when the delegation code triggers execution tree expansion/compaction. For example, when a service task sends a BPMN message to a boundary event of a user task in the another concurrent execution. This ends the other concurrent execution and triggers execution tree compaction.
- Executions have a property listenerIndex that stores which listeners have already been invoked. If the current execution is replaced by another execution, this index is not passed over, so the listener invocations in the context of the replacing execution start at 0 again.