public class BasicDataSource extends Object implements DataSource
Basic implementation of javax.sql.DataSource
that is
configured via JavaBeans properties. This is not the only way to
combine the commons-dbcp and commons-pool packages,
but provides a "one stop shopping" solution for basic requirements.
Users extending this class should take care to use appropriate accessors rather than accessing protected fields directly to ensure thread-safety.
Modifier and Type | Field and Description |
---|---|
protected boolean |
closed |
protected List<String> |
connectionInitSqls
These SQL statements run once after a Connection is created.
|
protected GenericObjectPool<PoolableConnection> |
connectionPool
The object pool that internally manages our connections.
|
protected Properties |
connectionProperties
The connection properties that will be sent to our JDBC driver when
establishing new connections.
|
protected DataSource |
dataSource
The data source we will use to manage connections.
|
protected boolean |
defaultAutoCommit
The default auto-commit state of connections created by this pool.
|
protected String |
defaultCatalog
The default "catalog" of connections created by this pool.
|
protected Boolean |
defaultReadOnly
The default read-only state of connections created by this pool.
|
protected int |
defaultTransactionIsolation
The default TransactionIsolation state of connections created by this pool.
|
protected ClassLoader |
driverClassLoader
The class loader instance to use to load the JDBC driver.
|
protected String |
driverClassName
The fully qualified Java class name of the JDBC driver to be used.
|
protected int |
initialSize
The initial number of connections that are created when the pool
is started.
|
protected PrintWriter |
logWriter
The PrintWriter to which log messages should be directed.
|
protected int |
maxActive
The maximum number of active connections that can be allocated from
this pool at the same time, or negative for no limit.
|
protected int |
maxIdle
The maximum number of connections that can remain idle in the
pool, without extra ones being destroyed, or negative for no limit.
|
protected int |
maxOpenPreparedStatements
The maximum number of open statements that can be allocated from
the statement pool at the same time, or non-positive for no limit.
|
protected long |
maxWait
The maximum number of milliseconds that the pool will wait (when there
are no available connections) for a connection to be returned before
throwing an exception, or <= 0 to wait indefinitely.
|
protected long |
minEvictableIdleTimeMillis
The minimum amount of time an object may sit idle in the pool before it
is eligible for eviction by the idle object evictor (if any).
|
protected int |
minIdle
The minimum number of active connections that can remain idle in the
pool, without extra ones being created when the evictor runs, or 0 to create none.
|
protected int |
numTestsPerEvictionRun
The number of objects to examine during each run of the idle object
evictor thread (if any).
|
protected String |
password
The connection password to be passed to our JDBC driver to establish
a connection.
|
protected boolean |
poolPreparedStatements
Prepared statement pooling for this pool.
|
protected boolean |
testOnBorrow
The indication of whether objects will be validated before being
borrowed from the pool.
|
protected boolean |
testOnReturn
The indication of whether objects will be validated before being
returned to the pool.
|
protected boolean |
testWhileIdle
The indication of whether objects will be validated by the idle object
evictor (if any).
|
protected long |
timeBetweenEvictionRunsMillis
The number of milliseconds to sleep between runs of the idle object
evictor thread.
|
protected String |
url
The connection URL to be passed to our JDBC driver to establish
a connection.
|
protected String |
username
The connection username to be passed to our JDBC driver to
establish a connection.
|
protected String |
validationQuery
The SQL query that will be used to validate connections from this pool
before returning them to the caller.
|
protected int |
validationQueryTimeout
Timeout in seconds before connection validation queries fail.
|
Constructor and Description |
---|
BasicDataSource() |
Modifier and Type | Method and Description |
---|---|
void |
addConnectionProperty(String name,
String value)
Add a custom connection property to the set that will be passed to our
JDBC driver.
|
void |
close()
Closes and releases all idle connections that are currently stored in the connection pool
associated with this data source.
|
protected ConnectionFactory |
createConnectionFactory()
Creates a JDBC connection factory for this datasource.
|
protected void |
createConnectionPool()
Creates a connection pool for this datasource.
|
protected DataSource |
createDataSource()
Create (if necessary) and return the internal data source we are
using to manage our connections.
|
protected void |
createDataSourceInstance()
Creates the actual data source instance.
|
protected void |
createPoolableConnectionFactory(ConnectionFactory driverConnectionFactory,
KeyedObjectPoolFactory<PStmtKey,DelegatingPreparedStatement> statementPoolFactory,
AbandonedConfig configuration)
Creates the PoolableConnectionFactory and attaches it to the connection pool.
|
Connection |
getConnection()
Create (if necessary) and return a connection to the database.
|
Connection |
getConnection(String user,
String pass)
BasicDataSource does NOT support this method.
|
Collection<String> |
getConnectionInitSqls()
Returns the list of SQL statements executed when a physical connection
is first created.
|
boolean |
getDefaultAutoCommit()
Returns the default auto-commit property.
|
String |
getDefaultCatalog()
Returns the default catalog.
|
boolean |
getDefaultReadOnly()
Returns the default readOnly property.
|
int |
getDefaultTransactionIsolation()
Returns the default transaction isolation state of returned connections.
|
ClassLoader |
getDriverClassLoader()
Returns the class loader specified for loading the JDBC driver.
|
String |
getDriverClassName()
Returns the JDBC driver class name.
|
int |
getInitialSize()
Returns the initial size of the connection pool.
|
boolean |
getLifo()
Returns the LIFO property.
|
boolean |
getLogAbandoned()
Flag to log stack traces for application code which abandoned
a Statement or Connection.
|
int |
getLoginTimeout()
BasicDataSource does NOT support this method.
|
PrintWriter |
getLogWriter()
Returns the log writer being used by this data source.
|
int |
getMaxActive()
Returns the maximum number of active connections that can be
allocated at the same time.
|
int |
getMaxIdle()
Returns the maximum number of connections that can remain idle in the
pool.
|
int |
getMaxOpenPreparedStatements()
Gets the value of the
maxOpenPreparedStatements property. |
long |
getMaxWait()
Returns the maximum number of milliseconds that the pool will wait
for a connection to be returned before throwing an exception.
|
long |
getMinEvictableIdleTimeMillis()
Returns the
minEvictableIdleTimeMillis property. |
int |
getMinIdle()
Returns the minimum number of idle connections in the pool.
|
int |
getNumActive()
[Read Only] The current number of active connections that have been
allocated from this data source.
|
int |
getNumIdle()
[Read Only] The current number of idle connections that are waiting
to be allocated from this data source.
|
int |
getNumTestsPerEvictionRun()
Returns the value of the
numTestsPerEvictionRun property. |
Logger |
getParentLogger() |
String |
getPassword()
Returns the password passed to the JDBC driver to establish connections.
|
boolean |
getRemoveAbandoned()
Flag to remove abandoned connections if they exceed the
removeAbandonedTimout.
|
int |
getRemoveAbandonedTimeout()
Timeout in seconds before an abandoned connection can be removed.
|
long |
getSoftMinEvictableIdleTimeMillis()
Returns the minimum amount of time a connection may sit idle in the
pool before it is eligible for eviction by the idle object evictor, with
the extra condition that at least "minIdle" connections remain in the
pool.
|
boolean |
getTestOnBorrow()
Returns the
testOnBorrow property. |
boolean |
getTestOnReturn()
Returns the value of the
testOnReturn property. |
boolean |
getTestWhileIdle()
Returns the value of the
testWhileIdle property. |
long |
getTimeBetweenEvictionRunsMillis()
Returns the value of the
timeBetweenEvictionRunsMillis
property. |
String |
getUrl()
Returns the JDBC connection
url property. |
String |
getUsername()
Returns the JDBC connection
username property. |
String |
getValidationQuery()
Returns the validation query used to validate connections before
returning them.
|
int |
getValidationQueryTimeout()
Returns the validation query timeout.
|
boolean |
isAccessToUnderlyingConnectionAllowed()
Returns the value of the accessToUnderlyingConnectionAllowed property.
|
boolean |
isClosed()
If true, this data source is closed and no more connections can be retrieved from this datasource.
|
boolean |
isPoolPreparedStatements()
Returns true if we are pooling statements.
|
boolean |
isWrapperFor(Class<?> iface) |
protected void |
log(String message) |
void |
removeConnectionProperty(String name)
Remove a custom connection property.
|
void |
setAccessToUnderlyingConnectionAllowed(boolean allow)
Sets the value of the accessToUnderlyingConnectionAllowed property.
|
void |
setConnectionInitSqls(Collection<String> connectionInitSqls)
Sets the list of SQL statements to be executed when a physical
connection is first created.
|
void |
setConnectionProperties(String connectionProperties)
Sets the connection properties passed to driver.connect(...).
|
void |
setDefaultAutoCommit(boolean defaultAutoCommit)
Sets default auto-commit state of connections returned by this
datasource.
|
void |
setDefaultCatalog(String defaultCatalog)
Sets the default catalog.
|
void |
setDefaultReadOnly(boolean defaultReadOnly)
Sets defaultReadonly property.
|
void |
setDefaultTransactionIsolation(int defaultTransactionIsolation)
Sets the default transaction isolation state for returned
connections.
|
void |
setDriverClassLoader(ClassLoader driverClassLoader)
Sets the class loader to be used to load the JDBC driver.
|
void |
setDriverClassName(String driverClassName)
Sets the JDBC driver class name.
|
void |
setInitialSize(int initialSize)
Sets the initial size of the connection pool.
|
void |
setLifo(boolean lifo)
Sets the LIFO property.
|
void |
setLogAbandoned(boolean logAbandoned) |
void |
setLoginTimeout(int loginTimeout)
BasicDataSource does NOT support this method.
|
void |
setLogWriter(PrintWriter logWriter)
Sets the log writer being used by this data source.
|
void |
setMaxActive(int maxActive)
Sets the maximum number of active connections that can be
allocated at the same time.
|
void |
setMaxIdle(int maxIdle)
Sets the maximum number of connections that can remain idle in the
pool.
|
void |
setMaxOpenPreparedStatements(int maxOpenStatements)
Sets the value of the
maxOpenPreparedStatements
property. |
void |
setMaxWait(long maxWait)
Sets the maxWait property.
|
void |
setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis)
Sets the
minEvictableIdleTimeMillis property. |
void |
setMinIdle(int minIdle)
Sets the minimum number of idle connections in the pool.
|
void |
setNumTestsPerEvictionRun(int numTestsPerEvictionRun)
Sets the value of the
numTestsPerEvictionRun property. |
void |
setPassword(String password)
Sets the
password . |
void |
setPoolPreparedStatements(boolean poolingStatements)
Sets whether to pool statements or not.
|
void |
setRemoveAbandoned(boolean removeAbandoned)
Flag to remove abandoned connections if they exceed the
removeAbandonedTimeout.
|
void |
setRemoveAbandonedTimeout(int removeAbandonedTimeout)
Sets the timeout in seconds before an abandoned connection can be
removed.
|
void |
setSoftMinEvictableIdleTimeMillis(long softMinEvictableIdleTimeMillis)
Sets the minimum amount of time a connection may sit idle in the pool
before it is eligible for eviction by the idle object evictor, with the
extra condition that at least "minIdle" connections remain in the pool.
|
void |
setTestOnBorrow(boolean testOnBorrow)
Sets the
testOnBorrow property. |
void |
setTestOnReturn(boolean testOnReturn)
Sets the
testOnReturn property. |
void |
setTestWhileIdle(boolean testWhileIdle)
Sets the
testWhileIdle property. |
void |
setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis)
Sets the
timeBetweenEvictionRunsMillis property. |
void |
setUrl(String url)
Sets the
url . |
void |
setUsername(String username)
Sets the
username . |
void |
setValidationQuery(String validationQuery)
Sets the
validationQuery . |
void |
setValidationQueryTimeout(int timeout)
Sets the validation query timeout, the amount of time, in seconds, that
connection validation will wait for a response from the database when
executing a validation query.
|
protected void |
startPoolMaintenance()
Starts the connection pool maintenance task, if configured.
|
<T> T |
unwrap(Class<T> iface) |
protected static void |
validateConnectionFactory(PoolableConnectionFactory connectionFactory) |
protected volatile boolean defaultAutoCommit
protected transient Boolean defaultReadOnly
protected volatile int defaultTransactionIsolation
protected volatile String defaultCatalog
protected String driverClassName
protected ClassLoader driverClassLoader
Class.forName(String)
is used to load the JDBC driver.
If specified, Class.forName(String, boolean, ClassLoader)
is
used.protected int maxActive
protected int maxIdle
protected int minIdle
timeBetweenEvictionRunsMillis
has a positive value.protected int initialSize
protected long maxWait
protected boolean poolPreparedStatements
true
both PreparedStatements and CallableStatements are pooled.protected int maxOpenPreparedStatements
The maximum number of open statements that can be allocated from the statement pool at the same time, or non-positive for no limit. Since a connection usually only uses one or two statements at a time, this is mostly used to help detect resource leaks.
Note: As of version 1.3, CallableStatements (those produced by Connection.prepareCall(java.lang.String)
)
are pooled along with PreparedStatements (produced by Connection.prepareStatement(java.lang.String)
)
and maxOpenPreparedStatements
limits the total number of prepared or callable statements
that may be in use at a given time.
protected boolean testOnBorrow
protected boolean testOnReturn
protected long timeBetweenEvictionRunsMillis
protected int numTestsPerEvictionRun
protected long minEvictableIdleTimeMillis
protected boolean testWhileIdle
protected volatile String password
protected String url
protected String username
protected volatile String validationQuery
protected volatile int validationQueryTimeout
protected volatile List<String> connectionInitSqls
This property can be used for example to run ALTER SESSION SET NLS_SORT=XCYECH in an Oracle Database only once after connection creation.
protected volatile GenericObjectPool<PoolableConnection> connectionPool
protected Properties connectionProperties
protected volatile DataSource dataSource
createDataSource()
method.protected PrintWriter logWriter
protected boolean closed
public boolean getDefaultAutoCommit()
public void setDefaultAutoCommit(boolean defaultAutoCommit)
Sets default auto-commit state of connections returned by this datasource.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
defaultAutoCommit
- default auto-commit valuepublic boolean getDefaultReadOnly()
public void setDefaultReadOnly(boolean defaultReadOnly)
Sets defaultReadonly property.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
defaultReadOnly
- default read-only valuepublic int getDefaultTransactionIsolation()
Connection.getTransactionIsolation()
public void setDefaultTransactionIsolation(int defaultTransactionIsolation)
Sets the default transaction isolation state for returned connections.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
defaultTransactionIsolation
- the default transaction isolation
stateConnection.getTransactionIsolation()
public String getDefaultCatalog()
public void setDefaultCatalog(String defaultCatalog)
Sets the default catalog.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
defaultCatalog
- the default catalogpublic String getDriverClassName()
public void setDriverClassName(String driverClassName)
Sets the JDBC driver class name.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
driverClassName
- the class name of the JDBC driverpublic ClassLoader getDriverClassLoader()
null
if no class loader has been explicitly specified.public void setDriverClassLoader(ClassLoader driverClassLoader)
Sets the class loader to be used to load the JDBC driver.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
driverClassLoader
- the class loader with which to load the JDBC
driverpublic boolean getLifo()
lifo
public void setLifo(boolean lifo)
lifo
- the new value for the LIFO propertypublic int getMaxActive()
Returns the maximum number of active connections that can be allocated at the same time.
A negative number means that there is no limit.
public void setMaxActive(int maxActive)
maxActive
- the new value for maxActivegetMaxActive()
public int getMaxIdle()
Returns the maximum number of connections that can remain idle in the pool. Excess idle connections are destroyed on return to the pool.
A negative value indicates that there is no limit
public void setMaxIdle(int maxIdle)
maxIdle
- the new value for maxIdlegetMaxIdle()
public int getMinIdle()
timeBetweenEvictionRunsMillis
has a positive value.GenericObjectPool.getMinIdle()
public void setMinIdle(int minIdle)
timeBetweenEvictionRunsMillis
has a positive value.minIdle
- the new value for minIdleGenericObjectPool.setMinIdle(int)
public int getInitialSize()
public void setInitialSize(int initialSize)
Sets the initial size of the connection pool.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
initialSize
- the number of connections created when the pool
is initializedpublic long getMaxWait()
Returns the maximum number of milliseconds that the pool will wait for a connection to be returned before throwing an exception.
A value less than or equal to zero means the pool is set to wait indefinitely.
public void setMaxWait(long maxWait)
Sets the maxWait property.
Use -1 to make the pool wait indefinitely.
maxWait
- the new value for maxWaitgetMaxWait()
public boolean isPoolPreparedStatements()
public void setPoolPreparedStatements(boolean poolingStatements)
Sets whether to pool statements or not.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
poolingStatements
- pooling on or offpublic int getMaxOpenPreparedStatements()
maxOpenPreparedStatements
property.maxOpenPreparedStatements
public void setMaxOpenPreparedStatements(int maxOpenStatements)
Sets the value of the maxOpenPreparedStatements
property.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
maxOpenStatements
- the new maximum number of prepared statementsmaxOpenPreparedStatements
public boolean getTestOnBorrow()
testOnBorrow
property.testOnBorrow
public void setTestOnBorrow(boolean testOnBorrow)
testOnBorrow
property. This property determines
whether or not the pool will validate objects before they are borrowed
from the pool. For a true
value to have any effect, the
validationQuery
property must be set to a non-null string.testOnBorrow
- new value for testOnBorrow propertypublic boolean getTestOnReturn()
testOnReturn
property.testOnReturn
public void setTestOnReturn(boolean testOnReturn)
testOnReturn
property. This property determines
whether or not the pool will validate objects before they are returned
to the pool. For a true
value to have any effect, the
validationQuery
property must be set to a non-null string.testOnReturn
- new value for testOnReturn propertypublic long getTimeBetweenEvictionRunsMillis()
timeBetweenEvictionRunsMillis
property.timeBetweenEvictionRunsMillis
public void setTimeBetweenEvictionRunsMillis(long timeBetweenEvictionRunsMillis)
timeBetweenEvictionRunsMillis
property.timeBetweenEvictionRunsMillis
- the new time between evictor runstimeBetweenEvictionRunsMillis
public int getNumTestsPerEvictionRun()
numTestsPerEvictionRun
property.numTestsPerEvictionRun
public void setNumTestsPerEvictionRun(int numTestsPerEvictionRun)
numTestsPerEvictionRun
property.numTestsPerEvictionRun
- the new numTestsPerEvictionRun
valuenumTestsPerEvictionRun
public long getMinEvictableIdleTimeMillis()
minEvictableIdleTimeMillis
property.minEvictableIdleTimeMillis
propertyminEvictableIdleTimeMillis
public void setMinEvictableIdleTimeMillis(long minEvictableIdleTimeMillis)
minEvictableIdleTimeMillis
property.minEvictableIdleTimeMillis
- the minimum amount of time an object
may sit idle in the poolminEvictableIdleTimeMillis
public void setSoftMinEvictableIdleTimeMillis(long softMinEvictableIdleTimeMillis)
softMinEvictableIdleTimeMillis
- minimum amount of time a
connection may sit idle in the pool before it is eligible for eviction,
assuming there are minIdle idle connections in the pool.getSoftMinEvictableIdleTimeMillis()
public long getSoftMinEvictableIdleTimeMillis()
Returns the minimum amount of time a connection may sit idle in the pool before it is eligible for eviction by the idle object evictor, with the extra condition that at least "minIdle" connections remain in the pool.
When miniEvictableIdleTimeMillis
is set to a positive value, miniEvictableIdleTimeMillis is examined
first by the idle connection evictor - i.e. when idle connections are
visited by the evictor, idle time is first compared against
minEvictableIdleTimeMillis
(without considering the number of idle
connections in the pool) and then against
softMinEvictableIdleTimeMillis
, including the minIdle
,
constraint.
public boolean getTestWhileIdle()
testWhileIdle
property.testWhileIdle
public void setTestWhileIdle(boolean testWhileIdle)
testWhileIdle
property. This property determines
whether or not the idle object evictor will validate connections. For a
true
value to have any effect, the
validationQuery
property must be set to a non-null string.testWhileIdle
- new value for testWhileIdle propertypublic int getNumActive()
public int getNumIdle()
public String getPassword()
public void setPassword(String password)
Sets the password
.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
password
- new value for the passwordpublic String getUrl()
url
property.url
passed to the JDBC driver to establish
connectionspublic void setUrl(String url)
Sets the url
.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
url
- the new value for the JDBC connection urlpublic String getUsername()
username
property.username
passed to the JDBC driver to establish
connectionspublic void setUsername(String username)
Sets the username
.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
username
- the new value for the JDBC connection usernamepublic String getValidationQuery()
validationQuery
public void setValidationQuery(String validationQuery)
Sets the validationQuery
.
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
validationQuery
- the new value for the validation querypublic int getValidationQueryTimeout()
public void setValidationQueryTimeout(int timeout)
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
timeout
- new validation query timeout value in secondspublic Collection<String> getConnectionInitSqls()
public void setConnectionInitSqls(Collection<String> connectionInitSqls)
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
connectionInitSqls
- Collection of SQL statements to execute
on connection creationpublic boolean isAccessToUnderlyingConnectionAllowed()
public void setAccessToUnderlyingConnectionAllowed(boolean allow)
Sets the value of the accessToUnderlyingConnectionAllowed property. It controls if the PoolGuard allows access to the underlying connection. (Default: false)
Note: this method currently has no effect once the pool has been
initialized. The pool is initialized the first time one of the
following methods is invoked: getConnection, setLogwriter,
setLoginTimeout, getLoginTimeout, getLogWriter.
allow
- Access to the underlying connection is granted when true.public Connection getConnection() throws SQLException
getConnection
in interface DataSource
SQLException
- if a database access error occurspublic Connection getConnection(String user, String pass) throws SQLException
getConnection
in interface DataSource
user
- Database user on whose behalf the Connection
is being madepass
- The database user's passwordUnsupportedOperationException
SQLException
- if a database access error occurspublic int getLoginTimeout() throws SQLException
Returns the login timeout (in seconds) for connecting to the database.
Calls createDataSource()
, so has the side effect
of initializing the connection pool.
getLoginTimeout
in interface CommonDataSource
SQLException
- if a database access error occursUnsupportedOperationException
- If the DataSource implementation
does not support the login timeout feature.public PrintWriter getLogWriter() throws SQLException
Returns the log writer being used by this data source.
Calls createDataSource()
, so has the side effect
of initializing the connection pool.
getLogWriter
in interface CommonDataSource
SQLException
- if a database access error occurspublic void setLoginTimeout(int loginTimeout) throws SQLException
Set the login timeout (in seconds) for connecting to the database.
Calls createDataSource()
, so has the side effect
of initializing the connection pool.
setLoginTimeout
in interface CommonDataSource
loginTimeout
- The new login timeout, or zero for no timeoutUnsupportedOperationException
- If the DataSource implementation
does not support the login timeout feature.SQLException
- if a database access error occurspublic void setLogWriter(PrintWriter logWriter) throws SQLException
Sets the log writer being used by this data source.
Calls createDataSource()
, so has the side effect
of initializing the connection pool.
setLogWriter
in interface CommonDataSource
logWriter
- The new log writerSQLException
- if a database access error occurspublic boolean getRemoveAbandoned()
Flag to remove abandoned connections if they exceed the removeAbandonedTimout.
The default value is false.
If set to true a connection is considered abandoned and eligible
for removal if it has not been used for more than
removeAbandonedTimeout
seconds.
Abandoned connections are identified and removed when
getConnection()
is invoked and the following conditions hold
getRemoveAbandoned()
= true getNumActive()
> getMaxActive()
- 3 getNumIdle()
< 2 getRemoveAbandonedTimeout()
public void setRemoveAbandoned(boolean removeAbandoned)
Flag to remove abandoned connections if they exceed the removeAbandonedTimeout.
If set to true a connection is considered abandoned and eligible
for removal if it has been idle longer than the
removeAbandonedTimeout
.
Setting this to true can recover db connections from poorly written applications which fail to close a connection.
removeAbandoned
- true means abandoned connections will be
removedgetRemoveAbandoned()
public int getRemoveAbandonedTimeout()
Timeout in seconds before an abandoned connection can be removed.
Creating a Statement, PreparedStatement or CallableStatement or using one of these to execute a query (using one of the execute methods) resets the lastUsed property of the parent connection.
Abandoned connection cleanup happens when
removeAbandoned
== truenumIdle
< 2numActive
> maxActive
- 3The default value is 300 seconds.
public void setRemoveAbandonedTimeout(int removeAbandonedTimeout)
Sets the timeout in seconds before an abandoned connection can be removed.
Setting this property has no effect if
removeAbandoned
is false.
removeAbandonedTimeout
- new abandoned timeout in secondsgetRemoveAbandonedTimeout()
,
getRemoveAbandoned()
public boolean getLogAbandoned()
Flag to log stack traces for application code which abandoned a Statement or Connection.
Defaults to false.
Logging of abandoned Statements and Connections adds overhead for every Connection open or new Statement because a stack trace has to be generated.
public void setLogAbandoned(boolean logAbandoned)
logAbandoned
- new logAbandoned property valuepublic void addConnectionProperty(String name, String value)
name
- Name of the custom connection propertyvalue
- Value of the custom connection propertypublic void removeConnectionProperty(String name)
name
- Name of the custom connection property to removeaddConnectionProperty(String, String)
public void setConnectionProperties(String connectionProperties)
connectionProperties
- the connection properties used to
create new connectionspublic void close() throws SQLException
Closes and releases all idle connections that are currently stored in the connection pool associated with this data source.
Connections that are checked out to clients when this method is invoked are not affected.
When client applications subsequently invoke Connection.close()
to return
these connections to the pool, the underlying JDBC connections are closed.
Attempts to acquire connections using getConnection()
after this method has been
invoked result in SQLExceptions.
This method is idempotent - i.e., closing an already closed BasicDataSource has no effect and does not generate exceptions.
SQLException
- if an error occurs closing idle connectionspublic boolean isClosed()
public boolean isWrapperFor(Class<?> iface) throws SQLException
isWrapperFor
in interface Wrapper
SQLException
public <T> T unwrap(Class<T> iface) throws SQLException
unwrap
in interface Wrapper
SQLException
public Logger getParentLogger() throws SQLFeatureNotSupportedException
getParentLogger
in interface CommonDataSource
SQLFeatureNotSupportedException
protected DataSource createDataSource() throws SQLException
Create (if necessary) and return the internal data source we are using to manage our connections.
IMPLEMENTATION NOTE - It is tempting to use the "double checked locking" idiom in an attempt to avoid synchronizing on every single call to this method. However, this idiom fails to work correctly in the face of some optimizations that are legal for a JVM to perform.
SQLException
- if the object pool cannot be created.protected ConnectionFactory createConnectionFactory() throws SQLException
driverClassName
is specified that class is loaded using
the ClassLoader
of this class or, if driverClassLoader
is set, driverClassName
is loaded with the specified
ClassLoader
.driverClassName
is specified and the previous attempt
fails, the class is loaded using the context class loader of the current
thread.DriverManager
using the specified url
.
SQLException
protected void createConnectionPool()
startPoolMaintenance()
, since setting timeBetweenEvictionRunsMillis
to a positive value causes GenericObjectPool
's eviction timer
to be started.protected void startPoolMaintenance()
protected void createDataSourceInstance() throws SQLException
SQLException
- if unable to create a datasource instanceprotected void createPoolableConnectionFactory(ConnectionFactory driverConnectionFactory, KeyedObjectPoolFactory<PStmtKey,DelegatingPreparedStatement> statementPoolFactory, AbandonedConfig configuration) throws SQLException
driverConnectionFactory
- JDBC connection factorystatementPoolFactory
- statement pool factory (null if statement pooling is turned off)configuration
- abandoned connection tracking configuration (null if no tracking)SQLException
- if an error occurs creating the PoolableConnectionFactoryprotected static void validateConnectionFactory(PoolableConnectionFactory connectionFactory) throws Exception
Exception
protected void log(String message)
Copyright © 2000-2021 Apache Software Foundation. All Rights Reserved.