Package org.apache.tomcat.dbcp.dbcp2
Class PoolingConnection
- java.lang.Object
-
- org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
-
- org.apache.tomcat.dbcp.dbcp2.DelegatingConnection<java.sql.Connection>
-
- org.apache.tomcat.dbcp.dbcp2.PoolingConnection
-
- All Implemented Interfaces:
java.lang.AutoCloseable,java.sql.Connection,java.sql.Wrapper,KeyedPooledObjectFactory<PStmtKey,DelegatingPreparedStatement>,TrackedUse
public class PoolingConnection extends DelegatingConnection<java.sql.Connection> implements KeyedPooledObjectFactory<PStmtKey,DelegatingPreparedStatement>
ADelegatingConnectionthat poolsPreparedStatements.The
prepareStatement(org.apache.tomcat.dbcp.dbcp2.PStmtKey)andprepareCall(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. TheStatement.close()method of the returned statement doesn't actually close the statement, but rather returns it to the pool. (SeePoolablePreparedStatement,PoolableCallableStatement.)- Since:
- 2.0
- See Also:
PoolablePreparedStatement
-
-
Nested Class Summary
Nested Classes Modifier and Type Class Description static classPoolingConnection.StatementTypeStatement types.
-
Constructor Summary
Constructors Constructor Description PoolingConnection(java.sql.Connection connection)Constructor.
-
Method Summary
All Methods Instance Methods Concrete Methods Modifier and Type Method Description voidactivateObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject)KeyedPooledObjectFactorymethod for activating pooled statements.voidclose()Closes and frees allPreparedStatements orCallableStatements from the pool, and close the underlying connection.voidconnectionReturnedToPool()Notification fromPoolableConnectionthat we returned to the pool.protected PStmtKeycreateKey(java.lang.String sql)Creates a PStmtKey for the given arguments.protected PStmtKeycreateKey(java.lang.String sql, int autoGeneratedKeys)Creates a PStmtKey for the given arguments.protected PStmtKeycreateKey(java.lang.String sql, int[] columnIndexes)Creates a PStmtKey for the given arguments.protected PStmtKeycreateKey(java.lang.String sql, int resultSetType, int resultSetConcurrency)Creates a PStmtKey for the given arguments.protected PStmtKeycreateKey(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)Creates a PStmtKey for the given arguments.protected PStmtKeycreateKey(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability, PoolingConnection.StatementType statementType)Creates a PStmtKey for the given arguments.protected PStmtKeycreateKey(java.lang.String sql, int resultSetType, int resultSetConcurrency, PoolingConnection.StatementType statementType)Creates a PStmtKey for the given arguments.protected PStmtKeycreateKey(java.lang.String sql, java.lang.String[] columnNames)Creates a PStmtKey for the given arguments.protected PStmtKeycreateKey(java.lang.String sql, PoolingConnection.StatementType statementType)Creates a PStmtKey for the given arguments.voiddestroyObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject)KeyedPooledObjectFactorymethod for destroying PoolablePreparedStatements and PoolableCallableStatements.KeyedObjectPool<PStmtKey,DelegatingPreparedStatement>getStatementPool()Returns the prepared statement pool we're using.PooledObject<DelegatingPreparedStatement>makeObject(PStmtKey key)KeyedPooledObjectFactorymethod for creatingPoolablePreparedStatements orPoolableCallableStatements.protected java.lang.StringnormalizeSQL(java.lang.String sql)Normalizes the given SQL statement, producing a canonical form that is semantically equivalent to the original.voidpassivateObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject)java.sql.CallableStatementprepareCall(java.lang.String sql)Creates or obtains aCallableStatementfrom the pool.java.sql.CallableStatementprepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency)Creates or obtains aCallableStatementfrom the pool.java.sql.CallableStatementprepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)Creates or obtains aCallableStatementfrom the pool.java.sql.PreparedStatementprepareStatement(java.lang.String sql)Creates or obtains aPreparedStatementfrom the pool.java.sql.PreparedStatementprepareStatement(java.lang.String sql, int autoGeneratedKeys)java.sql.PreparedStatementprepareStatement(java.lang.String sql, int[] columnIndexes)Creates or obtains aPreparedStatementfrom the pool.java.sql.PreparedStatementprepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency)Creates or obtains aPreparedStatementfrom the pool.java.sql.PreparedStatementprepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability)Creates or obtains aPreparedStatementfrom the pool.java.sql.PreparedStatementprepareStatement(java.lang.String sql, java.lang.String[] columnNames)Creates or obtains aPreparedStatementfrom the pool.voidsetClearStatementPoolOnReturn(boolean clearStatementPoolOnReturn)Sets whether the pool of statements should be cleared when the connection is returned to its pool.voidsetStatementPool(KeyedObjectPool<PStmtKey,DelegatingPreparedStatement> pool)Sets the prepared statement pool.java.lang.StringtoString()Returns a string representation of the metadata associated with the innermost delegate connection.booleanvalidateObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject)KeyedPooledObjectFactorymethod 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, getDefaultQueryTimeoutDuration, getDelegate, getDelegateInternal, getHoldability, getInnermostDelegate, getInnermostDelegateInternal, getMetaData, getNetworkTimeout, getSchema, getTransactionIsolation, getTypeMap, getWarnings, handleException, handleExceptionNoThrow, innermostDelegateEquals, isClosed, isClosedInternal, isReadOnly, isValid, isValid, isWrapperFor, nativeSQL, passivate, releaseSavepoint, rollback, rollback, setAutoCommit, setCacheState, setCatalog, setClientInfo, setClientInfo, setClosedInternal, setDefaultQueryTimeout, setDefaultQueryTimeout, setDelegate, setHoldability, setNetworkTimeout, setReadOnly, setSavepoint, setSavepoint, setSchema, setTransactionIsolation, setTypeMap, unwrap
-
Methods inherited from class org.apache.tomcat.dbcp.dbcp2.AbandonedTrace
addTrace, clearTrace, getLastUsed, getLastUsedInstant, getTrace, removeThisTrace, removeTrace, setLastUsed, 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
-
Methods inherited from interface org.apache.tomcat.dbcp.pool2.KeyedPooledObjectFactory
destroyObject
-
-
-
-
Method Detail
-
activateObject
public void activateObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject) throws java.lang.Exception
KeyedPooledObjectFactorymethod for activating pooled statements.- Specified by:
activateObjectin interfaceKeyedPooledObjectFactory<PStmtKey,DelegatingPreparedStatement>- Parameters:
key- ignoredpooledObject- wrapped pooled statement to be activated- Throws:
java.lang.Exception- if there is a problem activatingobj, this exception may be swallowed by the pool.- See Also:
KeyedPooledObjectFactory.destroyObject(K, org.apache.tomcat.dbcp.pool2.PooledObject<V>)
-
close
public void close() throws java.sql.SQLExceptionCloses and frees allPreparedStatements orCallableStatements from the pool, and close the underlying connection.- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.sql.Connection- Overrides:
closein classDelegatingConnection<java.sql.Connection>- Throws:
java.sql.SQLException
-
connectionReturnedToPool
public void connectionReturnedToPool() throws java.sql.SQLExceptionNotification fromPoolableConnectionthat we returned to the pool.- Throws:
java.sql.SQLException- whenclearStatementPoolOnReturnis true and the statement pool could not be cleared- Since:
- 2.8.0
-
createKey
protected PStmtKey createKey(java.lang.String sql)
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
protected PStmtKey createKey(java.lang.String sql, int autoGeneratedKeys)
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_KEYSorStatement.NO_GENERATED_KEYS.- Returns:
- the PStmtKey created for the given arguments.
-
createKey
protected PStmtKey createKey(java.lang.String sql, int resultSetType, int resultSetConcurrency)
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(java.lang.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(java.lang.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(java.lang.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
protected PStmtKey createKey(java.lang.String sql, int[] columnIndexes)
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
protected PStmtKey createKey(java.lang.String sql, PoolingConnection.StatementType statementType)
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
protected PStmtKey createKey(java.lang.String sql, java.lang.String[] columnNames)
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 java.lang.Exception
KeyedPooledObjectFactorymethod for destroying PoolablePreparedStatements and PoolableCallableStatements. Closes the underlying statement.- Specified by:
destroyObjectin interfaceKeyedPooledObjectFactory<PStmtKey,DelegatingPreparedStatement>- Parameters:
key- ignoredpooledObject- the wrapped pooled statement to be destroyed.- Throws:
java.lang.Exception- should be avoided as it may be swallowed by the pool implementation.- See Also:
KeyedPooledObjectFactory.validateObject(K, org.apache.tomcat.dbcp.pool2.PooledObject<V>),KeyedObjectPool.invalidateObject(K, V)
-
getStatementPool
public KeyedObjectPool<PStmtKey,DelegatingPreparedStatement> getStatementPool()
Returns the prepared statement pool we're using.- Returns:
- statement pool
- Since:
- 2.8.0
-
makeObject
public PooledObject<DelegatingPreparedStatement> makeObject(PStmtKey key) throws java.lang.Exception
KeyedPooledObjectFactorymethod for creatingPoolablePreparedStatements orPoolableCallableStatements. ThestmtTypefield in the key determines whether a PoolablePreparedStatement or PoolableCallableStatement is created.- Specified by:
makeObjectin interfaceKeyedPooledObjectFactory<PStmtKey,DelegatingPreparedStatement>- Parameters:
key- the key for thePreparedStatementto be created- Returns:
- a
PooledObjectwrapping an instance that can be served by the pool. - Throws:
java.lang.Exception- if there is a problem creating a new instance, this will be propagated to the code requesting an object.- See Also:
createKey(String, int, int, StatementType)
-
normalizeSQL
protected java.lang.String normalizeSQL(java.lang.String sql)
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 java.lang.Exception
KeyedPooledObjectFactorymethod for passivatingPreparedStatements orCallableStatements. InvokesPreparedStatement.clearParameters().- Specified by:
passivateObjectin interfaceKeyedPooledObjectFactory<PStmtKey,DelegatingPreparedStatement>- Parameters:
key- ignoredpooledObject- a wrappedPreparedStatement- Throws:
java.lang.Exception- if there is a problem passivatingobj, this exception may be swallowed by the pool.- See Also:
KeyedPooledObjectFactory.destroyObject(K, org.apache.tomcat.dbcp.pool2.PooledObject<V>)
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql) throws java.sql.SQLExceptionCreates or obtains aCallableStatementfrom the pool.- Specified by:
prepareCallin interfacejava.sql.Connection- Overrides:
prepareCallin classDelegatingConnection<java.sql.Connection>- Parameters:
sql- the SQL string used to define the CallableStatement- Returns:
- a
PoolableCallableStatement - Throws:
java.sql.SQLException- Wraps an underlying exception.
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency) throws java.sql.SQLExceptionCreates or obtains aCallableStatementfrom the pool.- Specified by:
prepareCallin interfacejava.sql.Connection- Overrides:
prepareCallin classDelegatingConnection<java.sql.Connection>- Parameters:
sql- the SQL string used to define the CallableStatementresultSetType- result set typeresultSetConcurrency- result set concurrency- Returns:
- a
PoolableCallableStatement - Throws:
java.sql.SQLException- Wraps an underlying exception.
-
prepareCall
public java.sql.CallableStatement prepareCall(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws java.sql.SQLExceptionCreates or obtains aCallableStatementfrom the pool.- Specified by:
prepareCallin interfacejava.sql.Connection- Overrides:
prepareCallin classDelegatingConnection<java.sql.Connection>- Parameters:
sql- the SQL string used to define the CallableStatementresultSetType- result set typeresultSetConcurrency- result set concurrencyresultSetHoldability- result set holdability- Returns:
- a
PoolableCallableStatement - Throws:
java.sql.SQLException- Wraps an underlying exception.
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql) throws java.sql.SQLExceptionCreates or obtains aPreparedStatementfrom the pool.- Specified by:
prepareStatementin interfacejava.sql.Connection- Overrides:
prepareStatementin classDelegatingConnection<java.sql.Connection>- Parameters:
sql- the SQL string used to define the PreparedStatement- Returns:
- a
PoolablePreparedStatement - Throws:
java.sql.SQLException- Wraps an underlying exception.
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int autoGeneratedKeys) throws java.sql.SQLException- Specified by:
prepareStatementin interfacejava.sql.Connection- Overrides:
prepareStatementin classDelegatingConnection<java.sql.Connection>- Throws:
java.sql.SQLException
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency) throws java.sql.SQLExceptionCreates or obtains aPreparedStatementfrom the pool.- Specified by:
prepareStatementin interfacejava.sql.Connection- Overrides:
prepareStatementin classDelegatingConnection<java.sql.Connection>- Parameters:
sql- the SQL string used to define the PreparedStatementresultSetType- result set typeresultSetConcurrency- result set concurrency- Returns:
- a
PoolablePreparedStatement - Throws:
java.sql.SQLException- Wraps an underlying exception.
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int resultSetType, int resultSetConcurrency, int resultSetHoldability) throws java.sql.SQLExceptionCreates or obtains aPreparedStatementfrom the pool.- Specified by:
prepareStatementin interfacejava.sql.Connection- Overrides:
prepareStatementin classDelegatingConnection<java.sql.Connection>- Parameters:
sql- the SQL string used to define the PreparedStatementresultSetType- result set typeresultSetConcurrency- result set concurrencyresultSetHoldability- result set holdability- Returns:
- a
PoolablePreparedStatement - Throws:
java.sql.SQLException- Wraps an underlying exception.
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, int[] columnIndexes) throws java.sql.SQLExceptionCreates or obtains aPreparedStatementfrom the pool.- Specified by:
prepareStatementin interfacejava.sql.Connection- Overrides:
prepareStatementin classDelegatingConnection<java.sql.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:
java.sql.SQLException- Wraps an underlying exception.
-
prepareStatement
public java.sql.PreparedStatement prepareStatement(java.lang.String sql, java.lang.String[] columnNames) throws java.sql.SQLExceptionCreates or obtains aPreparedStatementfrom the pool.- Specified by:
prepareStatementin interfacejava.sql.Connection- Overrides:
prepareStatementin classDelegatingConnection<java.sql.Connection>- Parameters:
sql- the SQL string used to define the PreparedStatementcolumnNames- column names- Returns:
- a
PoolablePreparedStatement - Throws:
java.sql.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
public void setStatementPool(KeyedObjectPool<PStmtKey,DelegatingPreparedStatement> pool)
Sets the prepared statement pool.- Parameters:
pool- the prepared statement pool.
-
toString
public java.lang.String toString()
Description copied from class:DelegatingConnectionReturns a string representation of the metadata associated with the innermost delegate connection.- Overrides:
toStringin classDelegatingConnection<java.sql.Connection>
-
validateObject
public boolean validateObject(PStmtKey key, PooledObject<DelegatingPreparedStatement> pooledObject)
KeyedPooledObjectFactorymethod for validating pooled statements. Currently always returns true.- Specified by:
validateObjectin interfaceKeyedPooledObjectFactory<PStmtKey,DelegatingPreparedStatement>- Parameters:
key- ignoredpooledObject- ignored- Returns:
true
-
-