org.apache.http.impl.conn
Class SingleClientConnManager

java.lang.Object
  extended by org.apache.http.impl.conn.SingleClientConnManager
All Implemented Interfaces:
ClientConnectionManager

@ThreadSafe
public class SingleClientConnManager
extends Object
implements ClientConnectionManager

A connection manager for a single connection. This connection manager maintains only one active connection at a time. Even though this class is thread-safe it ought to be used by one execution thread only.

SingleClientConnManager 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 allocated IllegalStateException is thrown.

Since:
4.0

Nested Class Summary
protected  class SingleClientConnManager.ConnAdapter
          The connection adapter used by this manager.
protected  class SingleClientConnManager.PoolEntry
          The pool entry for this connection manager.
 
Field Summary
protected  boolean alwaysShutDown
          Whether the connection should be shut down on release.
protected  long connectionExpiresTime
          The time the last released connection expires and shouldn't be reused.
protected  ClientConnectionOperator connOperator
          The operator for opening and updating connections.
protected  boolean isShutDown
          Indicates whether this connection manager is shut down.
protected  long lastReleaseTime
          The time of the last connection release, or -1.
protected  SingleClientConnManager.ConnAdapter managedConn
          The currently issued managed connection, if any.
static String MISUSE_MESSAGE
          The message to be logged on multiple allocation.
protected  SchemeRegistry schemeRegistry
          The schemes supported by this connection manager.
protected  SingleClientConnManager.PoolEntry uniquePoolEntry
          The one and only entry in this pool.
 
Constructor Summary
SingleClientConnManager(HttpParams params, SchemeRegistry schreg)
          Creates a new simple connection manager.
 
Method Summary
protected  void assertStillUp()
          Asserts that this manager is not shut down.
 void closeExpiredConnections()
          Closes all expired connections in the pool.
 void closeIdleConnections(long idletime, TimeUnit tunit)
          Closes idle connections in the pool.
protected  ClientConnectionOperator createConnectionOperator(SchemeRegistry schreg)
          Hook for creating the connection operator.
protected  void finalize()
           
 ManagedClientConnection getConnection(HttpRoute route, Object state)
          Obtains a connection.
 SchemeRegistry getSchemeRegistry()
          Obtains the scheme registry used by this manager.
 void releaseConnection(ManagedClientConnection conn, long validDuration, TimeUnit timeUnit)
          Releases a connection for use by others.
 ClientConnectionRequest requestConnection(HttpRoute route, Object state)
          Returns a new ClientConnectionRequest, from which a ManagedClientConnection can be obtained or the request can be aborted.
protected  void revokeConnection()
          Deprecated. no longer used
 void shutdown()
          Shuts down this connection manager and releases allocated resources.
 
Methods inherited from class java.lang.Object
clone, equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

MISUSE_MESSAGE

public static final String MISUSE_MESSAGE
The message to be logged on multiple allocation.

See Also:
Constant Field Values

schemeRegistry

protected final SchemeRegistry schemeRegistry
The schemes supported by this connection manager.


connOperator

protected final ClientConnectionOperator connOperator
The operator for opening and updating connections.


alwaysShutDown

protected final boolean alwaysShutDown
Whether the connection should be shut down on release.


uniquePoolEntry

@GuardedBy(value="this")
protected SingleClientConnManager.PoolEntry uniquePoolEntry
The one and only entry in this pool.


managedConn

@GuardedBy(value="this")
protected SingleClientConnManager.ConnAdapter managedConn
The currently issued managed connection, if any.


lastReleaseTime

@GuardedBy(value="this")
protected long lastReleaseTime
The time of the last connection release, or -1.


connectionExpiresTime

@GuardedBy(value="this")
protected long connectionExpiresTime
The time the last released connection expires and shouldn't be reused.


isShutDown

protected volatile boolean isShutDown
Indicates whether this connection manager is shut down.

Constructor Detail

SingleClientConnManager

public SingleClientConnManager(HttpParams params,
                               SchemeRegistry schreg)
Creates a new simple connection manager.

Parameters:
params - the parameters for this manager
schreg - the scheme registry, or null for the default registry
Method Detail

finalize

protected void finalize()
                 throws Throwable
Overrides:
finalize in class Object
Throws:
Throwable

getSchemeRegistry

public SchemeRegistry getSchemeRegistry()
Description copied from interface: ClientConnectionManager
Obtains the scheme registry used by this manager.

Specified by:
getSchemeRegistry in interface ClientConnectionManager
Returns:
the scheme registry, never null

createConnectionOperator

protected ClientConnectionOperator createConnectionOperator(SchemeRegistry schreg)
Hook for creating the connection operator. It is called by the constructor. Derived classes can override this method to change the instantiation of the operator. The default implementation here instantiates DefaultClientConnectionOperator.

Parameters:
schreg - the scheme registry to use, or null
Returns:
the connection operator to use

assertStillUp

protected final void assertStillUp()
                            throws IllegalStateException
Asserts that this manager is not shut down.

Throws:
IllegalStateException - if this manager is shut down

requestConnection

public final ClientConnectionRequest requestConnection(HttpRoute route,
                                                       Object state)
Description copied from interface: ClientConnectionManager
Returns a new ClientConnectionRequest, from which a ManagedClientConnection can be obtained or the request can be aborted.

Specified by:
requestConnection in interface ClientConnectionManager

getConnection

public ManagedClientConnection getConnection(HttpRoute route,
                                             Object state)
Obtains a connection.

Parameters:
route - where the connection should point to
Returns:
a connection that can be used to communicate along the given route

releaseConnection

public void releaseConnection(ManagedClientConnection conn,
                              long validDuration,
                              TimeUnit timeUnit)
Description copied from interface: ClientConnectionManager
Releases a connection for use by others. You may optionally specify how long the connection is valid to be reused. Values <= 0 are considered to be valid forever. If the connection is not marked as reusable, the connection will not be reused regardless of the valid duration. If the connection has been released before, the call will be ignored.

Specified by:
releaseConnection in interface ClientConnectionManager
Parameters:
conn - the connection to release
validDuration - the duration of time this connection is valid for reuse
timeUnit - the unit of time validDuration is measured in
See Also:
ClientConnectionManager.closeExpiredConnections()

closeExpiredConnections

public void closeExpiredConnections()
Description copied from interface: ClientConnectionManager
Closes all expired connections in the pool. Open connections in the pool that have not been used for the timespan defined when the connection was released will be closed. Currently allocated connections are not subject to this method. Times will be checked with milliseconds precision.

Specified by:
closeExpiredConnections in interface ClientConnectionManager

closeIdleConnections

public void closeIdleConnections(long idletime,
                                 TimeUnit tunit)
Description copied from interface: ClientConnectionManager
Closes idle connections in the pool. Open connections in the pool that have not been used for the timespan given by the argument will be closed. Currently allocated connections are not subject to this method. Times will be checked with milliseconds precision All expired connections will also be closed.

Specified by:
closeIdleConnections in interface ClientConnectionManager
Parameters:
idletime - the idle time of connections to be closed
tunit - the unit for the idletime
See Also:
ClientConnectionManager.closeExpiredConnections()

shutdown

public void shutdown()
Description copied from interface: ClientConnectionManager
Shuts down this connection manager and releases allocated resources. This includes closing all connections, whether they are currently used or not.

Specified by:
shutdown in interface ClientConnectionManager

revokeConnection

@Deprecated
protected void revokeConnection()
Deprecated. no longer used



Copyright © 1999-2010 Apache Software Foundation. All Rights Reserved.