Package org.ldaptive.pool
Class AbstractConnectionPool
- java.lang.Object
-
- org.ldaptive.pool.AbstractConnectionPool
-
- All Implemented Interfaces:
ConnectionPool
- Direct Known Subclasses:
BlockingConnectionPool
public abstract class AbstractConnectionPool extends java.lang.Object implements ConnectionPool
Contains the base implementation for pooling connections. The main design objective for the supplied pooling implementations is to provide a pool that does not block on connection creation or destruction. This is what accounts for the multiple locks available on this class. The pool is backed by two queues, one for available connections and one for active connections. Connections that are available viagetConnection()exist in the available queue. Connections that are actively in use exist in the active queue. This implementation uses FIFO operations for each queue.- Author:
- Middleware Services
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description protected classAbstractConnectionPool.DefaultPooledConnectionProxyContains a connection that is participating in this pool.
-
Field Summary
Fields Modifier and Type Field Description protected Queue<PooledConnectionProxy>activeList of connections in use.protected Queue<PooledConnectionProxy>availableList of available connections in the pool.protected java.util.concurrent.locks.ReentrantLockcheckOutLockLock for check outs.static intDEFAULT_MAX_POOL_SIZEDefault max pool size, value is 10.static intDEFAULT_MIN_POOL_SIZEDefault min pool size, value is 3.protected org.slf4j.LoggerloggerLogger for this class.protected java.util.concurrent.locks.ReentrantLockpoolLockLock for the entire pool.protected java.util.concurrent.locks.ConditionpoolNotEmptyCondition for notifying threads that a connection was returned.
-
Constructor Summary
Constructors Constructor Description AbstractConnectionPool()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected voidactivateAndValidateConnection(PooledConnectionProxy pc)Attempts to activate and validate a connection.intactiveCount()Returns the number of connections in use.intavailableCount()Returns the number of connections available for use.voidclose()Empty this pool, freeing any resources.protected PooledConnectionProxycreateActiveConnection(boolean throwOnFailure)Create a new connection and place it in the active pool.protected PooledConnectionProxycreateAvailableConnection(boolean throwOnFailure)Create a new connection and place it in the available pool.protected PooledConnectionProxycreateConnection(boolean throwOnFailure)Create a new connection.protected ConnectioncreateConnectionProxy(PooledConnectionProxy pc)Creates a connection proxy using the supplied pool connection.ConnectionActivatorgetActivator()Returns the activator for this pool.abstract ConnectiongetConnection()Returns a connection from the pool.booleangetConnectOnCreate()Returns whether connections will attempt to connect after creation.DefaultConnectionFactorygetDefaultConnectionFactory()Returns the connection factory for this pool.booleangetFailFastInitialize()Returns whetherinitialize()should throw if pooling configuration requirements are not met.intgetMaxPoolSize()Returns the max pool size.intgetMinPoolSize()Returns the min pool size.java.lang.StringgetName()Returns the name for this pool.ConnectionPassivatorgetPassivator()Returns the passivator for this pool.java.util.Set<PooledConnectionStatistics>getPooledConnectionStatistics()Returns the statistics for each connection in the pool.PruneStrategygetPruneStrategy()Returns the prune strategy for this pool.QueueTypegetQueueType()Returns the type of queue used for this connection pool.ConnectionValidatorgetValidator()Returns the connection validator for this pool.protected voidgrow(int size)Attempts to grow the pool to the supplied size.protected voidgrow(int size, boolean throwOnFailure)Attempts to grow the pool to the supplied size.voidinitialize()Initialize this pool for use.booleanisInitialized()Returns whether this pool has been initialized.booleanisValidateOnCheckIn()Returns the validate on check in flag.booleanisValidateOnCheckOut()Returns the validate on check out flag.booleanisValidatePeriodically()Returns the validate periodically flag.protected booleanpassivateAndValidateConnection(PooledConnectionProxy pc)Attempts to passivate and validate a connection.voidprune()Attempts to reduce the size of the pool back to it's configured minimum.abstract voidputConnection(Connection c)Returns a connection to the pool.protected voidremoveActiveConnection(PooledConnectionProxy pc)Remove a connection from the active pool.protected voidremoveAvailableAndActiveConnection(PooledConnectionProxy pc)Remove a connection from both the available and active pools.protected voidremoveAvailableConnection(PooledConnectionProxy pc)Remove a connection from the available pool.protected PooledConnectionProxyretrieveConnectionProxy(Connection proxy)Retrieves the invocation handler from the supplied connection proxy.voidsetActivator(ConnectionActivator a)Sets the activator for this pool.voidsetConnectOnCreate(boolean b)Sets whether newly created connections will attempt to connect.voidsetDefaultConnectionFactory(DefaultConnectionFactory cf)Sets the connection factory for this pool.voidsetFailFastInitialize(boolean b)Sets whetherinitialize()should throw if pooling configuration requirements are not met.voidsetMaxPoolSize(int size)Sets the max pool size.voidsetMinPoolSize(int size)Sets the min pool size.voidsetName(java.lang.String s)Sets the name for this pool.voidsetPassivator(ConnectionPassivator p)Sets the passivator for this pool.voidsetPruneStrategy(PruneStrategy ps)Sets the prune strategy for this pool.voidsetQueueType(QueueType type)Sets the type of queue used for this connection pool.voidsetValidateOnCheckIn(boolean b)Sets the validate on check in flag.voidsetValidateOnCheckOut(boolean b)Sets the validate on check out flag.voidsetValidatePeriodically(boolean b)Sets the validate periodically flag.voidsetValidator(ConnectionValidator cv)Sets the connection validator for this pool.protected voidthrowIfNotInitialized()Used to determine whetherinitialize()has been invoked for this pool.java.lang.StringtoString()voidvalidate()Attempts to validate all connections in the pool.protected booleanvalidateAndPassivateConnection(PooledConnectionProxy pc)Deprecated.
-
-
-
Field Detail
-
DEFAULT_MIN_POOL_SIZE
public static final int DEFAULT_MIN_POOL_SIZE
Default min pool size, value is 3.- See Also:
- Constant Field Values
-
DEFAULT_MAX_POOL_SIZE
public static final int DEFAULT_MAX_POOL_SIZE
Default max pool size, value is 10.- See Also:
- Constant Field Values
-
logger
protected final org.slf4j.Logger logger
Logger for this class.
-
poolLock
protected final java.util.concurrent.locks.ReentrantLock poolLock
Lock for the entire pool.
-
poolNotEmpty
protected final java.util.concurrent.locks.Condition poolNotEmpty
Condition for notifying threads that a connection was returned.
-
checkOutLock
protected final java.util.concurrent.locks.ReentrantLock checkOutLock
Lock for check outs.
-
available
protected Queue<PooledConnectionProxy> available
List of available connections in the pool.
-
active
protected Queue<PooledConnectionProxy> active
List of connections in use.
-
-
Method Detail
-
getName
public java.lang.String getName()
Returns the name for this pool.- Returns:
- pool name
-
setName
public void setName(java.lang.String s)
Sets the name for this pool.- Parameters:
s- pool name
-
getMinPoolSize
public int getMinPoolSize()
Returns the min pool size. Default value isDEFAULT_MIN_POOL_SIZE. This value represents the size of the pool after a prune has occurred.- Returns:
- min pool size
-
setMinPoolSize
public void setMinPoolSize(int size)
Sets the min pool size.- Parameters:
size- min pool size, greater than or equal to zero
-
getMaxPoolSize
public int getMaxPoolSize()
Returns the max pool size. Default value isDEFAULT_MAX_POOL_SIZE. This value may or may not be strictly enforced depending on the pooling implementation.- Returns:
- max pool size
-
setMaxPoolSize
public void setMaxPoolSize(int size)
Sets the max pool size.- Parameters:
size- max pool size, greater than or equal to zero
-
isValidateOnCheckIn
public boolean isValidateOnCheckIn()
Returns the validate on check in flag.- Returns:
- validate on check in
-
setValidateOnCheckIn
public void setValidateOnCheckIn(boolean b)
Sets the validate on check in flag.- Parameters:
b- validate on check in
-
isValidateOnCheckOut
public boolean isValidateOnCheckOut()
Returns the validate on check out flag.- Returns:
- validate on check in
-
setValidateOnCheckOut
public void setValidateOnCheckOut(boolean b)
Sets the validate on check out flag.- Parameters:
b- validate on check out
-
isValidatePeriodically
public boolean isValidatePeriodically()
Returns the validate periodically flag.- Returns:
- validate periodically
-
setValidatePeriodically
public void setValidatePeriodically(boolean b)
Sets the validate periodically flag.- Parameters:
b- validate periodically
-
getActivator
public ConnectionActivator getActivator()
Returns the activator for this pool.- Specified by:
getActivatorin interfaceConnectionPool- Returns:
- activator
-
setActivator
public void setActivator(ConnectionActivator a)
Sets the activator for this pool.- Specified by:
setActivatorin interfaceConnectionPool- Parameters:
a- activator
-
getPassivator
public ConnectionPassivator getPassivator()
Returns the passivator for this pool.- Specified by:
getPassivatorin interfaceConnectionPool- Returns:
- passivator
-
setPassivator
public void setPassivator(ConnectionPassivator p)
Sets the passivator for this pool.- Specified by:
setPassivatorin interfaceConnectionPool- Parameters:
p- passivator
-
getValidator
public ConnectionValidator getValidator()
Returns the connection validator for this pool.- Returns:
- connection validator
-
setValidator
public void setValidator(ConnectionValidator cv)
Sets the connection validator for this pool.- Parameters:
cv- connection validator
-
getPruneStrategy
public PruneStrategy getPruneStrategy()
Returns the prune strategy for this pool.- Returns:
- prune strategy
-
setPruneStrategy
public void setPruneStrategy(PruneStrategy ps)
Sets the prune strategy for this pool.- Parameters:
ps- prune strategy
-
getDefaultConnectionFactory
public DefaultConnectionFactory getDefaultConnectionFactory()
Returns the connection factory for this pool.- Returns:
- connection factory
-
setDefaultConnectionFactory
public void setDefaultConnectionFactory(DefaultConnectionFactory cf)
Sets the connection factory for this pool.- Parameters:
cf- connection factory
-
getConnectOnCreate
public boolean getConnectOnCreate()
Returns whether connections will attempt to connect after creation. Default is true.- Returns:
- whether connections will attempt to connect after creation
-
setConnectOnCreate
public void setConnectOnCreate(boolean b)
Sets whether newly created connections will attempt to connect. Default is true.- Parameters:
b- connect on create
-
getQueueType
public QueueType getQueueType()
Returns the type of queue used for this connection pool.- Returns:
- queue type
-
setQueueType
public void setQueueType(QueueType type)
Sets the type of queue used for this connection pool. This property may have an impact on the success of the prune strategy.- Parameters:
type- of queue
-
getFailFastInitialize
public boolean getFailFastInitialize()
Returns whetherinitialize()should throw if pooling configuration requirements are not met.- Returns:
- whether
initialize()should throw
-
setFailFastInitialize
public void setFailFastInitialize(boolean b)
Sets whetherinitialize()should throw if pooling configuration requirements are not met.- Parameters:
b- whetherinitialize()should throw
-
isInitialized
public boolean isInitialized()
Returns whether this pool has been initialized.- Returns:
- whether this pool has been initialized
-
throwIfNotInitialized
protected void throwIfNotInitialized()
Used to determine whetherinitialize()has been invoked for this pool.- Throws:
java.lang.IllegalStateException- if this pool has not been initialized
-
initialize
public void initialize()
Initialize this pool for use.- Specified by:
initializein interfaceConnectionPool- Throws:
java.lang.IllegalStateException- if this pool has already been initialized, the pooling configuration is inconsistent or the pool does not contain at least one connection and it's minimum size is greater than zero
-
grow
protected void grow(int size)
Attempts to grow the pool to the supplied size. If the pool size is greater than or equal to the supplied size, this method is a no-op.- Parameters:
size- to grow the pool to
-
grow
protected void grow(int size, boolean throwOnFailure)Attempts to grow the pool to the supplied size. If the pool size is greater than or equal to the supplied size, this method is a no-op.- Parameters:
size- to grow the pool tothrowOnFailure- whether to throw illegal state exception- Throws:
java.lang.IllegalStateException- if the pool cannot grow to the supplied size andcreateAvailableConnection(boolean)throws
-
close
public void close()
Empty this pool, freeing any resources.- Specified by:
closein interfaceConnectionPool- Throws:
java.lang.IllegalStateException- if this pool has not been initialized
-
getConnection
public abstract Connection getConnection() throws PoolException
Returns a connection from the pool.- Specified by:
getConnectionin interfaceConnectionPool- Returns:
- connection
- Throws:
PoolException- if this operation failsBlockingTimeoutException- if this pool is configured with a block time and it occursjava.lang.IllegalStateException- if this pool has not been initialized
-
putConnection
public abstract void putConnection(Connection c)
Returns a connection to the pool.- Parameters:
c- connection- Throws:
java.lang.IllegalStateException- if this pool has not been initialized
-
createConnection
protected PooledConnectionProxy createConnection(boolean throwOnFailure)
Create a new connection. IfconnectOnCreateis true, the connection will be opened.- Parameters:
throwOnFailure- whether to throw illegal state exception- Returns:
- pooled connection or null
- Throws:
java.lang.IllegalStateException- ifconnectOnCreateis true and the connection cannot be opened
-
createAvailableConnection
protected PooledConnectionProxy createAvailableConnection(boolean throwOnFailure)
Create a new connection and place it in the available pool.- Parameters:
throwOnFailure- whether to throw illegal state exception- Returns:
- connection that was placed in the available pool
- Throws:
java.lang.IllegalStateException- ifcreateConnection(boolean)throws
-
createActiveConnection
protected PooledConnectionProxy createActiveConnection(boolean throwOnFailure)
Create a new connection and place it in the active pool.- Parameters:
throwOnFailure- whether to throw illegal state exception- Returns:
- connection that was placed in the active pool
- Throws:
java.lang.IllegalStateException- ifcreateConnection(boolean)throws
-
removeAvailableConnection
protected void removeAvailableConnection(PooledConnectionProxy pc)
Remove a connection from the available pool.- Parameters:
pc- connection that is in the available pool
-
removeActiveConnection
protected void removeActiveConnection(PooledConnectionProxy pc)
Remove a connection from the active pool.- Parameters:
pc- connection that is in the active pool
-
removeAvailableAndActiveConnection
protected void removeAvailableAndActiveConnection(PooledConnectionProxy pc)
Remove a connection from both the available and active pools.- Parameters:
pc- connection that is in both the available and active pools
-
activateAndValidateConnection
protected void activateAndValidateConnection(PooledConnectionProxy pc) throws PoolException
Attempts to activate and validate a connection. Performed before a connection is returned fromgetConnection(). Validation only occurs ifvalidateOnCheckOutis true. If a connection fails either activation or validation it is removed from the pool.- Parameters:
pc- connection- Throws:
PoolException- if either activation or validation fails
-
validateAndPassivateConnection
@Deprecated protected boolean validateAndPassivateConnection(PooledConnectionProxy pc)
Deprecated.- Parameters:
pc- connection- Returns:
- whether both passivation and validation succeeded
-
passivateAndValidateConnection
protected boolean passivateAndValidateConnection(PooledConnectionProxy pc)
Attempts to passivate and validate a connection. Performed when a connection is given toputConnection(Connection)and when a new connection enters the pool. Validation only occurs ifvalidateOnCheckInis true.- Parameters:
pc- connection- Returns:
- whether both passivation and validation succeeded
-
prune
public void prune()
Attempts to reduce the size of the pool back to it's configured minimum.- Throws:
java.lang.IllegalStateException- if this pool has not been initialized
-
validate
public void validate()
Attempts to validate all connections in the pool.- Throws:
java.lang.IllegalStateException- if this pool has not been initialized
-
availableCount
public int availableCount()
Description copied from interface:ConnectionPoolReturns the number of connections available for use.- Specified by:
availableCountin interfaceConnectionPool- Returns:
- count
-
activeCount
public int activeCount()
Description copied from interface:ConnectionPoolReturns the number of connections in use.- Specified by:
activeCountin interfaceConnectionPool- Returns:
- count
-
getPooledConnectionStatistics
public java.util.Set<PooledConnectionStatistics> getPooledConnectionStatistics()
Description copied from interface:ConnectionPoolReturns the statistics for each connection in the pool.- Specified by:
getPooledConnectionStatisticsin interfaceConnectionPool- Returns:
- connection statistics
-
createConnectionProxy
protected Connection createConnectionProxy(PooledConnectionProxy pc)
Creates a connection proxy using the supplied pool connection.- Parameters:
pc- pool connection to create proxy with- Returns:
- connection proxy
-
retrieveConnectionProxy
protected PooledConnectionProxy retrieveConnectionProxy(Connection proxy)
Retrieves the invocation handler from the supplied connection proxy.- Parameters:
proxy- connection proxy- Returns:
- pooled connection proxy
-
toString
public java.lang.String toString()
- Overrides:
toStringin classjava.lang.Object
-
-