Package org.apache.tomcat.dbcp.dbcp2
Class PoolingConnection
java.lang.Object
org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
org.apache.tomcat.dbcp.dbcp2.DelegatingConnection<Connection>
org.apache.tomcat.dbcp.dbcp2.PoolingConnection
- All Implemented Interfaces:
AutoCloseable
,Connection
,Wrapper
,KeyedPooledObjectFactory<PStmtKey,
,DelegatingPreparedStatement> TrackedUse
public class PoolingConnection
extends DelegatingConnection<Connection>
implements KeyedPooledObjectFactory<PStmtKey,DelegatingPreparedStatement>
A
DelegatingConnection
that pools PreparedStatement
s.
The prepareStatement(org.apache.tomcat.dbcp.dbcp2.PStmtKey)
and prepareCall(org.apache.tomcat.dbcp.dbcp2.PStmtKey)
methods, rather than creating a new PreparedStatement each
time, may actually pull the statement from a pool of unused statements. The Statement.close()
method of
the returned statement doesn't actually close the statement, but rather returns it to the pool. (See
PoolablePreparedStatement
, PoolableCallableStatement
.)
- Since:
- 2.0
- See Also:
-
Nested Class Summary
-
Field Summary
Fields inherited from interface java.sql.Connection
TRANSACTION_NONE, TRANSACTION_READ_COMMITTED, TRANSACTION_READ_UNCOMMITTED, TRANSACTION_REPEATABLE_READ, TRANSACTION_SERIALIZABLE
-
Constructor Summary
-
Method Summary
Modifier and TypeMethodDescriptionvoid
activateObject
(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject) KeyedPooledObjectFactory
method for activating pooled statements.void
close()
Closes and frees allPreparedStatement
s orCallableStatement
s from the pool, and close the underlying connection.void
Notification fromPoolableConnection
that we returned to the pool.protected PStmtKey
Creates a PStmtKey for the given arguments.protected PStmtKey
Creates a PStmtKey for the given arguments.protected PStmtKey
Creates a PStmtKey for the given arguments.protected PStmtKey
Creates a PStmtKey for the given arguments.protected PStmtKey
Creates a PStmtKey for the given arguments.protected PStmtKey
createKey
(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability, PoolingConnection.StatementType statementType) Creates a PStmtKey for the given arguments.protected PStmtKey
createKey
(String sql, int resultSetType, int resultSetConcurrency, PoolingConnection.StatementType statementType) Creates a PStmtKey for the given arguments.protected PStmtKey
Creates a PStmtKey for the given arguments.protected PStmtKey
createKey
(String sql, PoolingConnection.StatementType statementType) Creates a PStmtKey for the given arguments.void
destroyObject
(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject) KeyedPooledObjectFactory
method for destroying PoolablePreparedStatements and PoolableCallableStatements.void
destroyObject
(PStmtKey key, PooledObject<DelegatingPreparedStatement> p, DestroyMode mode) Destroy an instance no longer needed by the pool, using the providedDestroyMode
.Returns the prepared statement pool we're using.makeObject
(PStmtKey key) KeyedPooledObjectFactory
method for creatingPoolablePreparedStatement
s orPoolableCallableStatement
s.protected String
normalizeSQL
(String sql) Normalizes the given SQL statement, producing a canonical form that is semantically equivalent to the original.void
passivateObject
(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject) prepareCall
(String sql) Creates or obtains aCallableStatement
from the pool.prepareCall
(String sql, int resultSetType, int resultSetConcurrency) Creates or obtains aCallableStatement
from the pool.prepareCall
(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Creates or obtains aCallableStatement
from the pool.prepareStatement
(String sql) Creates or obtains aPreparedStatement
from the pool.prepareStatement
(String sql, int autoGeneratedKeys) prepareStatement
(String sql, int[] columnIndexes) Creates or obtains aPreparedStatement
from the pool.prepareStatement
(String sql, int resultSetType, int resultSetConcurrency) Creates or obtains aPreparedStatement
from the pool.prepareStatement
(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Creates or obtains aPreparedStatement
from the pool.prepareStatement
(String sql, String[] columnNames) Creates or obtains aPreparedStatement
from the pool.void
setClearStatementPoolOnReturn
(boolean clearStatementPoolOnReturn) Sets whether the pool of statements should be cleared when the connection is returned to its pool.void
Sets the prepared statement pool.toString()
Returns a string representation of the metadata associated with the innermost delegate connection.boolean
validateObject
(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject) KeyedPooledObjectFactory
method for validating pooled statements.Methods inherited from class org.apache.tomcat.dbcp.dbcp2.DelegatingConnection
abort, activate, checkOpen, clearCachedState, clearWarnings, closeInternal, commit, createArrayOf, createBlob, createClob, createNClob, createSQLXML, createStatement, createStatement, createStatement, createStruct, getAutoCommit, getCacheState, getCatalog, getClientInfo, getClientInfo, getDefaultQueryTimeout, getDelegate, getDelegateInternal, getHoldability, getInnermostDelegate, getInnermostDelegateInternal, getMetaData, getNetworkTimeout, getSchema, getTransactionIsolation, getTypeMap, getWarnings, handleException, handleExceptionNoThrow, innermostDelegateEquals, isClosed, isClosedInternal, isReadOnly, isValid, isWrapperFor, nativeSQL, passivate, releaseSavepoint, rollback, rollback, setAutoCommit, setCacheState, setCatalog, setClientInfo, setClientInfo, setClosedInternal, setDefaultQueryTimeout, setDelegate, setHoldability, setNetworkTimeout, setReadOnly, setSavepoint, setSavepoint, setSchema, setTransactionIsolation, setTypeMap, unwrap
Methods inherited from class org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
addTrace, clearTrace, getLastUsed, getTrace, removeThisTrace, removeTrace, setLastUsed, setLastUsed
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
Methods inherited from interface java.sql.Connection
beginRequest, endRequest, setShardingKey, setShardingKey, setShardingKeyIfValid, setShardingKeyIfValid
-
Constructor Details
-
PoolingConnection
Constructor.- Parameters:
connection
- the underlyingConnection
.
-
-
Method Details
-
activateObject
public void activateObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject) throws Exception KeyedPooledObjectFactory
method for activating pooled statements.- Specified by:
activateObject
in interfaceKeyedPooledObjectFactory<PStmtKey,
DelegatingPreparedStatement> - Parameters:
key
- ignoredpooledObject
- wrapped pooled statement to be activated- Throws:
Exception
- if there is a problem activatingobj
, this exception may be swallowed by the pool.- See Also:
-
close
Closes and frees allPreparedStatement
s orCallableStatement
s from the pool, and close the underlying connection.- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceConnection
- Overrides:
close
in classDelegatingConnection<Connection>
- Throws:
SQLException
-
connectionReturnedToPool
Notification fromPoolableConnection
that we returned to the pool.- Throws:
SQLException
- whenclearStatementPoolOnReturn
is true and the statement pool could not be cleared- Since:
- 2.8.0
-
createKey
Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statement- Returns:
- the PStmtKey created for the given arguments.
-
createKey
Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statementcolumnIndexes
- An array of column indexes indicating the columns that should be returned from the inserted row or rows.- Returns:
- the PStmtKey created for the given arguments.
-
createKey
Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statementautoGeneratedKeys
- A flag indicating whether auto-generated keys should be returned; one ofStatement.RETURN_GENERATED_KEYS
orStatement.NO_GENERATED_KEYS
.- Returns:
- the PStmtKey created for the given arguments.
-
createKey
Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statementresultSetType
- result set typeresultSetConcurrency
- result set concurrency- Returns:
- the PStmtKey created for the given arguments.
-
createKey
protected PStmtKey createKey(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statementresultSetType
- result set typeresultSetConcurrency
- result set concurrencyresultSetHoldability
- result set holdability- Returns:
- the PStmtKey created for the given arguments.
-
createKey
protected PStmtKey createKey(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability, PoolingConnection.StatementType statementType) Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statementresultSetType
- result set typeresultSetConcurrency
- result set concurrencyresultSetHoldability
- result set holdabilitystatementType
- statement type- Returns:
- the PStmtKey created for the given arguments.
-
createKey
protected PStmtKey createKey(String sql, int resultSetType, int resultSetConcurrency, PoolingConnection.StatementType statementType) Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statementresultSetType
- result set typeresultSetConcurrency
- result set concurrencystatementType
- statement type- Returns:
- the PStmtKey created for the given arguments.
-
createKey
Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statementstatementType
- statement type- Returns:
- the PStmtKey created for the given arguments.
-
createKey
Creates a PStmtKey for the given arguments.- Parameters:
sql
- the SQL string used to define the statementcolumnNames
- column names- Returns:
- the PStmtKey created for the given arguments.
-
destroyObject
public void destroyObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject) throws Exception KeyedPooledObjectFactory
method for destroying PoolablePreparedStatements and PoolableCallableStatements. Closes the underlying statement.- Specified by:
destroyObject
in interfaceKeyedPooledObjectFactory<PStmtKey,
DelegatingPreparedStatement> - Parameters:
key
- ignoredpooledObject
- the wrapped pooled statement to be destroyed.- Throws:
Exception
- should be avoided as it may be swallowed by the pool implementation.- See Also:
-
destroyObject
public void destroyObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> p, DestroyMode mode) throws Exception Description copied from interface:KeyedPooledObjectFactory
Destroy an instance no longer needed by the pool, using the providedDestroyMode
.- Specified by:
destroyObject
in interfaceKeyedPooledObjectFactory<PStmtKey,
DelegatingPreparedStatement> - Parameters:
key
- the key used when selecting the instancep
- aPooledObject
wrapping the instance to be destroyedmode
- DestroyMode providing context to the factory- Throws:
Exception
- should be avoided as it may be swallowed by the pool implementation.- See Also:
-
getStatementPool
Returns the prepared statement pool we're using.- Returns:
- statement pool
- Since:
- 2.8.0
-
makeObject
KeyedPooledObjectFactory
method for creatingPoolablePreparedStatement
s orPoolableCallableStatement
s. ThestmtType
field in the key determines whether a PoolablePreparedStatement or PoolableCallableStatement is created.- Specified by:
makeObject
in interfaceKeyedPooledObjectFactory<PStmtKey,
DelegatingPreparedStatement> - Parameters:
key
- the key for thePreparedStatement
to be created- Returns:
- a
PooledObject
wrapping an instance that can be served by the pool. - Throws:
Exception
- if there is a problem creating a new instance, this will be propagated to the code requesting an object.- See Also:
-
normalizeSQL
Normalizes the given SQL statement, producing a canonical form that is semantically equivalent to the original.- Parameters:
sql
- The statement to be normalized.- Returns:
- The canonical form of the supplied SQL statement.
-
passivateObject
public void passivateObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject) throws Exception KeyedPooledObjectFactory
method for passivatingPreparedStatement
s orCallableStatement
s. InvokesPreparedStatement.clearParameters()
.- Specified by:
passivateObject
in interfaceKeyedPooledObjectFactory<PStmtKey,
DelegatingPreparedStatement> - Parameters:
key
- ignoredpooledObject
- a wrappedPreparedStatement
- Throws:
Exception
- if there is a problem passivatingobj
, this exception may be swallowed by the pool.- See Also:
-
prepareCall
Creates or obtains aCallableStatement
from the pool.- Specified by:
prepareCall
in interfaceConnection
- Overrides:
prepareCall
in classDelegatingConnection<Connection>
- Parameters:
sql
- the SQL string used to define the CallableStatement- Returns:
- a
PoolableCallableStatement
- Throws:
SQLException
- Wraps an underlying exception.
-
prepareCall
public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency) throws SQLException Creates or obtains aCallableStatement
from the pool.- Specified by:
prepareCall
in interfaceConnection
- Overrides:
prepareCall
in classDelegatingConnection<Connection>
- Parameters:
sql
- the SQL string used to define the CallableStatementresultSetType
- result set typeresultSetConcurrency
- result set concurrency- Returns:
- a
PoolableCallableStatement
- Throws:
SQLException
- Wraps an underlying exception.
-
prepareCall
public CallableStatement prepareCall(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException Creates or obtains aCallableStatement
from the pool.- Specified by:
prepareCall
in interfaceConnection
- Overrides:
prepareCall
in classDelegatingConnection<Connection>
- Parameters:
sql
- the SQL string used to define the CallableStatementresultSetType
- result set typeresultSetConcurrency
- result set concurrencyresultSetHoldability
- result set holdability- Returns:
- a
PoolableCallableStatement
- Throws:
SQLException
- Wraps an underlying exception.
-
prepareStatement
Creates or obtains aPreparedStatement
from the pool.- Specified by:
prepareStatement
in interfaceConnection
- Overrides:
prepareStatement
in classDelegatingConnection<Connection>
- Parameters:
sql
- the SQL string used to define the PreparedStatement- Returns:
- a
PoolablePreparedStatement
- Throws:
SQLException
- Wraps an underlying exception.
-
prepareStatement
- Specified by:
prepareStatement
in interfaceConnection
- Overrides:
prepareStatement
in classDelegatingConnection<Connection>
- Throws:
SQLException
-
prepareStatement
Creates or obtains aPreparedStatement
from the pool.- Specified by:
prepareStatement
in interfaceConnection
- Overrides:
prepareStatement
in classDelegatingConnection<Connection>
- Parameters:
sql
- the SQL string used to define the PreparedStatementcolumnIndexes
- An array of column indexes indicating the columns that should be returned from the inserted row or rows.- Returns:
- a
PoolablePreparedStatement
- Throws:
SQLException
- Wraps an underlying exception.
-
prepareStatement
public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency) throws SQLException Creates or obtains aPreparedStatement
from the pool.- Specified by:
prepareStatement
in interfaceConnection
- Overrides:
prepareStatement
in classDelegatingConnection<Connection>
- Parameters:
sql
- the SQL string used to define the PreparedStatementresultSetType
- result set typeresultSetConcurrency
- result set concurrency- Returns:
- a
PoolablePreparedStatement
- Throws:
SQLException
- Wraps an underlying exception.
-
prepareStatement
public PreparedStatement prepareStatement(String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws SQLException Creates or obtains aPreparedStatement
from the pool.- Specified by:
prepareStatement
in interfaceConnection
- Overrides:
prepareStatement
in classDelegatingConnection<Connection>
- Parameters:
sql
- the SQL string used to define the PreparedStatementresultSetType
- result set typeresultSetConcurrency
- result set concurrencyresultSetHoldability
- result set holdability- Returns:
- a
PoolablePreparedStatement
- Throws:
SQLException
- Wraps an underlying exception.
-
prepareStatement
Creates or obtains aPreparedStatement
from the pool.- Specified by:
prepareStatement
in interfaceConnection
- Overrides:
prepareStatement
in classDelegatingConnection<Connection>
- Parameters:
sql
- the SQL string used to define the PreparedStatementcolumnNames
- column names- Returns:
- a
PoolablePreparedStatement
- Throws:
SQLException
- Wraps an underlying exception.
-
setClearStatementPoolOnReturn
public void setClearStatementPoolOnReturn(boolean clearStatementPoolOnReturn) Sets whether the pool of statements should be cleared when the connection is returned to its pool. Default is false.- Parameters:
clearStatementPoolOnReturn
- clear or not- Since:
- 2.8.0
-
setStatementPool
Sets the prepared statement pool.- Parameters:
pool
- the prepared statement pool.
-
toString
Description copied from class:DelegatingConnection
Returns a string representation of the metadata associated with the innermost delegate connection.- Overrides:
toString
in classDelegatingConnection<Connection>
-
validateObject
KeyedPooledObjectFactory
method for validating pooled statements. Currently always returns true.- Specified by:
validateObject
in interfaceKeyedPooledObjectFactory<PStmtKey,
DelegatingPreparedStatement> - Parameters:
key
- ignoredpooledObject
- ignored- Returns:
true
-