Class AbstractConnectionPool

All Implemented Interfaces:
ConnectionPool, Container, Destroyable, Dumpable, Dumpable.DumpableContainer, LifeCycle, Sweeper.Sweepable
Direct Known Subclasses:
DuplexConnectionPool, MultiplexConnectionPool

@ManagedObject public abstract class AbstractConnectionPool extends ContainerLifeCycle implements ConnectionPool, Dumpable, Sweeper.Sweepable
  • Constructor Details

  • Method Details

    • doStart

      protected void doStart() throws Exception
      Description copied from class: ContainerLifeCycle
      Starts the managed lifecycle beans in the order they were added.
      Overrides:
      doStart in class ContainerLifeCycle
      Throws:
      AbstractLifeCycle.StopException - If thrown, the lifecycle will immediately be stopped.
      Exception - If there was a problem starting. Will cause a transition to FAILED state
    • doStop

      protected void doStop() throws Exception
      Description copied from class: ContainerLifeCycle
      Stops the managed lifecycle beans in the reverse order they were added.
      Overrides:
      doStop in class ContainerLifeCycle
      Throws:
      Exception - If there was a problem stopping. Will cause a transition to FAILED state
    • preCreateConnections

      public CompletableFuture<Void> preCreateConnections(int connectionCount)
      Description copied from interface: ConnectionPool
      Optionally pre-create up to connectionCount connections so they are immediately ready for use.
      Specified by:
      preCreateConnections in interface ConnectionPool
      Parameters:
      connectionCount - the number of connections to pre-start.
    • getMaxDuration

      @ManagedAttribute("The maximum duration in milliseconds a connection can be used for before it gets closed") public long getMaxDuration()

      Returns the max usage duration in milliseconds of a pooled connection.

      Values 0 and negative mean that there is no limit.

      This property only guarantees that a connection cannot be acquired after the configured duration elapses, so that is only enforced when acquire(boolean) is called.

      If a pool stays completely idle for a duration longer than the value returned by this method, the max duration will not be enforced. It's up to the idle timeout mechanism (see HttpClient.getIdleTimeout()) to handle closing idle connections.

      Returns:
      the max usage duration, in milliseconds, of a pooled connection
    • setMaxDuration

      public void setMaxDuration(long maxDurationInMs)
    • getInitialMaxMultiplex

      protected int getInitialMaxMultiplex()
    • setInitialMaxMultiplex

      protected void setInitialMaxMultiplex(int initialMaxMultiplex)
    • getMaxUsage

      @ManagedAttribute("The maximum amount of times a connection is used before it gets closed") public int getMaxUsage()

      Returns the max number of times a pooled connection can be used.

      Values 0 and negative mean that there is no limit.

      Returns:
      the max number of times a pooled connection can be used
    • setMaxUsage

      public void setMaxUsage(int maxUsage)
    • getActiveConnectionCount

      @ManagedAttribute(value="The number of active connections", readonly=true) public int getActiveConnectionCount()
    • getIdleConnectionCount

      @ManagedAttribute(value="The number of idle connections", readonly=true) public int getIdleConnectionCount()
    • getMaxConnectionCount

      @ManagedAttribute(value="The max number of connections", readonly=true) public int getMaxConnectionCount()
    • getConnectionCount

      @ManagedAttribute(value="The number of connections", readonly=true) public int getConnectionCount()
    • getPendingConnectionCount

      @ManagedAttribute(value="The number of pending connections", readonly=true) public int getPendingConnectionCount()
    • isEmpty

      public boolean isEmpty()
      Specified by:
      isEmpty in interface ConnectionPool
      Returns:
      whether this ConnectionPool has no open connections
    • isMaximizeConnections

      @ManagedAttribute("Whether the pool tries to maximize the number of connections used") public boolean isMaximizeConnections()
    • setMaximizeConnections

      public void setMaximizeConnections(boolean maximizeConnections)

      Sets whether the number of connections should be maximized.

      Parameters:
      maximizeConnections - whether the number of connections should be maximized
    • acquire

      public Connection acquire(boolean create)

      Returns an idle connection, if available; if an idle connection is not available, and the given create parameter is true or isMaximizeConnections() is true, then attempts to open a new connection, if possible within the configuration of this connection pool (for example, if it does not exceed the max connection count); otherwise it attempts to open a new connection, if the number of queued requests is greater than the number of pending connections; if no connection is available even after the attempts to open, return null.

      The create parameter is just a hint: the connection may be created even if false, or may not be created even if true.

      Specified by:
      acquire in interface ConnectionPool
      Parameters:
      create - a hint to attempt to open a new connection if no idle connections are available
      Returns:
      an idle connection or null if no idle connections are available
      See Also:
    • tryCreate

      protected void tryCreate(boolean create)

      Tries to create a new connection.

      Whether a new connection is created is determined by the create parameter and a count of demand and supply, where the demand is derived from the number of queued requests, and the supply is the number of pending connections time the getInitialMaxMultiplex() factor: if the demand is less than the supply, the connection will not be created.

      Since the number of queued requests used to derive the demand may be a stale value, it is possible that few more connections than strictly necessary may be created, but enough to satisfy the demand.

      Parameters:
      create - a hint to request to create a connection
    • accept

      public boolean accept(Connection connection)
      Description copied from interface: ConnectionPool

      Accepts the given connection to be managed by this ConnectionPool.

      Specified by:
      accept in interface ConnectionPool
      Parameters:
      connection - the connection to accept
      Returns:
      whether the connection has been accepted
    • proceed

      protected void proceed()
    • activate

      protected Connection activate()
    • isActive

      public boolean isActive(Connection connection)
      Specified by:
      isActive in interface ConnectionPool
      Parameters:
      connection - the connection to test
      Returns:
      whether the given connection is currently in use
    • release

      public boolean release(Connection connection)
      Description copied from interface: ConnectionPool

      Returns the given connection, previously obtained via ConnectionPool.acquire(boolean), back to this ConnectionPool.

      Specified by:
      release in interface ConnectionPool
      Parameters:
      connection - the connection to release
      Returns:
      true if the connection has been released, false if the connection should be closed
    • deactivate

      protected boolean deactivate(Connection connection)
    • remove

      public boolean remove(Connection connection)
      Description copied from interface: ConnectionPool

      Removes the given connection from this ConnectionPool.

      Specified by:
      remove in interface ConnectionPool
      Parameters:
      connection - the connection to remove
      Returns:
      true if the connection was removed from this ConnectionPool
    • onCreated

      protected void onCreated(Connection connection)

      Callback method invoked when a new Connection has been created.

      Parameters:
      connection - the Connection that has been created
      See Also:
    • idle

      @Deprecated(since="12.0.8", forRemoval=true) protected boolean idle(Connection connection, boolean close)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Racy API. Do not use. There is no replacement.
      Parameters:
      connection - the Connection that become idle
      close - whether this pool is closing
      Returns:
      true to indicate that the connection is idle, false otherwise
    • acquired

      @Deprecated(since="12.0.8", forRemoval=true) protected void acquired(Connection connection)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Racy API. Do not use. There is no replacement.
      Parameters:
      connection - the Connection that was acquired
    • released

      @Deprecated(since="12.0.8", forRemoval=true) protected void released(Connection connection)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Racy API. Do not use. There is no replacement.
      Parameters:
      connection - the Connection that was released
    • removed

      @Deprecated(since="12.0.8", forRemoval=true) protected void removed(Connection connection)
      Deprecated, for removal: This API element is subject to removal in a future version.
      Parameters:
      connection - the Connection that was removed
    • onRemoved

      protected void onRemoved(Connection connection)

      Callback method invoked when a Connection has been removed from this pool.

      Parameters:
      connection - the Connection that was removed
      See Also:
    • dump

      public void dump(Appendable out, String indent) throws IOException
      Description copied from interface: Dumpable
      Dump this object (and children) into an Appendable using the provided indent after any new lines. The indent should not be applied to the first object dumped.
      Specified by:
      dump in interface Dumpable
      Overrides:
      dump in class ContainerLifeCycle
      Parameters:
      out - The appendable to dump to
      indent - The indent to apply after any new lines.
      Throws:
      IOException - if unable to write to Appendable
    • sweep

      public boolean sweep()
      Specified by:
      sweep in interface Sweeper.Sweepable
      Returns:
      whether this resource should be swept
    • toString

      public String toString()
      Overrides:
      toString in class AbstractLifeCycle