Repository: commons-dbcp Updated Branches: refs/heads/master b729bd943 -> fbf2ef517
Javadoc. Project: http://git-wip-us.apache.org/repos/asf/commons-dbcp/repo Commit: http://git-wip-us.apache.org/repos/asf/commons-dbcp/commit/fbf2ef51 Tree: http://git-wip-us.apache.org/repos/asf/commons-dbcp/tree/fbf2ef51 Diff: http://git-wip-us.apache.org/repos/asf/commons-dbcp/diff/fbf2ef51 Branch: refs/heads/master Commit: fbf2ef51728b2cb8459b1edab75b023ac67f8d8c Parents: b729bd9 Author: Gary Gregory <garydgreg...@gmail.com> Authored: Tue Nov 13 19:54:28 2018 -0700 Committer: Gary Gregory <garydgreg...@gmail.com> Committed: Tue Nov 13 19:54:28 2018 -0700 ---------------------------------------------------------------------- .../apache/commons/dbcp2/BasicDataSource.java | 2 +- .../dbcp2/DataSourceConnectionFactory.java | 3 + .../commons/dbcp2/DriverConnectionFactory.java | 3 + .../dbcp2/DriverManagerConnectionFactory.java | 3 + .../commons/dbcp2/PoolableConnection.java | 9 +- .../dbcp2/PoolableConnectionFactory.java | 674 ++++++++++--------- .../dbcp2/managed/LocalXAConnectionFactory.java | 1 + .../dbcp2/managed/ManagedConnection.java | 2 + .../managed/PoolableManagedConnection.java | 1 + .../PoolableManagedConnectionFactory.java | 1 + 10 files changed, 374 insertions(+), 325 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java index a944da3..9bda48d 100644 --- a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java +++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java @@ -1963,7 +1963,7 @@ public class BasicDataSource implements DataSource, BasicDataSourceMXBean, MBean * * @param autoCommitOnReturn * Whether or not connections being returned to the pool will be checked and configured with auto-commit. - * @deprecated Use {@linkn #setAutoCommitOnReturn(boolean)}. + * @deprecated Use {@link #setAutoCommitOnReturn(boolean)}. */ @Deprecated public void setEnableAutoCommitOnReturn(final boolean autoCommitOnReturn) { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/DataSourceConnectionFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/DataSourceConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/DataSourceConnectionFactory.java index 19a0c18..f18151d 100644 --- a/src/main/java/org/apache/commons/dbcp2/DataSourceConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/DataSourceConnectionFactory.java @@ -86,6 +86,7 @@ public class DataSourceConnectionFactory implements ConnectionFactory { } /** + * @return The data source. * @since 2.6.0 */ public DataSource getDataSource() { @@ -93,6 +94,7 @@ public class DataSourceConnectionFactory implements ConnectionFactory { } /** + * @return The user name. * @since 2.6.0 */ public String getUserName() { @@ -100,6 +102,7 @@ public class DataSourceConnectionFactory implements ConnectionFactory { } /** + * @return The user password. * @since 2.6.0 */ public char[] getUserPassword() { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/DriverConnectionFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/DriverConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/DriverConnectionFactory.java index ba88b76..1b4f5dd 100644 --- a/src/main/java/org/apache/commons/dbcp2/DriverConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/DriverConnectionFactory.java @@ -54,6 +54,7 @@ public class DriverConnectionFactory implements ConnectionFactory { } /** + * @return The connection String. * @since 2.6.0 */ public String getConnectionString() { @@ -61,6 +62,7 @@ public class DriverConnectionFactory implements ConnectionFactory { } /** + * @return The Driver. * @since 2.6.0 */ public Driver getDriver() { @@ -68,6 +70,7 @@ public class DriverConnectionFactory implements ConnectionFactory { } /** + * @return The Properties. * @since 2.6.0 */ public Properties getProperties() { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/DriverManagerConnectionFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/DriverManagerConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/DriverManagerConnectionFactory.java index eeb1373..c409e73 100644 --- a/src/main/java/org/apache/commons/dbcp2/DriverManagerConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/DriverManagerConnectionFactory.java @@ -124,6 +124,7 @@ public class DriverManagerConnectionFactory implements ConnectionFactory { } /** + * @return The connection URI. * @since 2.6.0 */ public String getConnectionUri() { @@ -131,6 +132,7 @@ public class DriverManagerConnectionFactory implements ConnectionFactory { } /** + * @return The Properties. * @since 2.6.0 */ public Properties getProperties() { @@ -138,6 +140,7 @@ public class DriverManagerConnectionFactory implements ConnectionFactory { } /** + * @return The user name. * @since 2.6.0 */ public String getUserName() { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/PoolableConnection.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/PoolableConnection.java b/src/main/java/org/apache/commons/dbcp2/PoolableConnection.java index e9924ae..6a6ccf4 100644 --- a/src/main/java/org/apache/commons/dbcp2/PoolableConnection.java +++ b/src/main/java/org/apache/commons/dbcp2/PoolableConnection.java @@ -331,13 +331,7 @@ public class PoolableConnection extends DelegatingConnection<Connection> impleme } /** - * @since 2.6.0 - */ - public ObjectNameWrapper getJmxObjectName() { - return jmxObjectName; - } - - /** + * @return The disconnection SQL codes. * @since 2.6.0 */ public Collection<String> getDisconnectionSqlCodes() { @@ -345,6 +339,7 @@ public class PoolableConnection extends DelegatingConnection<Connection> impleme } /** + * @return Whether to fail-fast. * @since 2.6.0 */ public boolean isFastFailValidation() { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java index 604c049..cc91ec4 100644 --- a/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java @@ -46,6 +46,53 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo private static final Log log = LogFactory.getLog(PoolableConnectionFactory.class); /** + * Internal constant to indicate the level is not set. + */ + static final int UNKNOWN_TRANSACTION_ISOLATION = -1; + + private final ConnectionFactory connectionFactory; + + private final ObjectName dataSourceJmxObjectName; + + private volatile String validationQuery; + + private volatile int validationQueryTimeoutSeconds = -1; + + private Collection<String> connectionInitSqls; + + private Collection<String> disconnectionSqlCodes; + + private boolean fastFailValidation = true; + + private volatile ObjectPool<PoolableConnection> pool; + + private Boolean defaultReadOnly; + + private Boolean defaultAutoCommit; + + private boolean autoCommitOnReturn = true; + + private boolean rollbackOnReturn = true; + + private int defaultTransactionIsolation = UNKNOWN_TRANSACTION_ISOLATION; + + private String defaultCatalog; + + private String defaultSchema; + + private boolean cacheState; + + private boolean poolStatements; + + private int maxOpenPreparedStatements = GenericKeyedObjectPoolConfig.DEFAULT_MAX_TOTAL_PER_KEY; + + private long maxConnLifetimeMillis = -1; + + private final AtomicLong connectionIndex = new AtomicLong(0); + + private Integer defaultQueryTimeoutSeconds; + + /** * Creates a new {@code PoolableConnectionFactory}. * * @param connFactory @@ -58,198 +105,135 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo this.dataSourceJmxObjectName = dataSourceJmxObjectName; } - /** - * Sets the query I use to {@link #validateObject validate} {@link Connection}s. Should return at least one row. If - * not specified, {@link Connection#isValid(int)} will be used to validate connections. - * - * @param validationQuery - * a query to use to {@link #validateObject validate} {@link Connection}s. - */ - public void setValidationQuery(final String validationQuery) { - this.validationQuery = validationQuery; - } + @Override + public void activateObject(final PooledObject<PoolableConnection> p) throws Exception { - /** - * 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. Use a value less than or equal to 0 for no timeout. - * - * @param validationQueryTimeoutSeconds - * new validation query timeout value in seconds - */ - public void setValidationQueryTimeout(final int validationQueryTimeoutSeconds) { - this.validationQueryTimeoutSeconds = validationQueryTimeoutSeconds; + validateLifetime(p); + + final PoolableConnection conn = p.getObject(); + conn.activate(); + + if (defaultAutoCommit != null && conn.getAutoCommit() != defaultAutoCommit.booleanValue()) { + conn.setAutoCommit(defaultAutoCommit.booleanValue()); + } + if (defaultTransactionIsolation != UNKNOWN_TRANSACTION_ISOLATION + && conn.getTransactionIsolation() != defaultTransactionIsolation) { + conn.setTransactionIsolation(defaultTransactionIsolation); + } + if (defaultReadOnly != null && conn.isReadOnly() != defaultReadOnly.booleanValue()) { + conn.setReadOnly(defaultReadOnly.booleanValue()); + } + if (defaultCatalog != null && !defaultCatalog.equals(conn.getCatalog())) { + conn.setCatalog(defaultCatalog); + } + if (defaultSchema != null && !defaultSchema.equals(Jdbc41Bridge.getSchema(conn))) { + Jdbc41Bridge.setSchema(conn, defaultSchema); + } + conn.setDefaultQueryTimeout(defaultQueryTimeoutSeconds); } - /** - * Sets the SQL statements I use to initialize newly created {@link Connection}s. Using {@code null} turns off - * connection initialization. - * - * @param connectionInitSqls - * SQL statement to initialize {@link Connection}s. - */ - public void setConnectionInitSql(final Collection<String> connectionInitSqls) { - this.connectionInitSqls = connectionInitSqls; + @Override + public void destroyObject(final PooledObject<PoolableConnection> p) throws Exception { + p.getObject().reallyClose(); } /** - * Sets the {@link ObjectPool} in which to pool {@link Connection}s. - * - * @param pool - * the {@link ObjectPool} in which to pool those {@link Connection}s + * @return The cache state. + * @since Made public in 2.6.0. */ - public synchronized void setPool(final ObjectPool<PoolableConnection> pool) { - if (null != this.pool && pool != this.pool) { - try { - this.pool.close(); - } catch (final Exception e) { - // ignored !?! - } - } - this.pool = pool; + public boolean getCacheState() { + return cacheState; } /** - * Returns the {@link ObjectPool} in which {@link Connection}s are pooled. - * - * @return the connection pool + * @return The connection factory. + * @since Made public in 2.6.0. */ - public synchronized ObjectPool<PoolableConnection> getPool() { - return pool; + public ConnectionFactory getConnectionFactory() { + return connectionFactory; } - /** - * Sets the default "read only" setting for borrowed {@link Connection}s - * - * @param defaultReadOnly - * the default "read only" setting for borrowed {@link Connection}s - */ - public void setDefaultReadOnly(final Boolean defaultReadOnly) { - this.defaultReadOnly = defaultReadOnly; + protected AtomicLong getConnectionIndex() { + return connectionIndex; } /** - * Sets the default "auto commit" setting for borrowed {@link Connection}s - * - * @param defaultAutoCommit - * the default "auto commit" setting for borrowed {@link Connection}s + * @return The collection of initialization SQL statements. + * @since 2.6.0 */ - public void setDefaultAutoCommit(final Boolean defaultAutoCommit) { - this.defaultAutoCommit = defaultAutoCommit; + public Collection<String> getConnectionInitSqls() { + return connectionInitSqls; } /** - * Sets the default "Transaction Isolation" setting for borrowed {@link Connection}s - * - * @param defaultTransactionIsolation - * the default "Transaction Isolation" setting for returned {@link Connection}s + * @return The data source JMX ObjectName + * @since Made public in 2.6.0. */ - public void setDefaultTransactionIsolation(final int defaultTransactionIsolation) { - this.defaultTransactionIsolation = defaultTransactionIsolation; + public ObjectName getDataSourceJmxName() { + return dataSourceJmxObjectName; } /** - * Sets the default "catalog" setting for borrowed {@link Connection}s - * - * @param defaultCatalog - * the default "catalog" setting for borrowed {@link Connection}s + * @return The data source JMS ObjectName. + * @since 2.6.0 */ - public void setDefaultCatalog(final String defaultCatalog) { - this.defaultCatalog = defaultCatalog; + public ObjectName getDataSourceJmxObjectName() { + return dataSourceJmxObjectName; } /** - * Sets the default "schema" setting for borrowed {@link Connection}s - * - * @param defaultSchema - * the default "schema" setting for borrowed {@link Connection}s - * @since 2.5.0 + * @return Default auto-commit value. + * @since 2.6.0 */ - public void setDefaultSchema(final String defaultSchema) { - this.defaultSchema = defaultSchema; - } - - public void setCacheState(final boolean cacheState) { - this.cacheState = cacheState; - } - - public void setPoolStatements(final boolean poolStatements) { - this.poolStatements = poolStatements; + public Boolean getDefaultAutoCommit() { + return defaultAutoCommit; } /** - * Deprecated due to typo in method name. - * - * @param maxOpenPreparedStatements - * The maximum number of open prepared statements. - * @deprecated Use {@link #setMaxOpenPreparedStatements(int)}. + * @return Default catalog. + * @since 2.6.0 */ - @Deprecated // Due to typo in method name. - public void setMaxOpenPrepatedStatements(final int maxOpenPreparedStatements) { - setMaxOpenPreparedStatements(maxOpenPreparedStatements); + public String getDefaultCatalog() { + return defaultCatalog; } /** - * Sets the maximum number of open prepared statements. - * - * @param maxOpenPreparedStatements - * The maximum number of open prepared statements. + * @return Default query timeout in seconds. */ - public void setMaxOpenPreparedStatements(final int maxOpenPreparedStatements) { - this.maxOpenPreparedStatements = maxOpenPreparedStatements; + public Integer getDefaultQueryTimeout() { + return defaultQueryTimeoutSeconds; } /** - * Sets the maximum lifetime in milliseconds of a connection after which the connection will always fail activation, - * passivation and validation. A value of zero or less indicates an infinite lifetime. The default value is -1. - * - * @param maxConnLifetimeMillis - * The maximum lifetime in milliseconds. + * @return Default query timeout in seconds. + * @since 2.6.0 */ - public void setMaxConnLifetimeMillis(final long maxConnLifetimeMillis) { - this.maxConnLifetimeMillis = maxConnLifetimeMillis; + public Integer getDefaultQueryTimeoutSeconds() { + return defaultQueryTimeoutSeconds; } /** - * @deprecated Use {@link #isAutoCommitOnReturn()}. + * @return Default read-only-value. + * @since 2.6.0 */ - @Deprecated - public boolean isEnableAutoCommitOnReturn() { - return autoCommitOnReturn; + public Boolean getDefaultReadOnly() { + return defaultReadOnly; } /** + * @return Default schema. * @since 2.6.0 */ - public boolean isAutoCommitOnReturn() { - return autoCommitOnReturn; - } - - public void setAutoCommitOnReturn(final boolean autoCommitOnReturn) { - this.autoCommitOnReturn = autoCommitOnReturn; + public String getDefaultSchema() { + return defaultSchema; } /** - * @deprecated Use {@link setAutoCommitOnReturn(boolean)}. + * @return Default transaction isolation. + * @since 2.6.0 */ - @Deprecated - public void setEnableAutoCommitOnReturn(final boolean autoCommitOnReturn) { - this.autoCommitOnReturn = autoCommitOnReturn; - } - - public boolean isRollbackOnReturn() { - return rollbackOnReturn; - } - - public void setRollbackOnReturn(final boolean rollbackOnReturn) { - this.rollbackOnReturn = rollbackOnReturn; - } - - public Integer getDefaultQueryTimeout() { - return defaultQueryTimeoutSeconds; - } - - public void setDefaultQueryTimeout(final Integer defaultQueryTimeoutSeconds) { - this.defaultQueryTimeoutSeconds = defaultQueryTimeoutSeconds; + public int getDefaultTransactionIsolation() { + return defaultTransactionIsolation; } /** @@ -273,15 +257,79 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo } /** - * @param disconnectionSqlCodes - * The disconnection SQL codes. - * @see #getDisconnectionSqlCodes() - * @since 2.1 + * @return Maximum connection lifetime in milliseconds. + * @since 2.6.0 */ - public void setDisconnectionSqlCodes(final Collection<String> disconnectionSqlCodes) { - this.disconnectionSqlCodes = disconnectionSqlCodes; + public long getMaxConnLifetimeMillis() { + return maxConnLifetimeMillis; } + protected int getMaxOpenPreparedStatements() { + return maxOpenPreparedStatements; + } + + /** + * Returns the {@link ObjectPool} in which {@link Connection}s are pooled. + * + * @return the connection pool + */ + public synchronized ObjectPool<PoolableConnection> getPool() { + return pool; + } + + /** + * @return Whether to pool statements. + * @since Made public in 2.6.0. + */ + public boolean getPoolStatements() { + return poolStatements; + } + /** + * @return Validation query. + * @since 2.6.0 + */ + public String getValidationQuery() { + return validationQuery; + } + /** + * @return Validation query timeout in seconds. + * @since 2.6.0 + */ + public int getValidationQueryTimeoutSeconds() { + return validationQueryTimeoutSeconds; + } + protected void initializeConnection(final Connection conn) throws SQLException { + final Collection<String> sqls = connectionInitSqls; + if (conn.isClosed()) { + throw new SQLException("initializeConnection: connection closed"); + } + if (null != sqls) { + try (Statement stmt = conn.createStatement()) { + for (final String sql : sqls) { + Objects.requireNonNull(sql, "null connectionInitSqls element"); + stmt.execute(sql); + } + } + } + } + + /** + * @return Whether to auto-commit on return. + * @since 2.6.0 + */ + public boolean isAutoCommitOnReturn() { + return autoCommitOnReturn; + } + + /** + * @return Whether to auto-commit on return. + * @deprecated Use {@link #isAutoCommitOnReturn()}. + */ + @Deprecated + public boolean isEnableAutoCommitOnReturn() { + return autoCommitOnReturn; + } + /** * True means that validation will fail immediately for connections that have previously thrown SQLExceptions with * SQL_STATE indicating fatal disconnection errors. @@ -294,17 +342,14 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo public boolean isFastFailValidation() { return fastFailValidation; } - + /** - * @see #isFastFailValidation() - * @param fastFailValidation - * true means connections created by this factory will fast fail validation - * @since 2.1 + * @return Whether to rollback on return. */ - public void setFastFailValidation(final boolean fastFailValidation) { - this.fastFailValidation = fastFailValidation; + public boolean isRollbackOnReturn() { + return rollbackOnReturn; } - + @Override public PooledObject<PoolableConnection> makeObject() throws Exception { Connection conn = connectionFactory.createConnection(); @@ -365,49 +410,7 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo return new DefaultPooledObject<>(pc); } - - protected void initializeConnection(final Connection conn) throws SQLException { - final Collection<String> sqls = connectionInitSqls; - if (conn.isClosed()) { - throw new SQLException("initializeConnection: connection closed"); - } - if (null != sqls) { - try (Statement stmt = conn.createStatement()) { - for (final String sql : sqls) { - Objects.requireNonNull(sql, "null connectionInitSqls element"); - stmt.execute(sql); - } - } - } - } - - @Override - public void destroyObject(final PooledObject<PoolableConnection> p) throws Exception { - p.getObject().reallyClose(); - } - - @Override - public boolean validateObject(final PooledObject<PoolableConnection> p) { - try { - validateLifetime(p); - - validateConnection(p.getObject()); - return true; - } catch (final Exception e) { - if (log.isDebugEnabled()) { - log.debug(Utils.getMessage("poolableConnectionFactory.validateObject.fail"), e); - } - return false; - } - } - - public void validateConnection(final PoolableConnection conn) throws SQLException { - if (conn.isClosed()) { - throw new SQLException("validateConnection: connection closed"); - } - conn.validate(validationQuery, validationQueryTimeoutSeconds); - } - + @Override public void passivateObject(final PooledObject<PoolableConnection> p) throws Exception { @@ -437,181 +440,218 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo conn.passivate(); } - - @Override - public void activateObject(final PooledObject<PoolableConnection> p) throws Exception { - - validateLifetime(p); - - final PoolableConnection conn = p.getObject(); - conn.activate(); - - if (defaultAutoCommit != null && conn.getAutoCommit() != defaultAutoCommit.booleanValue()) { - conn.setAutoCommit(defaultAutoCommit.booleanValue()); - } - if (defaultTransactionIsolation != UNKNOWN_TRANSACTION_ISOLATION - && conn.getTransactionIsolation() != defaultTransactionIsolation) { - conn.setTransactionIsolation(defaultTransactionIsolation); - } - if (defaultReadOnly != null && conn.isReadOnly() != defaultReadOnly.booleanValue()) { - conn.setReadOnly(defaultReadOnly.booleanValue()); - } - if (defaultCatalog != null && !defaultCatalog.equals(conn.getCatalog())) { - conn.setCatalog(defaultCatalog); - } - if (defaultSchema != null && !defaultSchema.equals(Jdbc41Bridge.getSchema(conn))) { - Jdbc41Bridge.setSchema(conn, defaultSchema); - } - conn.setDefaultQueryTimeout(defaultQueryTimeoutSeconds); + + public void setAutoCommitOnReturn(final boolean autoCommitOnReturn) { + this.autoCommitOnReturn = autoCommitOnReturn; } - - private void validateLifetime(final PooledObject<PoolableConnection> p) throws Exception { - if (maxConnLifetimeMillis > 0) { - final long lifetime = System.currentTimeMillis() - p.getCreateTime(); - if (lifetime > maxConnLifetimeMillis) { - throw new LifetimeExceededException(Utils.getMessage("connectionFactory.lifetimeExceeded", - Long.valueOf(lifetime), Long.valueOf(maxConnLifetimeMillis))); - } - } + + public void setCacheState(final boolean cacheState) { + this.cacheState = cacheState; } - + /** - * @since Made public in 2.6.0. + * Sets the SQL statements I use to initialize newly created {@link Connection}s. Using {@code null} turns off + * connection initialization. + * + * @param connectionInitSqls + * SQL statement to initialize {@link Connection}s. */ - public ConnectionFactory getConnectionFactory() { - return connectionFactory; + public void setConnectionInitSql(final Collection<String> connectionInitSqls) { + this.connectionInitSqls = connectionInitSqls; } - + /** - * @since Made public in 2.6.0. + * Sets the default "auto commit" setting for borrowed {@link Connection}s + * + * @param defaultAutoCommit + * the default "auto commit" setting for borrowed {@link Connection}s */ - public boolean getPoolStatements() { - return poolStatements; - } - - protected int getMaxOpenPreparedStatements() { - return maxOpenPreparedStatements; + public void setDefaultAutoCommit(final Boolean defaultAutoCommit) { + this.defaultAutoCommit = defaultAutoCommit; } - + /** - * @since Made public in 2.6.0. + * Sets the default "catalog" setting for borrowed {@link Connection}s + * + * @param defaultCatalog + * the default "catalog" setting for borrowed {@link Connection}s */ - public boolean getCacheState() { - return cacheState; + public void setDefaultCatalog(final String defaultCatalog) { + this.defaultCatalog = defaultCatalog; + } + + public void setDefaultQueryTimeout(final Integer defaultQueryTimeoutSeconds) { + this.defaultQueryTimeoutSeconds = defaultQueryTimeoutSeconds; } - /** - * @since Made public in 2.6.0. + * Sets the default "read only" setting for borrowed {@link Connection}s + * + * @param defaultReadOnly + * the default "read only" setting for borrowed {@link Connection}s */ - public ObjectName getDataSourceJmxName() { - return dataSourceJmxObjectName; - } - - protected AtomicLong getConnectionIndex() { - return connectionIndex; + public void setDefaultReadOnly(final Boolean defaultReadOnly) { + this.defaultReadOnly = defaultReadOnly; } - - private final ConnectionFactory connectionFactory; - private final ObjectName dataSourceJmxObjectName; - private volatile String validationQuery; - private volatile int validationQueryTimeoutSeconds = -1; - private Collection<String> connectionInitSqls; - private Collection<String> disconnectionSqlCodes; - private boolean fastFailValidation = true; - private volatile ObjectPool<PoolableConnection> pool; - private Boolean defaultReadOnly; - private Boolean defaultAutoCommit; - private boolean autoCommitOnReturn = true; - private boolean rollbackOnReturn = true; - private int defaultTransactionIsolation = UNKNOWN_TRANSACTION_ISOLATION; - private String defaultCatalog; - private String defaultSchema; - private boolean cacheState; - private boolean poolStatements; - private int maxOpenPreparedStatements = GenericKeyedObjectPoolConfig.DEFAULT_MAX_TOTAL_PER_KEY; - private long maxConnLifetimeMillis = -1; - private final AtomicLong connectionIndex = new AtomicLong(0); - private Integer defaultQueryTimeoutSeconds; - + /** - * Internal constant to indicate the level is not set. + * Sets the default "schema" setting for borrowed {@link Connection}s + * + * @param defaultSchema + * the default "schema" setting for borrowed {@link Connection}s + * @since 2.5.0 */ - static final int UNKNOWN_TRANSACTION_ISOLATION = -1; - + public void setDefaultSchema(final String defaultSchema) { + this.defaultSchema = defaultSchema; + } + /** - * @since 2.6.0 + * Sets the default "Transaction Isolation" setting for borrowed {@link Connection}s + * + * @param defaultTransactionIsolation + * the default "Transaction Isolation" setting for returned {@link Connection}s */ - public ObjectName getDataSourceJmxObjectName() { - return dataSourceJmxObjectName; + public void setDefaultTransactionIsolation(final int defaultTransactionIsolation) { + this.defaultTransactionIsolation = defaultTransactionIsolation; } - + /** - * @since 2.6.0 + * @param disconnectionSqlCodes + * The disconnection SQL codes. + * @see #getDisconnectionSqlCodes() + * @since 2.1 */ - public String getValidationQuery() { - return validationQuery; + public void setDisconnectionSqlCodes(final Collection<String> disconnectionSqlCodes) { + this.disconnectionSqlCodes = disconnectionSqlCodes; } - + /** - * @since 2.6.0 + * @param autoCommitOnReturn Whether to auto-commit on return. + * @deprecated Use {@link #setAutoCommitOnReturn(boolean)}. */ - public int getValidationQueryTimeoutSeconds() { - return validationQueryTimeoutSeconds; + @Deprecated + public void setEnableAutoCommitOnReturn(final boolean autoCommitOnReturn) { + this.autoCommitOnReturn = autoCommitOnReturn; } /** - * @since 2.6.0 + * @see #isFastFailValidation() + * @param fastFailValidation + * true means connections created by this factory will fast fail validation + * @since 2.1 */ - public Collection<String> getConnectionInitSqls() { - return connectionInitSqls; + public void setFastFailValidation(final boolean fastFailValidation) { + this.fastFailValidation = fastFailValidation; } /** - * @since 2.6.0 + * Sets the maximum lifetime in milliseconds of a connection after which the connection will always fail activation, + * passivation and validation. A value of zero or less indicates an infinite lifetime. The default value is -1. + * + * @param maxConnLifetimeMillis + * The maximum lifetime in milliseconds. */ - public Boolean getDefaultReadOnly() { - return defaultReadOnly; + public void setMaxConnLifetimeMillis(final long maxConnLifetimeMillis) { + this.maxConnLifetimeMillis = maxConnLifetimeMillis; } /** - * @since 2.6.0 + * Sets the maximum number of open prepared statements. + * + * @param maxOpenPreparedStatements + * The maximum number of open prepared statements. */ - public Boolean getDefaultAutoCommit() { - return defaultAutoCommit; + public void setMaxOpenPreparedStatements(final int maxOpenPreparedStatements) { + this.maxOpenPreparedStatements = maxOpenPreparedStatements; } /** - * @since 2.6.0 + * Deprecated due to typo in method name. + * + * @param maxOpenPreparedStatements + * The maximum number of open prepared statements. + * @deprecated Use {@link #setMaxOpenPreparedStatements(int)}. */ - public int getDefaultTransactionIsolation() { - return defaultTransactionIsolation; + @Deprecated // Due to typo in method name. + public void setMaxOpenPrepatedStatements(final int maxOpenPreparedStatements) { + setMaxOpenPreparedStatements(maxOpenPreparedStatements); } /** - * @since 2.6.0 + * Sets the {@link ObjectPool} in which to pool {@link Connection}s. + * + * @param pool + * the {@link ObjectPool} in which to pool those {@link Connection}s */ - public String getDefaultCatalog() { - return defaultCatalog; + public synchronized void setPool(final ObjectPool<PoolableConnection> pool) { + if (null != this.pool && pool != this.pool) { + try { + this.pool.close(); + } catch (final Exception e) { + // ignored !?! + } + } + this.pool = pool; } - /** - * @since 2.6.0 - */ - public String getDefaultSchema() { - return defaultSchema; + public void setPoolStatements(final boolean poolStatements) { + this.poolStatements = poolStatements; + } + + public void setRollbackOnReturn(final boolean rollbackOnReturn) { + this.rollbackOnReturn = rollbackOnReturn; } /** - * @since 2.6.0 + * Sets the query I use to {@link #validateObject validate} {@link Connection}s. Should return at least one row. If + * not specified, {@link Connection#isValid(int)} will be used to validate connections. + * + * @param validationQuery + * a query to use to {@link #validateObject validate} {@link Connection}s. */ - public long getMaxConnLifetimeMillis() { - return maxConnLifetimeMillis; + public void setValidationQuery(final String validationQuery) { + this.validationQuery = validationQuery; } /** - * @since 2.6.0 + * 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. Use a value less than or equal to 0 for no timeout. + * + * @param validationQueryTimeoutSeconds + * new validation query timeout value in seconds */ - public Integer getDefaultQueryTimeoutSeconds() { - return defaultQueryTimeoutSeconds; + public void setValidationQueryTimeout(final int validationQueryTimeoutSeconds) { + this.validationQueryTimeoutSeconds = validationQueryTimeoutSeconds; + } + + public void validateConnection(final PoolableConnection conn) throws SQLException { + if (conn.isClosed()) { + throw new SQLException("validateConnection: connection closed"); + } + conn.validate(validationQuery, validationQueryTimeoutSeconds); + } + + private void validateLifetime(final PooledObject<PoolableConnection> p) throws Exception { + if (maxConnLifetimeMillis > 0) { + final long lifetime = System.currentTimeMillis() - p.getCreateTime(); + if (lifetime > maxConnLifetimeMillis) { + throw new LifetimeExceededException(Utils.getMessage("connectionFactory.lifetimeExceeded", + Long.valueOf(lifetime), Long.valueOf(maxConnLifetimeMillis))); + } + } + } + + @Override + public boolean validateObject(final PooledObject<PoolableConnection> p) { + try { + validateLifetime(p); + + validateConnection(p.getObject()); + return true; + } catch (final Exception e) { + if (log.isDebugEnabled()) { + log.debug(Utils.getMessage("poolableConnectionFactory.validateObject.fail"), e); + } + return false; + } } } http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java index 990aab1..f0c454d 100644 --- a/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/managed/LocalXAConnectionFactory.java @@ -336,6 +336,7 @@ public class LocalXAConnectionFactory implements XAConnectionFactory { } /** + * @return The connection factory. * @since 2.6.0 */ public ConnectionFactory getConnectionFactory() { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java b/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java index 7c074e6..351fe87 100644 --- a/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java +++ b/src/main/java/org/apache/commons/dbcp2/managed/ManagedConnection.java @@ -149,6 +149,7 @@ public class ManagedConnection<C extends Connection> extends DelegatingConnectio } /** + * @return The transaction context. * @since 2.6.0 */ public TransactionContext getTransactionContext() { @@ -156,6 +157,7 @@ public class ManagedConnection<C extends Connection> extends DelegatingConnectio } /** + * @return The transaction registry. * @since 2.6.0 */ public TransactionRegistry getTransactionRegistry() { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java b/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java index 5055e61..f6c0acf 100644 --- a/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java +++ b/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnection.java @@ -71,6 +71,7 @@ public class PoolableManagedConnection extends PoolableConnection { } /** + * @return The transaction registry. * @since 2.6.0 */ public TransactionRegistry getTransactionRegistry() { http://git-wip-us.apache.org/repos/asf/commons-dbcp/blob/fbf2ef51/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java ---------------------------------------------------------------------- diff --git a/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java index e62b65d..de730e5 100644 --- a/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/managed/PoolableManagedConnectionFactory.java @@ -57,6 +57,7 @@ public class PoolableManagedConnectionFactory extends PoolableConnectionFactory } /** + * @return The transaction registry. * @since 2.6.0 */ public TransactionRegistry getTransactionRegistry() {