# Class AsyncContextImpl

java.lang.Object
org.apache.catalina.core.AsyncContextImpl

All Implemented Interfaces:
  `AsyncContext`, `AsyncContextCallback`

public class AsyncContextImpl extends Object implements AsyncContext, AsyncContextCallback

## Field Summary

Fields
Modifier and Type
Field
Description
`protected static final StringManager`
`sm`

### Fields inherited from interface javax.servlet.AsyncContext

`ASYNC_CONTEXT_PATH, ASYNC_MAPPING, ASYNC_PATH_INFO, ASYNC_QUERY_STRING, ASYNC_REQUEST_URI, ASYNC_SERVLET_PATH`

## Constructor Summary

Constructors
Constructor
Description
`AsyncContextImpl(Request request)`

## Method Summary

Modifier and Type
Method
Description
`void`
`addListener(AsyncListener listener)`
Adds an event listener that will be called for different AsyncEvents fire
`void`
`addListener(AsyncListener listener, ServletRequest servletRequest, ServletResponse servletResponse)`
Adds an event listener that will be called when different AsyncEvents fire
`void`
`complete()`
Completes the async request processing and closes the response stream
`<T extends AsyncListener>
T`
`createListener(Class<T> clazz)`
Creates and returns an AsyncListener object
`void`
`decrementInProgressAsyncCount()`
Used to notify the Context that async processing has ended.
`void`
`dispatch()`
`void`
`dispatch(String path)`
`void`
`dispatch(ServletContext servletContext, String path)`
`protected void`
`doInternalDispatch()`
`void`
`fireOnComplete()`
`ServletRequest`
`getRequest()`
`ServletResponse`
`getResponse()`
`long`
`getTimeout()`
Get the current timeout.
`boolean`
`hasOriginalRequestAndResponse()`
`void`
`incrementInProgressAsyncCount()`
Used to notify the Context that async processing has started.
`boolean`
`isAvailable()`
Reports if the web application associated with this async request is available.
`boolean`
`isStarted()`
`void`
`recycle()`
`void`
`setErrorState(Throwable t, boolean fireOnError)`
`void`
`setStarted(Context context, ServletRequest request, ServletResponse response, boolean originalRequestResponse)`
`void`
`setTimeout(long timeout)`
Set the timeout.
`void`
`start(Runnable run)`
Starts a new thread to process the asynchronous request
`boolean`
`timeout()`

### Methods inherited from class java.lang.Object

`clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

## Field Details

### sm

protected static final StringManager sm

## Constructor Details

### AsyncContextImpl

public AsyncContextImpl(Request request)

## Method Details

### complete

public void complete()
Description copied from interface: `javax.servlet.AsyncContext`
Completes the async request processing and closes the response stream

Specified by:
  `complete` in interface `AsyncContext`

### fireOnComplete

public void fireOnComplete()

Specified by:
  `fireOnComplete` in interface `AsyncContextCallback`

### timeout

public boolean timeout()

### dispatch

public void dispatch()

Specified by:
  `dispatch` in interface `AsyncContext`

### dispatch

public void dispatch(String path)

Specified by:
  `dispatch` in interface `AsyncContext`
Parameters:
  `path` - The path to which the request/response should be dispatched relative to the `ServletContext` from which this async request was started.

### dispatch

public void dispatch(ServletContext servletContext, String path)

Specified by:
  `dispatch` in interface `AsyncContext`
Parameters:
  `servletContext` - The `ServletContext` to which the request/response should be dispatched.
  `path` - The path to which the request/response should be dispatched relative to the specified `ServletContext`.

### getRequest

public ServletRequest getRequest()

Specified by:
  `getRequest` in interface `AsyncContext`
Returns:
  a reference to the ServletRequest object

### getResponse

public ServletResponse getResponse()

Specified by:
  `getResponse` in interface `AsyncContext`
Returns:
  a reference to the ServletResponse object

### start

public void start(Runnable run)
Description copied from interface: `javax.servlet.AsyncContext`
Starts a new thread to process the asynchronous request

Specified by:
  `start` in interface `AsyncContext`
Parameters:
  `run` - a Runnable that the new thread will run

### addListener

public void addListener(AsyncListener listener)
Description copied from interface: `javax.servlet.AsyncContext`
Adds an event listener that will be called for different AsyncEvents fire

Specified by:
  `addListener` in interface `AsyncContext`
Parameters:
  `listener` - an AsyncListener that will be called with AsyncEvent objects

### addListener

public void addListener(AsyncListener listener, ServletRequest servletRequest, ServletResponse servletResponse)
Description copied from interface: `javax.servlet.AsyncContext`
Adds an event listener that will be called when different AsyncEvents fire

Specified by:
  `addListener` in interface `AsyncContext`
Parameters:
  `listener` - an AsyncListener that will be called with AsyncEvent objects
  `servletRequest` - the ServletRequest that will be passed with the AsyncEvent
  `servletResponse` - the ServletResponse that will be passed with the AsyncEvent

### createListener

public <T extends AsyncListener> T createListener(Class<T> clazz) throws ServletException
Description copied from interface: `javax.servlet.AsyncContext`
Creates and returns an AsyncListener object

Specified by:
  `createListener` in interface `AsyncContext`
Type Parameters:
  `T` - The type to create that extends AsyncListener
Parameters:
  `clazz` - The class to instantiate to create the listener
Returns:
  the newly created AsyncListener object
Throws:
  `ServletException` - if the listener cannot be created

### recycle

public void recycle()

### isStarted

public boolean isStarted()

### setStarted

public void setStarted(Context context, ServletRequest request, ServletResponse response, boolean originalRequestResponse)

### hasOriginalRequestAndResponse

public boolean hasOriginalRequestAndResponse()

Specified by:
  `hasOriginalRequestAndResponse` in interface `AsyncContext`
Returns:
  true if the Request and Response are the original ones

### doInternalDispatch

protected void doInternalDispatch() throws ServletException, IOException

Throws:
  `ServletException`
  `IOException`

### getTimeout

public long getTimeout()
Description copied from interface: `javax.servlet.AsyncContext`
Get the current timeout.

Specified by:
  `getTimeout` in interface `AsyncContext`
Returns:
  The timeout in milliseconds. 0 or less indicates no timeout.

### setTimeout

public void setTimeout(long timeout)
Description copied from interface: `javax.servlet.AsyncContext`
Set the timeout.

Specified by:
  `setTimeout` in interface `AsyncContext`
Parameters:
  `timeout` - The timeout in milliseconds. 0 or less indicates no timeout.

### isAvailable

public boolean isAvailable()
Description copied from interface: `AsyncContextCallback`
Reports if the web application associated with this async request is available.

Specified by:
  `isAvailable` in interface `AsyncContextCallback`
Returns:
  `true` if the associated web application is available, otherwise `false`

### setErrorState

public void setErrorState(Throwable t, boolean fireOnError)

### incrementInProgressAsyncCount

public void incrementInProgressAsyncCount()
Description copied from interface: `AsyncContextCallback`
Used to notify the Context that async processing has started. Specifically, for the counting of in-progress async requests to work correctly, this must be called exactly once every time the `AsyncStateMachine` transitions from DISPATCHED to any other state.

Specified by:
  `incrementInProgressAsyncCount` in interface `AsyncContextCallback`

### decrementInProgressAsyncCount

public void decrementInProgressAsyncCount()
Description copied from interface: `AsyncContextCallback`
Used to notify the Context that async processing has ended. Specifically, for the counting of in-progress async requests to work correctly, this must be called exactly once every time the `AsyncStateMachine` transitions to DISPATCHED from any other state.

Specified by:
  `decrementInProgressAsyncCount` in interface `AsyncContextCallback`