Merge pull request #288 from matt-blanchette/master
Exposing parameters for HTTP client request pool max connections in RestfulClientFactory
This commit is contained in:
commit
e73f409800
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue