I'm also using SWF 1.0.1 , spring 2.0.2 .
The stateEntered() method fires twice on entry to the subflow: once on entry to the subflow-state within the application-flow, and again on entry to the first view-state in the subflow "cancel-flow".
My config is only slightly different to that described in my previous post: my cancel-flow is a top level flow rather than inline.
To the stateEntered() method of the listener, I temporarily added:
System.out.println(state.getId() + ":" + state.getOwner().getId())
08:19:36,459 INFO [STDOUT] confirmCancel:application-flow 08:19:47,881 INFO [STDOUT] promptConfirmCancel:cancel-flow