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