Class BasicHttpClientConnectionManager
- java.lang.Object
-
- org.apache.hc.client5.http.impl.io.BasicHttpClientConnectionManager
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,HttpClientConnectionManager
,org.apache.hc.core5.io.ModalCloseable
@Contract(threading=SAFE) public class BasicHttpClientConnectionManager extends java.lang.Object implements HttpClientConnectionManager
A connection manager for a single connection. This connection manager maintains only one active connection. Even though this class is fully thread-safe it ought to be used by one execution thread only, as only one thread a time can lease the connection at a time.This connection manager will make an effort to reuse the connection for subsequent requests with the same
route
. It will, however, close the existing connection and open it for the given route, if the route of the persistent connection does not match that of the connection request. If the connection has been already been allocatedIllegalStateException
is thrown.This connection manager implementation should be used inside an EJB container instead of
PoolingHttpClientConnectionManager
.- Since:
- 4.3
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description (package private) class
BasicHttpClientConnectionManager.InternalConnectionEndpoint
-
Field Summary
Fields Modifier and Type Field Description private java.util.concurrent.atomic.AtomicBoolean
closed
private ManagedHttpClientConnection
conn
private ConnectionConfig
connectionConfig
private HttpClientConnectionOperator
connectionOperator
private org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection>
connFactory
private static java.util.concurrent.atomic.AtomicLong
COUNT
private long
created
private long
expiry
private java.lang.String
id
private boolean
leased
private static org.slf4j.Logger
LOG
private HttpRoute
route
private org.apache.hc.core5.http.io.SocketConfig
socketConfig
private java.lang.Object
state
private TlsConfig
tlsConfig
private long
updated
-
Constructor Summary
Constructors Constructor Description BasicHttpClientConnectionManager()
BasicHttpClientConnectionManager(HttpClientConnectionOperator httpClientConnectionOperator, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
BasicHttpClientConnectionManager(org.apache.hc.core5.http.config.Lookup<ConnectionSocketFactory> socketFactoryRegistry)
BasicHttpClientConnectionManager(org.apache.hc.core5.http.config.Lookup<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
BasicHttpClientConnectionManager(org.apache.hc.core5.http.config.Lookup<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory, SchemePortResolver schemePortResolver, DnsResolver dnsResolver)
-
Method Summary
All Methods Static Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description private BasicHttpClientConnectionManager.InternalConnectionEndpoint
cast(ConnectionEndpoint endpoint)
private void
checkExpiry()
void
close()
void
close(org.apache.hc.core5.io.CloseMode closeMode)
private void
closeConnection(org.apache.hc.core5.io.CloseMode closeMode)
void
closeExpired()
void
closeIdle(org.apache.hc.core5.util.TimeValue idleTime)
void
connect(ConnectionEndpoint endpoint, org.apache.hc.core5.util.TimeValue timeout, org.apache.hc.core5.http.protocol.HttpContext context)
Connects the endpoint to the initial hop (connection target in case of a direct route or to the first proxy hop in case of a route via a proxy or multiple proxies).(package private) ManagedHttpClientConnection
getConnection(HttpRoute route, java.lang.Object state)
ConnectionConfig
getConnectionConfig()
private static org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory>
getDefaultRegistry()
(package private) HttpRoute
getRoute()
org.apache.hc.core5.http.io.SocketConfig
getSocketConfig()
(package private) java.lang.Object
getState()
TlsConfig
getTlsConfig()
org.apache.hc.core5.util.TimeValue
getValidateAfterInactivity()
Deprecated.(package private) boolean
isClosed()
Method that can be called to determine whether the connection manager has been shut down and is closed or not.LeaseRequest
lease(java.lang.String id, HttpRoute route, java.lang.Object state)
LeaseRequest
lease(java.lang.String id, HttpRoute route, org.apache.hc.core5.util.Timeout requestTimeout, java.lang.Object state)
Returns aLeaseRequest
object which can be used to obtain aConnectionEndpoint
to cancel the request by callingCancellable.cancel()
.void
release(ConnectionEndpoint endpoint, java.lang.Object state, org.apache.hc.core5.util.TimeValue keepAlive)
Releases the endpoint back to the manager making it potentially re-usable by other consumers.void
setConnectionConfig(ConnectionConfig connectionConfig)
void
setSocketConfig(org.apache.hc.core5.http.io.SocketConfig socketConfig)
void
setTlsConfig(TlsConfig tlsConfig)
void
setValidateAfterInactivity(org.apache.hc.core5.util.TimeValue validateAfterInactivity)
Deprecated.void
upgrade(ConnectionEndpoint endpoint, org.apache.hc.core5.http.protocol.HttpContext context)
Upgrades transport security of the given endpoint by using the TLS security protocol.private void
validate()
-
-
-
Field Detail
-
LOG
private static final org.slf4j.Logger LOG
-
COUNT
private static final java.util.concurrent.atomic.AtomicLong COUNT
-
connectionOperator
private final HttpClientConnectionOperator connectionOperator
-
connFactory
private final org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory
-
id
private final java.lang.String id
-
conn
private ManagedHttpClientConnection conn
-
route
private HttpRoute route
-
state
private java.lang.Object state
-
created
private long created
-
updated
private long updated
-
expiry
private long expiry
-
leased
private boolean leased
-
socketConfig
private org.apache.hc.core5.http.io.SocketConfig socketConfig
-
connectionConfig
private ConnectionConfig connectionConfig
-
tlsConfig
private TlsConfig tlsConfig
-
closed
private final java.util.concurrent.atomic.AtomicBoolean closed
-
-
Constructor Detail
-
BasicHttpClientConnectionManager
public BasicHttpClientConnectionManager(org.apache.hc.core5.http.config.Lookup<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory, SchemePortResolver schemePortResolver, DnsResolver dnsResolver)
-
BasicHttpClientConnectionManager
public BasicHttpClientConnectionManager(HttpClientConnectionOperator httpClientConnectionOperator, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
- Since:
- 4.4
-
BasicHttpClientConnectionManager
public BasicHttpClientConnectionManager(org.apache.hc.core5.http.config.Lookup<ConnectionSocketFactory> socketFactoryRegistry, org.apache.hc.core5.http.io.HttpConnectionFactory<ManagedHttpClientConnection> connFactory)
-
BasicHttpClientConnectionManager
public BasicHttpClientConnectionManager(org.apache.hc.core5.http.config.Lookup<ConnectionSocketFactory> socketFactoryRegistry)
-
BasicHttpClientConnectionManager
public BasicHttpClientConnectionManager()
-
-
Method Detail
-
getDefaultRegistry
private static org.apache.hc.core5.http.config.Registry<ConnectionSocketFactory> getDefaultRegistry()
-
close
public void close()
- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
-
close
public void close(org.apache.hc.core5.io.CloseMode closeMode)
- Specified by:
close
in interfaceorg.apache.hc.core5.io.ModalCloseable
-
getRoute
HttpRoute getRoute()
-
getState
java.lang.Object getState()
-
getSocketConfig
public org.apache.hc.core5.http.io.SocketConfig getSocketConfig()
-
setSocketConfig
public void setSocketConfig(org.apache.hc.core5.http.io.SocketConfig socketConfig)
-
getConnectionConfig
public ConnectionConfig getConnectionConfig()
- Since:
- 5.2
-
setConnectionConfig
public void setConnectionConfig(ConnectionConfig connectionConfig)
- Since:
- 5.2
-
getTlsConfig
public TlsConfig getTlsConfig()
- Since:
- 5.2
-
setTlsConfig
public void setTlsConfig(TlsConfig tlsConfig)
- Since:
- 5.2
-
lease
public LeaseRequest lease(java.lang.String id, HttpRoute route, java.lang.Object state)
-
lease
public LeaseRequest lease(java.lang.String id, HttpRoute route, org.apache.hc.core5.util.Timeout requestTimeout, java.lang.Object state)
Description copied from interface:HttpClientConnectionManager
Returns aLeaseRequest
object which can be used to obtain aConnectionEndpoint
to cancel the request by callingCancellable.cancel()
.Please note that newly allocated endpoints can be leased
disconnected
. The consumer of the endpoint is responsible for fully establishing the route to the endpoint target by callingHttpClientConnectionManager.connect(ConnectionEndpoint, TimeValue, HttpContext)
in order to connect directly to the target or to the first proxy hop, and optionally callingHttpClientConnectionManager.upgrade(ConnectionEndpoint, HttpContext)
method to upgrade the underlying transport to Transport Layer Security after having executed aCONNECT
method to all intermediate proxy hops.- Specified by:
lease
in interfaceHttpClientConnectionManager
- Parameters:
id
- unique operation ID ornull
.route
- HTTP route of the requested connection.requestTimeout
- lease request timeout.state
- expected state of the connection ornull
if the connection is not expected to carry any state.
-
closeConnection
private void closeConnection(org.apache.hc.core5.io.CloseMode closeMode)
-
checkExpiry
private void checkExpiry()
-
validate
private void validate()
-
getConnection
ManagedHttpClientConnection getConnection(HttpRoute route, java.lang.Object state) throws java.io.IOException
- Throws:
java.io.IOException
-
cast
private BasicHttpClientConnectionManager.InternalConnectionEndpoint cast(ConnectionEndpoint endpoint)
-
release
public void release(ConnectionEndpoint endpoint, java.lang.Object state, org.apache.hc.core5.util.TimeValue keepAlive)
Description copied from interface:HttpClientConnectionManager
Releases the endpoint back to the manager making it potentially re-usable by other consumers. Optionally, the maximum period of how long the manager should keep the connection alive can be defined usingvalidDuration
andtimeUnit
parameters.- Specified by:
release
in interfaceHttpClientConnectionManager
- Parameters:
endpoint
- the managed endpoint.state
- the new connection state ofnull
if state-less.keepAlive
- the duration of time this connection is valid for reuse.
-
connect
public void connect(ConnectionEndpoint endpoint, org.apache.hc.core5.util.TimeValue timeout, org.apache.hc.core5.http.protocol.HttpContext context) throws java.io.IOException
Description copied from interface:HttpClientConnectionManager
Connects the endpoint to the initial hop (connection target in case of a direct route or to the first proxy hop in case of a route via a proxy or multiple proxies).- Specified by:
connect
in interfaceHttpClientConnectionManager
- Parameters:
endpoint
- the managed endpoint.timeout
- connect timeout.context
- the actual HTTP context.- Throws:
java.io.IOException
-
upgrade
public void upgrade(ConnectionEndpoint endpoint, org.apache.hc.core5.http.protocol.HttpContext context) throws java.io.IOException
Description copied from interface:HttpClientConnectionManager
Upgrades transport security of the given endpoint by using the TLS security protocol.- Specified by:
upgrade
in interfaceHttpClientConnectionManager
- Parameters:
endpoint
- the managed endpoint.context
- the actual HTTP context.- Throws:
java.io.IOException
-
closeExpired
public void closeExpired()
-
closeIdle
public void closeIdle(org.apache.hc.core5.util.TimeValue idleTime)
-
getValidateAfterInactivity
@Deprecated public org.apache.hc.core5.util.TimeValue getValidateAfterInactivity()
Deprecated.- Since:
- 5.1
- See Also:
setValidateAfterInactivity(TimeValue)
-
setValidateAfterInactivity
@Deprecated public void setValidateAfterInactivity(org.apache.hc.core5.util.TimeValue validateAfterInactivity)
Deprecated.Defines period of inactivity after which persistent connections must be re-validated prior to beinglease(String, HttpRoute, Object)
leased} to the consumer. Negative values passed to this method disable connection validation. This check helps detect connections that have become stale (half-closed) while kept inactive in the pool.- Since:
- 5.1
-
isClosed
boolean isClosed()
Method that can be called to determine whether the connection manager has been shut down and is closed or not.- Returns:
true
if the connection manager has been shut down and is closed, otherwise returnfalse
.
-
-