Class AsyncHTTPBuilder
- java.lang.Object
-
- groovyx.net.http.HTTPBuilder
-
- groovyx.net.http.AsyncHTTPBuilder
-
public class AsyncHTTPBuilder extends HTTPBuilder
This implementation makes all requests asynchronous by submitting jobs to aThreadPoolExecutor. All request methods (includinggetandpost) return aFutureinstance, whosegetmethod will provide access to whatever value was returned from the response handler closure.
-
-
Nested Class Summary
-
Nested classes/interfaces inherited from class groovyx.net.http.HTTPBuilder
HTTPBuilder.RequestConfigDelegate
-
-
Field Summary
Fields Modifier and Type Field Description static intDEFAULT_POOL_SIZEDefault pool size is one is not supplied in the constructor.protected java.util.concurrent.ExecutorServicethreadPool-
Fields inherited from class groovyx.net.http.HTTPBuilder
auth, autoAcceptHeader, contentEncodingHandler, defaultContentType, defaultRequestContentType, defaultRequestHeaders, defaultResponseHandlers, defaultURI, encoders, log, parsers
-
-
Constructor Summary
Constructors Constructor Description AsyncHTTPBuilder(java.util.Map<java.lang.String,?> args)Accepts the following named parameters: threadPoolCustomExecutorServiceinstance for running submitted requests.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description protected voiddefaultFailureHandler(HttpResponseDecorator resp)For 'failure' responses (e.g.protected java.lang.ObjectdefaultSuccessHandler(HttpResponseDecorator resp, java.lang.Object parsedData)This is the defaultresponse.successhandler.protected java.util.concurrent.Future<?>doRequest(HTTPBuilder.RequestConfigDelegate delegate)Submits aCallableinstance to the job pool, which in turn will callHTTPBuilder.doRequest(RequestConfigDelegate)in an asynchronous thread.private java.lang.ObjectdoRequestSuper(HTTPBuilder.RequestConfigDelegate delegate)protected voidfinalize()java.util.concurrent.ExecutorServicegetThreadExecutor()Access the underlying threadpool to adjust things like job timeouts.intgetTimeout()Get the timeout in for establishing an HTTP connection.protected voidinitThreadPools(int poolSize, java.util.concurrent.ExecutorService threadPool)Initializes threading parameters for the HTTPClient'sThreadSafeClientConnManager, and this class' ThreadPoolExecutor.voidsetTimeout(int timeout)This timeout is used for both the time to wait for an established connection, and the time to wait for data.voidshutdown()Release any system resources held by this instance.-
Methods inherited from class groovyx.net.http.HTTPBuilder
buildDefaultResponseHandlers, createClient, doRequest, get, get, getAuth, getClient, getContentType, getEncoder, getHandler, getHeaders, getParser, getUri, ignoreSSLIssues, isAutoAcceptHeader, parseResponse, post, post, request, request, request, setAuthConfig, setAutoAcceptHeader, setClient, setContentEncoding, setContentEncodingRegistry, setContentType, setEncoderRegistry, setHeaders, setParserRegistry, setProxy, setUri
-
-
-
-
Field Detail
-
DEFAULT_POOL_SIZE
public static final int DEFAULT_POOL_SIZE
Default pool size is one is not supplied in the constructor.- See Also:
- Constant Field Values
-
threadPool
protected java.util.concurrent.ExecutorService threadPool
-
-
Constructor Detail
-
AsyncHTTPBuilder
public AsyncHTTPBuilder(java.util.Map<java.lang.String,?> args) throws java.net.URISyntaxExceptionAccepts the following named parameters:- threadPool
- Custom
ExecutorServiceinstance for running submitted requests. If this is an instance ofThreadPoolExecutor, the poolSize will be determined byThreadPoolExecutor.getMaximumPoolSize(). The default threadPool uses an unbounded queue to accept an unlimited number of requests. - poolSize
- Max number of concurrent requests
- uri
- Default request URI
- contentType
- Default content type for requests and responses
- timeout
- Timeout in milliseconds to wait for a connection to be established and request to complete.
- Throws:
java.net.URISyntaxException
-
-
Method Detail
-
doRequest
protected java.util.concurrent.Future<?> doRequest(HTTPBuilder.RequestConfigDelegate delegate)
Submits aCallableinstance to the job pool, which in turn will callHTTPBuilder.doRequest(RequestConfigDelegate)in an asynchronous thread. TheFutureinstance returned by this value (which in turn should be returned by any of the publicrequestmethods (includinggetandpost) may be used to retrieve whatever value may be returned from the executed response handler closure.- Overrides:
doRequestin classHTTPBuilder
-
doRequestSuper
private java.lang.Object doRequestSuper(HTTPBuilder.RequestConfigDelegate delegate) throws java.io.IOException
- Throws:
java.io.IOException
-
initThreadPools
protected void initThreadPools(int poolSize, java.util.concurrent.ExecutorService threadPool)Initializes threading parameters for the HTTPClient'sThreadSafeClientConnManager, and this class' ThreadPoolExecutor.
-
defaultSuccessHandler
protected java.lang.Object defaultSuccessHandler(HttpResponseDecorator resp, java.lang.Object parsedData) throws ResponseParseException
This is the default
response.successhandler. It will be executed if the response is not handled by a status-code-specific handler (i.e.response.'200'= {..}) and no generic 'success' handler is given (i.e.response.success = {..}.) This handler simply returns the parsed data from the response body. In most cases you will probably want to define aresponse.success = {...}handler from the request closure, which will replace the response handler defined by this method.Note for parsers that return streaming content:
For responses parsed as
BINARYorTEXT, the parser will return streaming content -- anInputStreamorReader. In these cases, this handler will buffer the the response content before the network connection is closed.In practice, a user-supplied response handler closure is designed to handle streaming content so it can be read directly from the response stream without buffering, which will be much more efficient. Therefore, it is recommended that request method variants be used which explicitly accept a response handler closure in these cases.
- Overrides:
defaultSuccessHandlerin classHTTPBuilder- Parameters:
resp- HTTP responseparsedData- parsed data as resolved from this instance'sParserRegistry- Returns:
- the parsed data object (whatever the parser returns).
- Throws:
ResponseParseException- if there is an error buffering a streaming response.
-
defaultFailureHandler
protected void defaultFailureHandler(HttpResponseDecorator resp) throws HttpResponseException
For 'failure' responses (e.g. a 404), the exception will be wrapped in aExecutionExceptionand held by theFutureinstance. The exception is then re-thrown when callingfuture.get(). You can access the original exception (e.g. anHttpResponseException) by callingex.getCause().- Overrides:
defaultFailureHandlerin classHTTPBuilder- Throws:
HttpResponseException
-
setTimeout
public void setTimeout(int timeout)
This timeout is used for both the time to wait for an established connection, and the time to wait for data.- Parameters:
timeout- time to wait in milliseconds.- See Also:
HttpConnectionParams.setSoTimeout(HttpParams, int),HttpConnectionParams.setConnectionTimeout(HttpParams, int)
-
getTimeout
public int getTimeout()
Get the timeout in for establishing an HTTP connection.- Returns:
- timeout in milliseconds.
-
getThreadExecutor
public java.util.concurrent.ExecutorService getThreadExecutor()
Access the underlying threadpool to adjust things like job timeouts.
Note that this is not the same pool used by the HttpClient's
ThreadSafeClientConnManager. Therefore, increasing themaximum pool sizewill not in turn increase the number of possible concurrent requests. It will simply cause more requests to be attempted which will then simply block while waiting for a free connection.- Returns:
- the service used to execute requests. By default this is a
ThreadPoolExecutor.
-
shutdown
public void shutdown()
Release any system resources held by this instance.- Overrides:
shutdownin classHTTPBuilder- See Also:
ClientConnectionManager.shutdown()
-
finalize
protected void finalize() throws java.lang.Throwable- Overrides:
finalizein classjava.lang.Object- Throws:
java.lang.Throwable- See Also:
shutdown()
-
-