WebFlow recursive behavior

Brent Putman putmanb at georgetown.edu
Fri Jan 24 14:31:27 EST 2014


In another thread Scott said:

> - when it runs all these action states in a row, it seems to push them on
> the stack recursively rather than run them like functions individually as
> a series
>
> I'm mildly concerned that we may blow the execution stack if we keep
> chaining actions together in larger numbers, but I have no idea what the
> stack size is.
>
> WebFlow is really not designed to run lots of actions, it's meant for
> view->action->view kinds of flows that are short bursts of states. It
> works nicely for what we're doing with it as a design framework, but it
> isn't designed to do so, or it wouldn't be executing states recursively.


I wrote a little action impl that logs the stack trace at the point of
execution.  Sample output is attached.

It does seem to be doing what Scott observed from exception stack
traces.  In this example run, the logging action-state was the 6th
action in the chain of actions, and if you for example count up the
'...State.enter()' method calls, it's currently in the 6th one, along
with the associated transition executions and event handling and so on. 

So basically what we already knew, I just thought it's informative to
actually see a trace.
-------------- next part --------------
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: Current stack trace:
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: java.lang.Thread.getStackTrace(Thread.java:1588)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: idp.LogStackTraceAction.execute(LogStackTraceAction.java:15)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:51)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.action.EvaluateAction.doExecute(EvaluateAction.java:77)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.action.AbstractAction.execute(AbstractAction.java:188)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.execution.AnnotatedAction.execute(AnnotatedAction.java:145)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.execution.ActionExecutor.execute(ActionExecutor.java:51)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:101)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.State.enter(State.java:194)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Transition.execute(Transition.java:227)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:393)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
2014-01-24 14:20:20.875 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:388)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:105)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.State.enter(State.java:194)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Transition.execute(Transition.java:227)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:393)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:388)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:105)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.State.enter(State.java:194)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Transition.execute(Transition.java:227)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:393)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:388)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:105)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.State.enter(State.java:194)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Transition.execute(Transition.java:227)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:393)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:388)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:105)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.State.enter(State.java:194)
2014-01-24 14:20:20.876 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Transition.execute(Transition.java:227)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.execute(FlowExecutionImpl.java:393)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.execute(RequestControlContextImpl.java:214)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.TransitionableState.handleEvent(TransitionableState.java:119)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Flow.handleEvent(Flow.java:555)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.handleEvent(FlowExecutionImpl.java:388)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.RequestControlContextImpl.handleEvent(RequestControlContextImpl.java:210)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.ActionState.doEnter(ActionState.java:105)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.State.enter(State.java:194)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.Flow.start(Flow.java:535)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowExecutionImpl.java:366)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.engine.impl.FlowExecutionImpl.start(FlowExecutionImpl.java:222)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.executor.FlowExecutorImpl.launchExecution(FlowExecutorImpl.java:140)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.webflow.mvc.servlet.FlowHandlerAdapter.handle(FlowHandlerAdapter.java:193)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:925)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:856)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:920)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.web.servlet.FrameworkServlet.doGet(FrameworkServlet.java:816)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: javax.servlet.http.HttpServlet.service(HttpServlet.java:735)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:801)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: javax.servlet.http.HttpServlet.service(HttpServlet.java:848)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:681)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1452)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: net.shibboleth.utilities.java.support.net.RequestResponseContextFilter.doFilter(RequestResponseContextFilter.java:60)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.servlet.ServletHandler$CachedChain.doFilter(ServletHandler.java:1423)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:450)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:138)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:540)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:213)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:1083)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:379)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:175)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:1017)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:136)
2014-01-24 14:20:20.877 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:258)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:109)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:97)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.Server.handle(Server.java:445)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.HttpChannel.handle(HttpChannel.java:260)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.server.HttpConnection.onFillable(HttpConnection.java:225)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.io.AbstractConnection$ReadCallback.run(AbstractConnection.java:358)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.util.thread.QueuedThreadPool.runJob(QueuedThreadPool.java:596)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: org.eclipse.jetty.util.thread.QueuedThreadPool$3.run(QueuedThreadPool.java:527)
2014-01-24 14:20:20.878 [TRACE] : idp.LogStackTraceAction: java.lang.Thread.run(Thread.java:744)



More information about the dev mailing list