class ProxyRequestHandler extends Object implements RequestHandler
Modifier and Type | Class and Description |
---|---|
private static class |
ProxyRequestHandler.IgnoredCompletion |
private static class |
ProxyRequestHandler.NullContentResponseHandler |
private static class |
ProxyRequestHandler.ProxyCompletionHandler |
private static class |
ProxyRequestHandler.ProxyContentChannel |
private static class |
ProxyRequestHandler.ProxyResponseHandler |
Modifier and Type | Field and Description |
---|---|
(package private) RequestHandler |
delegate |
private static CompletionHandler |
IGNORED_COMPLETION |
private static Logger |
log |
DEBUG, SYSTEM_PROPERTY_NAME_DEBUG
Constructor and Description |
---|
ProxyRequestHandler(RequestHandler delegate) |
Modifier and Type | Method and Description |
---|---|
ContentChannel |
handleRequest(Request request,
ResponseHandler responseHandler)
This method will process the given
Request and return a ContentChannel into which the caller
can write the Request's content. |
void |
handleTimeout(Request request,
ResponseHandler responseHandler)
This method is called by the
Container when a Request that was previously accepted by RequestHandler.handleRequest(Request, ResponseHandler) has timed out. |
ResourceReference |
refer()
Increments the reference count of this resource.
|
void |
release()
Releases the "main" reference to this resource (the implicit reference due to creation of the object).
|
String |
toString() |
private static final CompletionHandler IGNORED_COMPLETION
private static final Logger log
final RequestHandler delegate
ProxyRequestHandler(RequestHandler delegate)
public ContentChannel handleRequest(Request request, ResponseHandler responseHandler)
RequestHandler
This method will process the given Request
and return a ContentChannel
into which the caller
can write the Request's content. For every call to this method, the implementation must call the provided ResponseHandler
exactly once.
Notice that unless this method throws an Exception, a reference to the currently active Container
instance is kept internally until ResponseHandler.handleResponse(Response)
has been called. This ensures
that the configured environment of the Request is stable throughout its lifetime. Failure to call back with a
Response will prevent the release of that reference, and therefore prevent the corresponding Container from ever
shutting down. The requirement to call ResponseHandler.handleResponse(Response)
is regardless of any
subsequent errors that may occur while working with the returned ContentChannel.
handleRequest
in interface RequestHandler
request
- The Request to handle.responseHandler
- The handler to pass the corresponding Response
to.public void handleTimeout(Request request, ResponseHandler responseHandler)
RequestHandler
This method is called by the Container
when a Request
that was previously accepted by RequestHandler.handleRequest(Request, ResponseHandler)
has timed out. If the Request has no timeout (i.e. Request.getTimeout(TimeUnit)
returns null), then this method is never called.
The given ResponseHandler
is the same ResponseHandler that was initially passed to the RequestHandler.handleRequest(Request, ResponseHandler)
method, and it is guarded by a volatile boolean so that only the first
call to ResponseHandler.handleResponse(Response)
is actually passed on. This means that you do NOT need
to manage the ResponseHandlers yourself to prevent a late Response from calling the same ResponseHandler.
Notice that you MUST call ResponseHandler.handleResponse(Response)
as a reaction to having this method
invoked. Failure to do so will prevent the Container from ever shutting down.
handleTimeout
in interface RequestHandler
request
- The Request that has timed out.responseHandler
- The handler to pass the timeout Response
to.Response.dispatchTimeout(ResponseHandler)
public ResourceReference refer()
SharedResource
Increments the reference count of this resource. You call this method to prevent an object from being destroyed until you have finished using it.
You MUST keep the returned ResourceReference
object and release the reference by calling
ResourceReference.close()
on it. A reference created by this method can NOT be released by calling
SharedResource.release()
.
refer
in interface SharedResource
ResourceReference.close()
public void release()
SharedResource
Releases the "main" reference to this resource (the implicit reference due to creation of the object).
References obtained by calling SharedResource.refer()
must be released by calling ResourceReference.close()
on the ResourceReference
returned from SharedResource.refer()
, NOT by calling this method. You call this
method once you are done using an object that you have previously caused instantiation of.
release
in interface SharedResource
ResourceReference
Copyright © 2017. All rights reserved.