If a submit triggers a end state to enter when not using continuations, there is no possibility of duplicate submit -- the executing flow will be cleaned up and no longer accessible. So that's a built in feature there.
Now if that isn't the case or you're using continuations, other strategies must be used. The TransactionSynchronizer interface is there to allow you to demarcate application transactions. Right now there is one implementation: a token-based mechanism. See the 'itemList' sample that uses it.
Keith
Keith Donald
Core Spring Development Team