Assert.state(!hasStarted(), "This flow has already been started; you cannot call 'start()' more than once");
if (logger.isDebugEnabled()) {
logger.debug("Starting in " + externalContext + " with input " + input);
}
MessageContext messageContext = createMessageContext(null);
RequestControlContext requestContext = createRequestContext(externalContext, messageContext);
RequestContextHolder.setRequestContext(requestContext);
listeners.fireRequestSubmitted(requestContext);
try {
start(flow, input, requestContext);
} catch (FlowExecutionException e) {