Manages the state transitions for async requests.
The internal states that are used are:
DISPATCHED - Standard request. Not in Async mode.
STARTING - ServletRequest.startAsync() has been called but the
request in which that call was made has not finished
processing.
STARTED - ServletRequest.startAsync() has been called and the
request in which that call was made has finished
processing.
MUST_COMPLETE - complete() has been called before the request in which
ServletRequest.startAsync() has finished. As soon as that
request finishes, the complete() will be processed.
COMPLETING - The call to complete() was made once the request was in
the STARTED state. May or may not be triggered by a
container thread - depends if start(Runnable) was used
TIMING_OUT - The async request has timed out and is waiting for a call
to complete(). If that isn't made, the error state will
entered.
MUST_DISPATCH - dispatch() has been called before the request in which
ServletRequest.startAsync() has finished. As soon as that
request finishes, the dispatch() will be processed.
DISPATCHING - The dispatch is being processed.
ERROR - Something went wrong.
|----------------->--------------|
| \|/
| |----------<---------------ERROR
| | complete() /|\ |postProcess()
| | error()| |
| | | | |--|timeout()
| | postProcess() | \|/ | \|/ auto
| | |--------------->DISPATCHED<------------------COMPLETING<----|
| | | /|\ | | /|\ |
| | | |--->-------| | |--| |
| | ^ | |startAsync() timeout() |
| | | | | |
| \|/ | | complete() \|/ postProcess() |
| MUST_COMPLETE-<- | ----<------STARTING-->----------------| ^
| /|\ | | | |
| | | | | |
| | ^ |dispatch() | |
| | | | | |
| | | \|/ \|/ complete() |
| | | MUST_DISPATCH STARTED---->-------|
| | | | | |
| | | |postProcess() | |
^ ^ | | dispatch() | |auto
| | | | |--------------------| |
| | | auto \|/ \|/ \|/
| | |---<----DISPATCHING<-----------------TIMING_OUT
| | dispatch() | |
| | | |
| |-------<-------------------------------------<----| |
| complete() |
| |
|----<------------------------<-----------------------------<--|
error()