The default flow execution repository implementation. Takes
one to {@link #getMaxSnapshots() max} flow execution snapshots, where each snapshot represents a copy of a {@link FlowExecution} taken at a point in time.
The set of active flow executions are managed by a {@link ConversationManager} implementation, which this repositorydelegates to.
This repository is responsible for:
- Beginning a new {@link Conversation} when a {@link FlowExecution} is assigned a persistent key. Eachconversation is assigned a unique conversation id which forms one part of the flow execution key.
- Taking {@link FlowExecutionSnapshot execution snapshots} to persist flow execution state. A snapshot is a copyof the execution created at a point in time that can be restored and continued. Snapshotting supports users going back in their browser to continue their flow execution from a previoius point.
- Ending conversations when flow executions end.
This repository implementation also provides support for execution invalidation after completion, where once a logical flow execution completes, it and all of its snapshots are removed. This cleans up memory and prevents the possibility of duplicate submission after completion.
@author Keith Donald