Package org.ldaptive.pool
Class AbstractConnectionPool
java.lang.Object
org.ldaptive.pool.AbstractConnectionPool
- All Implemented Interfaces:
ConnectionPool
- Direct Known Subclasses:
BlockingConnectionPool
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 via
getConnection()
exist in the available queue.
Connections that are actively in use exist in the active queue. This implementation uses FIFO operations for each
queue.-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionprotected class
Contains a connection that is participating in this pool. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate ConnectionActivator
For activating connections.protected Queue
<PooledConnectionProxy> List of connections in use.protected Queue
<PooledConnectionProxy> List of available connections in the pool.protected final ReentrantLock
Lock for check outs.private DefaultConnectionFactory
Connection factory to create connections with.private boolean
Whether to connect to the ldap on connection creation.static final int
Default max pool size, value is 10.static final int
Default min pool size, value is 3.private boolean
Whetherinitialize()
should throw if pooling configuration requirements are not met.private boolean
Whetherinitialize()
has been successfully invoked.protected final org.slf4j.Logger
Logger for this class.private int
Maximum pool size.private int
Minimum pool size.private String
Pool name.private ConnectionPassivator
For passivating connections.private static final AtomicInteger
ID used for pool name.private ScheduledExecutorService
Executor for scheduling pool tasks.protected final ReentrantLock
Lock for the entire pool.protected final Condition
Condition for notifying threads that a connection was returned.private PruneStrategy
For removing connections.private QueueType
Type of queue.private boolean
Whether the ldap connection should be validated when returned to the pool.private boolean
Whether the ldap connection should be validated when given from the pool.private boolean
Whether the pool should be validated periodically.private ConnectionValidator
For validating connections. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionprotected void
Attempts to activate and validate a connection.int
Returns the number of connections in use.int
Returns the number of connections available for use.void
close()
Empty this pool, freeing any resources.protected PooledConnectionProxy
createActiveConnection
(boolean throwOnFailure) Create a new connection and place it in the active pool.protected PooledConnectionProxy
createAvailableConnection
(boolean throwOnFailure) Create a new connection and place it in the available pool.protected PooledConnectionProxy
createConnection
(boolean throwOnFailure) Create a new connection.protected Connection
Creates a connection proxy using the supplied pool connection.Returns the activator for this pool.abstract Connection
Returns a connection from the pool.boolean
Returns whether connections will attempt to connect after creation.Returns the connection factory for this pool.boolean
Returns whetherinitialize()
should throw if pooling configuration requirements are not met.int
Returns the max pool size.int
Returns the min pool size.getName()
Returns the name for this pool.Returns the passivator for this pool.Returns the statistics for each connection in the pool.Returns the prune strategy for this pool.Returns the type of queue used for this connection pool.Returns the connection validator for this pool.protected void
grow
(int size) Attempts to grow the pool to the supplied size.protected void
grow
(int size, boolean throwOnFailure) Attempts to grow the pool to the supplied size.void
Initialize this pool for use.boolean
Returns whether this pool has been initialized.boolean
Returns the validate on check in flag.boolean
Returns the validate on check out flag.boolean
Returns the validate periodically flag.protected boolean
Attempts to passivate and validate a connection.void
prune()
Attempts to reduce the size of the pool back to it's configured minimum.abstract void
Returns a connection to the pool.protected void
Remove a connection from the active pool.protected void
Remove a connection from both the available and active pools.protected void
Remove a connection from the available pool.protected PooledConnectionProxy
Retrieves the invocation handler from the supplied connection proxy.void
Sets the activator for this pool.void
setConnectOnCreate
(boolean b) Sets whether newly created connections will attempt to connect.void
Sets the connection factory for this pool.void
setFailFastInitialize
(boolean b) Sets whetherinitialize()
should throw if pooling configuration requirements are not met.void
setMaxPoolSize
(int size) Sets the max pool size.void
setMinPoolSize
(int size) Sets the min pool size.void
Sets the name for this pool.void
Sets the passivator for this pool.void
Sets the prune strategy for this pool.void
setQueueType
(QueueType type) Sets the type of queue used for this connection pool.void
setValidateOnCheckIn
(boolean b) Sets the validate on check in flag.void
setValidateOnCheckOut
(boolean b) Sets the validate on check out flag.void
setValidatePeriodically
(boolean b) Sets the validate periodically flag.void
Sets the connection validator for this pool.protected void
Used to determine whetherinitialize()
has been invoked for this pool.toString()
void
validate()
Attempts to validate all connections in the pool.protected boolean
Deprecated.
-
Field Details
-
DEFAULT_MIN_POOL_SIZE
public static final int DEFAULT_MIN_POOL_SIZEDefault min pool size, value is 3.- See Also:
-
DEFAULT_MAX_POOL_SIZE
public static final int DEFAULT_MAX_POOL_SIZEDefault max pool size, value is 10.- See Also:
-
POOL_ID
ID used for pool name. -
logger
protected final org.slf4j.Logger loggerLogger for this class. -
poolLock
Lock for the entire pool. -
poolNotEmpty
Condition for notifying threads that a connection was returned. -
checkOutLock
Lock for check outs. -
available
List of available connections in the pool. -
active
List of connections in use. -
name
Pool name. -
minPoolSize
private int minPoolSizeMinimum pool size. -
maxPoolSize
private int maxPoolSizeMaximum pool size. -
validateOnCheckIn
private boolean validateOnCheckInWhether the ldap connection should be validated when returned to the pool. -
validateOnCheckOut
private boolean validateOnCheckOutWhether the ldap connection should be validated when given from the pool. -
validatePeriodically
private boolean validatePeriodicallyWhether the pool should be validated periodically. -
activator
For activating connections. -
passivator
For passivating connections. -
validator
For validating connections. -
pruneStrategy
For removing connections. -
connectionFactory
Connection factory to create connections with. -
connectOnCreate
private boolean connectOnCreateWhether to connect to the ldap on connection creation. -
queueType
Type of queue. LIFO or FIFO. -
poolExecutor
Executor for scheduling pool tasks. -
initialized
private boolean initializedWhetherinitialize()
has been successfully invoked. -
failFastInitialize
private boolean failFastInitializeWhetherinitialize()
should throw if pooling configuration requirements are not met.
-
-
Constructor Details
-
AbstractConnectionPool
public AbstractConnectionPool()
-
-
Method Details
-
getName
Returns the name for this pool.- Returns:
- pool name
-
setName
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
Returns the activator for this pool.- Specified by:
getActivator
in interfaceConnectionPool
- Returns:
- activator
-
setActivator
Sets the activator for this pool.- Specified by:
setActivator
in interfaceConnectionPool
- Parameters:
a
- activator
-
getPassivator
Returns the passivator for this pool.- Specified by:
getPassivator
in interfaceConnectionPool
- Returns:
- passivator
-
setPassivator
Sets the passivator for this pool.- Specified by:
setPassivator
in interfaceConnectionPool
- Parameters:
p
- passivator
-
getValidator
Returns the connection validator for this pool.- Returns:
- connection validator
-
setValidator
Sets the connection validator for this pool.- Parameters:
cv
- connection validator
-
getPruneStrategy
Returns the prune strategy for this pool.- Returns:
- prune strategy
-
setPruneStrategy
Sets the prune strategy for this pool.- Parameters:
ps
- prune strategy
-
getDefaultConnectionFactory
Returns the connection factory for this pool.- Returns:
- connection factory
-
setDefaultConnectionFactory
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
Returns the type of queue used for this connection pool.- Returns:
- queue type
-
setQueueType
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:
IllegalStateException
- if this pool has not been initialized
-
initialize
public void initialize()Initialize this pool for use.- Specified by:
initialize
in interfaceConnectionPool
- Throws:
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:
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:
close
in interfaceConnectionPool
- Throws:
IllegalStateException
- if this pool has not been initialized
-
getConnection
Returns a connection from the pool.- Specified by:
getConnection
in interfaceConnectionPool
- Returns:
- connection
- Throws:
PoolException
- if this operation failsBlockingTimeoutException
- if this pool is configured with a block time and it occursIllegalStateException
- if this pool has not been initialized
-
putConnection
Returns a connection to the pool.- Parameters:
c
- connection- Throws:
IllegalStateException
- if this pool has not been initialized
-
createConnection
Create a new connection. IfconnectOnCreate
is true, the connection will be opened.- Parameters:
throwOnFailure
- whether to throw illegal state exception- Returns:
- pooled connection or null
- Throws:
IllegalStateException
- ifconnectOnCreate
is true and the connection cannot be opened
-
createAvailableConnection
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:
IllegalStateException
- ifcreateConnection(boolean)
throws
-
createActiveConnection
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:
IllegalStateException
- ifcreateConnection(boolean)
throws
-
removeAvailableConnection
Remove a connection from the available pool.- Parameters:
pc
- connection that is in the available pool
-
removeActiveConnection
Remove a connection from the active pool.- Parameters:
pc
- connection that is in the active pool
-
removeAvailableAndActiveConnection
Remove a connection from both the available and active pools.- Parameters:
pc
- connection that is in both the available and active pools
-
activateAndValidateConnection
Attempts to activate and validate a connection. Performed before a connection is returned fromgetConnection()
. Validation only occurs ifvalidateOnCheckOut
is 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.- Parameters:
pc
- connection- Returns:
- whether both passivation and validation succeeded
-
passivateAndValidateConnection
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 ifvalidateOnCheckIn
is 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:
IllegalStateException
- if this pool has not been initialized
-
validate
public void validate()Attempts to validate all connections in the pool.- Throws:
IllegalStateException
- if this pool has not been initialized
-
availableCount
public int availableCount()Description copied from interface:ConnectionPool
Returns the number of connections available for use.- Specified by:
availableCount
in interfaceConnectionPool
- Returns:
- count
-
activeCount
public int activeCount()Description copied from interface:ConnectionPool
Returns the number of connections in use.- Specified by:
activeCount
in interfaceConnectionPool
- Returns:
- count
-
getPooledConnectionStatistics
Description copied from interface:ConnectionPool
Returns the statistics for each connection in the pool.- Specified by:
getPooledConnectionStatistics
in interfaceConnectionPool
- Returns:
- connection statistics
-
createConnectionProxy
Creates a connection proxy using the supplied pool connection.- Parameters:
pc
- pool connection to create proxy with- Returns:
- connection proxy
-
retrieveConnectionProxy
Retrieves the invocation handler from the supplied connection proxy.- Parameters:
proxy
- connection proxy- Returns:
- pooled connection proxy
-
toString
-
passivateAndValidateConnection(PooledConnectionProxy)
instead