Merge pull request #288 from matt-blanchette/master

Exposing parameters for HTTP client request pool max connections in RestfulClientFactory
This commit is contained in:
James Agnew 2016-01-21 21:46:18 -05:00
commit e73f409800
2 changed files with 69 additions and 2 deletions

View File

@ -47,6 +47,16 @@ public interface IRestfulClientFactory {
*/ */
public static final int DEFAULT_SOCKET_TIMEOUT = 10000; public static final int DEFAULT_SOCKET_TIMEOUT = 10000;
/**
* Default value for {@link #getPoolMaxTotal() ()}
*/
public static final int DEFAULT_POOL_MAX = 20;
/**
* Default value for {@link #getPoolMaxPerRoute() }
*/
public static final int DEFAULT_POOL_MAX_PER_ROUTE = DEFAULT_POOL_MAX;
/** /**
* Gets the connection request timeout, in milliseconds. This is the amount of time that the HTTPClient connection * Gets the connection request timeout, in milliseconds. This is the amount of time that the HTTPClient connection
* pool may wait for an available connection before failing. This setting typically does not need to be adjusted. * pool may wait for an available connection before failing. This setting typically does not need to be adjusted.
@ -99,6 +109,22 @@ public interface IRestfulClientFactory {
*/ */
int getSocketTimeout(); int getSocketTimeout();
/**
* Gets the maximum number of connections allowed in the pool.
* <p>
* The default value for this setting is defined by {@link #DEFAULT_POOL_MAX}
* </p>
*/
int getPoolMaxTotal();
/**
* Gets the maximum number of connections per route allowed in the pool.
* <p>
* The default value for this setting is defined by {@link #DEFAULT_POOL_MAX_PER_ROUTE}
* </p>
*/
int getPoolMaxPerRoute();
/** /**
* Instantiates a new client instance * Instantiates a new client instance
* *
@ -193,4 +219,19 @@ public interface IRestfulClientFactory {
*/ */
void setSocketTimeout(int theSocketTimeout); void setSocketTimeout(int theSocketTimeout);
/**
* Sets the maximum number of connections allowed in the pool.
* <p>
* The default value for this setting is defined by {@link #DEFAULT_POOL_MAX}
* </p>
*/
void setPoolMaxTotal(int thePoolMaxTotal);
/**
* Sets the maximum number of connections per route allowed in the pool.
* <p>
* The default value for this setting is defined by {@link #DEFAULT_POOL_MAX_PER_ROUTE}
* </p>
*/
void setPoolMaxPerRoute(int thePoolMaxPerRoute);
} }

View File

@ -68,6 +68,8 @@ public class RestfulClientFactory implements IRestfulClientFactory {
private ServerValidationModeEnum myServerValidationMode = DEFAULT_SERVER_VALIDATION_MODE; private ServerValidationModeEnum myServerValidationMode = DEFAULT_SERVER_VALIDATION_MODE;
private int mySocketTimeout = DEFAULT_SOCKET_TIMEOUT; private int mySocketTimeout = DEFAULT_SOCKET_TIMEOUT;
private Set<String> myValidatedServerBaseUrls = Collections.synchronizedSet(new HashSet<String>()); private Set<String> myValidatedServerBaseUrls = Collections.synchronizedSet(new HashSet<String>());
private int myPoolMaxTotal = DEFAULT_POOL_MAX;
private int myPoolMaxPerRoute = DEFAULT_POOL_MAX_PER_ROUTE;
/** /**
* Constructor * Constructor
@ -100,6 +102,8 @@ public class RestfulClientFactory implements IRestfulClientFactory {
if (myHttpClient == null) { if (myHttpClient == null) {
PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS); PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(5000, TimeUnit.MILLISECONDS);
connectionManager.setMaxTotal(myPoolMaxTotal);
connectionManager.setDefaultMaxPerRoute(myPoolMaxPerRoute);
//@formatter:off //@formatter:off
RequestConfig defaultRequestConfig = RequestConfig.custom() RequestConfig defaultRequestConfig = RequestConfig.custom()
@ -149,6 +153,16 @@ public class RestfulClientFactory implements IRestfulClientFactory {
return mySocketTimeout; return mySocketTimeout;
} }
@Override
public int getPoolMaxTotal() {
return myPoolMaxTotal;
}
@Override
public int getPoolMaxPerRoute() {
return myPoolMaxPerRoute;
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
private <T extends IRestfulClient> T instantiateProxy(Class<T> theClientType, InvocationHandler theInvocationHandler) { private <T extends IRestfulClient> T instantiateProxy(Class<T> theClientType, InvocationHandler theInvocationHandler) {
T proxy = (T) Proxy.newProxyInstance(theClientType.getClassLoader(), new Class[] { theClientType }, theInvocationHandler); T proxy = (T) Proxy.newProxyInstance(theClientType.getClassLoader(), new Class[] { theClientType }, theInvocationHandler);
@ -276,6 +290,18 @@ public class RestfulClientFactory implements IRestfulClientFactory {
myHttpClient = null; myHttpClient = null;
} }
@Override
public synchronized void setPoolMaxTotal(int thePoolMaxTotal) {
myPoolMaxTotal = thePoolMaxTotal;
myHttpClient = null;
}
@Override
public synchronized void setPoolMaxPerRoute(int thePoolMaxPerRoute) {
myPoolMaxPerRoute = thePoolMaxPerRoute;
myHttpClient = null;
}
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
void validateServerBase(String theServerBase, HttpClient theHttpClient, BaseClient theClient) { void validateServerBase(String theServerBase, HttpClient theHttpClient, BaseClient theClient) {