I think if you read the http://docs.oracle.com/javaee/6/api/javax/servlet/AsyncContext.html#dispatch%28java.lang.String%29 you will see you need to start your AsyncProcessor() on one event (probably onStartAsync()).
What are you trying to do?
I'm currently testing the Servlet 3.0 implementation of the different app servers and thus tried to set up a sample test case which:
(1) starts a worker using AsyncContext.start(AsyncProcessor)
(2) stats another worker with AsyncContext.start(AsyncProcessor1)
(3) dispatching to a jsp for rendering the result with AsyncContext.dispatch(path to jsp)
i.e. I do only one dispatch on the AsyncContext as specified in the JavaDoc. If I change the example to render the result directly in worker1 completing with AsyncContext.complete(), the processing is done correctly. However, as soon as the dispatch to the JSP is added, the loop occurs.
So far the sample worked fine with GlassFish 310, WebSphere 8.5, WebLogic 12.1.1. and Tomcat 7.0.33.
THX for your time, Christian
it might be a bug then :-(