ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionFactory.java

Path
ttomcat-1778514358873.zip-extract/apache-tomcat-11.0.18-src/java/org/apache/tomcat/dbcp/dbcp2/PoolableConnectionFactory.java
Status
scanned
Type
file
Name
PoolableConnectionFactory.java
Extension
.java
Programming language
Java
Mime type
text/plain
File type
ASCII text, with CRLF line terminators
Tag

      
    
Rootfs path

      
    
Size
30990 (30.3 KB)
MD5
d1338f7e0687ea4eec773470951ab089
SHA1
95223a3f1d3646d779072e4f31b080509f131060
SHA256
9525e0a122652095e1422f81d11cdf4c659ae6f1b05ffda4a4e6cfcd39f7bd2a
SHA512

      
    
SHA1_git
d21b91d3421fce6b0bbbda088c9ebd5d5295fe1a
Is binary

      
    
Is text
True
Is archive

      
    
Is media

      
    
Is legal

      
    
Is manifest

      
    
Is readme

      
    
Is top level

      
    
Is key file

      
    
PoolableConnectionFactory.java | 30.3 KB |

/* * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You under the Apache License, Version 2.0 * (the "License"); you may not use this file except in compliance with * the License. You may obtain a copy of the License at * * https://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.apache.tomcat.dbcp.dbcp2; import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.time.Duration; import java.util.Collection; import java.util.Objects; import java.util.concurrent.atomic.AtomicLong; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import org.apache.juli.logging.Log; import org.apache.juli.logging.LogFactory; import org.apache.tomcat.dbcp.pool2.DestroyMode; import org.apache.tomcat.dbcp.pool2.KeyedObjectPool; import org.apache.tomcat.dbcp.pool2.ObjectPool; import org.apache.tomcat.dbcp.pool2.PooledObject; import org.apache.tomcat.dbcp.pool2.PooledObjectFactory; import org.apache.tomcat.dbcp.pool2.impl.DefaultPooledObject; import org.apache.tomcat.dbcp.pool2.impl.GenericKeyedObjectPool; import org.apache.tomcat.dbcp.pool2.impl.GenericKeyedObjectPoolConfig; /** * A {@link PooledObjectFactory} that creates {@link PoolableConnection}s. * * @since 2.0 */ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableConnection> { 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 Duration validationQueryTimeoutDuration = Duration.ofSeconds(-1); private Collection<String> connectionInitSqls; private Collection<String> disconnectionSqlCodes; private Collection<String> disconnectionIgnoreSqlCodes; private volatile boolean fastFailValidation = true; private volatile ObjectPool<PoolableConnection> pool; private Boolean defaultReadOnly; private Boolean defaultAutoCommit; private volatile boolean autoCommitOnReturn = true; private volatile boolean rollbackOnReturn = true; private volatile int defaultTransactionIsolation = UNKNOWN_TRANSACTION_ISOLATION; private String defaultCatalog; private String defaultSchema; private volatile boolean cacheState; private volatile boolean poolStatements; private volatile boolean clearStatementPoolOnReturn; private volatile int maxOpenPreparedStatements = GenericKeyedObjectPoolConfig.DEFAULT_MAX_TOTAL_PER_KEY; private Duration maxConnDuration = Duration.ofMillis(-1); private final AtomicLong connectionIndex = new AtomicLong(); private Duration defaultQueryTimeoutDuration; /** * Creates a new {@link PoolableConnectionFactory}. * * @param connFactory * the {@link ConnectionFactory} from which to obtain base {@link Connection}s * @param dataSourceJmxObjectName * The JMX object name, may be null. */ public PoolableConnectionFactory(final ConnectionFactory connFactory, final ObjectName dataSourceJmxObjectName) { this.connectionFactory = connFactory; this.dataSourceJmxObjectName = dataSourceJmxObjectName; } @Override public void activateObject(final PooledObject<PoolableConnection> p) throws SQLException { validateLifetime(p); final PoolableConnection poolableConnection = p.getObject(); poolableConnection.activate(); if (defaultAutoCommit != null && poolableConnection.getAutoCommit() != defaultAutoCommit.booleanValue()) { poolableConnection.setAutoCommit(defaultAutoCommit.booleanValue()); } if (defaultTransactionIsolation != UNKNOWN_TRANSACTION_ISOLATION && poolableConnection.getTransactionIsolation() != defaultTransactionIsolation) { poolableConnection.setTransactionIsolation(defaultTransactionIsolation); } if (defaultReadOnly != null && poolableConnection.isReadOnly() != defaultReadOnly.booleanValue()) { poolableConnection.setReadOnly(defaultReadOnly.booleanValue()); } if (defaultCatalog != null && !defaultCatalog.equals(poolableConnection.getCatalog())) { poolableConnection.setCatalog(defaultCatalog); } if (defaultSchema != null && !defaultSchema.equals(Jdbc41Bridge.getSchema(poolableConnection))) { Jdbc41Bridge.setSchema(poolableConnection, defaultSchema); } poolableConnection.setDefaultQueryTimeout(defaultQueryTimeoutDuration); } @Override public void destroyObject(final PooledObject<PoolableConnection> p) throws SQLException { p.getObject().reallyClose(); } /** * @since 2.9.0 */ @Override public void destroyObject(final PooledObject<PoolableConnection> p, final DestroyMode mode) throws SQLException { if (mode == DestroyMode.ABANDONED) { Jdbc41Bridge.abort(p.getObject().getInnermostDelegate(), Runnable::run); } else { p.getObject().reallyClose(); } } /** * Gets the cache state to propagate in {@link #makeObject()}. * * @return The cache state. * @since 2.6.0. */ public boolean getCacheState() { return cacheState; } /** * Gets the connection factory. * * @return The connection factory. * @since 2.6.0. */ public ConnectionFactory getConnectionFactory() { return connectionFactory; } /** * Gets how many connections were created in {@link #makeObject()}. * * @return the connection count. */ protected AtomicLong getConnectionIndex() { return connectionIndex; } /** * Gets the collection of initialization SQL statements. * * @return The collection of initialization SQL statements. * @since 2.6.0 */ public Collection<String> getConnectionInitSqls() { return connectionInitSqls; } /** * Gets data source JMX ObjectName. * * @return The data source JMX ObjectName. * @since 2.6.0. */ public ObjectName getDataSourceJmxName() { return dataSourceJmxObjectName; } /** * Gets the data source JMX ObjectName. * * @return The data source JMX ObjectName. * @since 2.6.0 */ public ObjectName getDataSourceJmxObjectName() { return dataSourceJmxObjectName; } /** * Gets the Default auto-commit value. * * @return The default auto-commit value. * @since 2.6.0 */ public Boolean getDefaultAutoCommit() { return defaultAutoCommit; } /** * Gets the default catalog. * * @return The default catalog. * @since 2.6.0 */ public String getDefaultCatalog() { return defaultCatalog; } /** * Gets the default query timeout in seconds. * * @return The default query timeout in seconds. * @deprecated Use {@link #getDefaultQueryTimeoutDuration()}. */ @Deprecated public Integer getDefaultQueryTimeout() { return getDefaultQueryTimeoutSeconds(); } /** * Gets the default query timeout Duration. * * @return The default query timeout Duration. * @since 2.10.0 */ public Duration getDefaultQueryTimeoutDuration() { return defaultQueryTimeoutDuration; } /** * Gets the default query timeout in seconds. * * @return The default query timeout in seconds. * @since 2.6.0 * @deprecated Use {@link #getDefaultQueryTimeoutDuration()}. */ @Deprecated public Integer getDefaultQueryTimeoutSeconds() { return defaultQueryTimeoutDuration == null ? null : Integer.valueOf((int) defaultQueryTimeoutDuration.getSeconds()); } /** * Gets the default read-only-value. * * @return The default read-only-value. * @since 2.6.0 */ public Boolean getDefaultReadOnly() { return defaultReadOnly; } /** * Gets the default schema. * * @return The default schema. * @since 2.6.0 */ public String getDefaultSchema() { return defaultSchema; } /** * Gets the default transaction isolation. * * @return The default transaction isolation. * @since 2.6.0 */ public int getDefaultTransactionIsolation() { return defaultTransactionIsolation; } /** * Gets the collection of SQL State codes that are not considered fatal disconnection codes. * <p> * This method returns the collection of SQL State codes that have been set to be ignored when * determining if a {@link SQLException} signals a disconnection. These codes are excluded from * being treated as fatal even if they match the typical disconnection criteria. * </p> * * @return a {@link Collection} of SQL State codes that should be ignored for disconnection checks. * @since 2.13.0 */ public Collection<String> getDisconnectionIgnoreSqlCodes() { return disconnectionIgnoreSqlCodes; } /** * Gets SQL State codes considered to signal fatal conditions. * <p> * Overrides the defaults in {@link Utils#getDisconnectionSqlCodes()} (plus anything starting with * {@link Utils#DISCONNECTION_SQL_CODE_PREFIX}). If this property is non-null and {@link #isFastFailValidation()} is * {@code true}, whenever connections created by this factory generate exceptions with SQL State codes in this list, * they will be marked as "fatally disconnected" and subsequent validations will fail fast (no attempt at isValid or * validation query). * </p> * <p> * If {@link #isFastFailValidation()} is {@code false} setting this property has no effect. * </p> * * @return SQL State codes overriding defaults * @since 2.1 */ public Collection<String> getDisconnectionSqlCodes() { return disconnectionSqlCodes; } /** * Gets the Maximum connection duration. * * @return Maximum connection duration. * @since 2.10.0 */ public Duration getMaxConnDuration() { return maxConnDuration; } /** * Gets the Maximum connection lifetime in milliseconds. * * @return Maximum connection lifetime in milliseconds. * @since 2.6.0 */ public long getMaxConnLifetimeMillis() { return maxConnDuration.toMillis(); } /** * Gets the maximum number of open prepared statements. * * @return The maximum number of open prepared statements. */ 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; } /** * Tests whether to pool statements. * * @return Whether to pool statements. * @since 2.6.0. */ public boolean getPoolStatements() { return poolStatements; } /** * Gets the validation query. * * @return Validation query. * @since 2.6.0 */ public String getValidationQuery() { return validationQuery; } /** * Gets the query timeout in seconds. * * @return Validation query timeout in seconds. * @since 2.10.0 */ public Duration getValidationQueryTimeoutDuration() { return validationQueryTimeoutDuration; } /** * Gets the query timeout in seconds. * * @return Validation query timeout in seconds. * @since 2.6.0 * @deprecated Use {@link #getValidationQueryTimeoutDuration()}. */ @Deprecated public int getValidationQueryTimeoutSeconds() { return (int) validationQueryTimeoutDuration.getSeconds(); } /** * Initializes the given connection with the collection of SQL statements set in {@link #setConnectionInitSql(Collection)}. * * @param conn the connection to initialize. * @throws SQLException if a database access error occurs or this method is called on a closed connection. * @see #setConnectionInitSql(Collection) */ protected void initializeConnection(final Connection conn) throws SQLException { final Collection<String> sqls = connectionInitSqls; if (conn.isClosed()) { throw new SQLException("initializeConnection: connection closed"); } if (!Utils.isEmpty(sqls)) { try (Statement statement = conn.createStatement()) { for (final String sql : sqls) { statement.execute(Objects.requireNonNull(sql, "null connectionInitSqls element")); } } } } /** * Tests whether to set auto-commit on {@link #passivateObject(PooledObject)}. * * @return Whether to set auto-commit on {@link #passivateObject(PooledObject)}. * @since 2.6.0 */ public boolean isAutoCommitOnReturn() { return autoCommitOnReturn; } /** * Tests whether to set auto-commit on {@link #passivateObject(PooledObject)}. * * @return Whether to set auto-commit on {@link #passivateObject(PooledObject)}. * @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. * * @return true if connections created by this factory will fast fail validation. * @see #setDisconnectionSqlCodes(Collection) * @since 2.1 * @since 2.5.0 Defaults to true, previous versions defaulted to false. */ public boolean isFastFailValidation() { return fastFailValidation; } /** * Tests whether to rollback on return. * * @return Whether to rollback on return. */ public boolean isRollbackOnReturn() { return rollbackOnReturn; } @Override public PooledObject<PoolableConnection> makeObject() throws SQLException { Connection conn = connectionFactory.createConnection(); if (conn == null) { throw new IllegalStateException("Connection factory returned null from createConnection"); } try { initializeConnection(conn); } catch (final SQLException e) { // Make sure the connection is closed Utils.closeQuietly((AutoCloseable) conn); // Rethrow original exception so it is visible to caller throw e; } final long connIndex = connectionIndex.getAndIncrement(); if (poolStatements) { conn = new PoolingConnection(conn); final GenericKeyedObjectPoolConfig<DelegatingPreparedStatement> config = new GenericKeyedObjectPoolConfig<>(); config.setMaxTotalPerKey(-1); config.setBlockWhenExhausted(false); config.setMaxWait(Duration.ZERO); config.setMaxIdlePerKey(1); config.setMaxTotal(maxOpenPreparedStatements); if (dataSourceJmxObjectName != null) { final StringBuilder base = new StringBuilder(dataSourceJmxObjectName.toString()); base.append(Constants.JMX_CONNECTION_BASE_EXT); base.append(connIndex); config.setJmxNameBase(base.toString()); config.setJmxNamePrefix(Constants.JMX_STATEMENT_POOL_PREFIX); } else { config.setJmxEnabled(false); } final PoolingConnection poolingConn = (PoolingConnection) conn; final KeyedObjectPool<PStmtKey, DelegatingPreparedStatement> stmtPool = new GenericKeyedObjectPool<>(poolingConn, config); poolingConn.setStatementPool(stmtPool); poolingConn.setClearStatementPoolOnReturn(clearStatementPoolOnReturn); poolingConn.setCacheState(cacheState); } // Register this connection with JMX final ObjectName connJmxName; if (dataSourceJmxObjectName == null) { connJmxName = null; } else { final String name = dataSourceJmxObjectName.toString() + Constants.JMX_CONNECTION_BASE_EXT + connIndex; try { connJmxName = new ObjectName(name); } catch (final MalformedObjectNameException e) { Utils.closeQuietly((AutoCloseable) conn); throw new SQLException(name, e); } } final PoolableConnection pc = new PoolableConnection(conn, pool, connJmxName, disconnectionSqlCodes, disconnectionIgnoreSqlCodes, fastFailValidation); pc.setCacheState(cacheState); return new DefaultPooledObject<>(pc); } @Override public void passivateObject(final PooledObject<PoolableConnection> p) throws SQLException { validateLifetime(p); final PoolableConnection conn = p.getObject(); Boolean connAutoCommit = null; if (rollbackOnReturn) { connAutoCommit = Boolean.valueOf(conn.getAutoCommit()); if (!connAutoCommit.booleanValue() && !conn.isReadOnly()) { conn.rollback(); } } conn.clearWarnings(); // DBCP-97 / DBCP-399 / DBCP-351 Idle connections in the pool should // have autoCommit enabled if (autoCommitOnReturn) { if (connAutoCommit == null) { connAutoCommit = Boolean.valueOf(conn.getAutoCommit()); } if (!connAutoCommit.booleanValue()) { conn.setAutoCommit(true); } } conn.passivate(); } /** * Sets whether to set auto-commit on {@link #passivateObject(PooledObject)}. * * @param autoCommitOnReturn whether to set auto-commit. */ public void setAutoCommitOnReturn(final boolean autoCommitOnReturn) { this.autoCommitOnReturn = autoCommitOnReturn; } /** * Sets the cache state to propagate in {@link #makeObject()}. * * @param cacheState the cache state to propagate. */ public void setCacheState(final boolean cacheState) { this.cacheState = cacheState; } /** * Sets whether the pool of statements (which was enabled with {@link #setPoolStatements(boolean)}) should * be cleared when the connection is returned to its pool. Default is false. * * @param clearStatementPoolOnReturn clear or not * @since 2.8.0 */ public void setClearStatementPoolOnReturn(final boolean clearStatementPoolOnReturn) { this.clearStatementPoolOnReturn = clearStatementPoolOnReturn; } /** * 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; } /** * Sets the default "auto commit" setting for borrowed {@link Connection}s * * @param defaultAutoCommit * the default "auto commit" setting for borrowed {@link Connection}s */ public void setDefaultAutoCommit(final Boolean defaultAutoCommit) { this.defaultAutoCommit = defaultAutoCommit; } /** * Sets the default "catalog" setting for borrowed {@link Connection}s * * @param defaultCatalog * the default "catalog" setting for borrowed {@link Connection}s */ public void setDefaultCatalog(final String defaultCatalog) { this.defaultCatalog = defaultCatalog; } /** * Sets the query timeout Duration. * * @param defaultQueryTimeoutDuration the query timeout Duration. * @since 2.10.0 */ public void setDefaultQueryTimeout(final Duration defaultQueryTimeoutDuration) { this.defaultQueryTimeoutDuration = defaultQueryTimeoutDuration; } /** * Sets the query timeout in seconds. * * @param defaultQueryTimeoutSeconds the query timeout in seconds. * @deprecated Use {@link #setDefaultQueryTimeout(Duration)}. */ @Deprecated public void setDefaultQueryTimeout(final Integer defaultQueryTimeoutSeconds) { this.defaultQueryTimeoutDuration = defaultQueryTimeoutSeconds == null ? null : Duration.ofSeconds(defaultQueryTimeoutSeconds.longValue()); } /** * 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; } /** * 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 */ public void setDefaultSchema(final String defaultSchema) { this.defaultSchema = defaultSchema; } /** * Sets the default "Transaction Isolation" setting for borrowed {@link Connection}s * * @param defaultTransactionIsolation * the default "Transaction Isolation" setting for returned {@link Connection}s */ public void setDefaultTransactionIsolation(final int defaultTransactionIsolation) { this.defaultTransactionIsolation = defaultTransactionIsolation; } /** * Sets the disconnection SQL codes to ignore. * * @param disconnectionIgnoreSqlCodes * The collection of SQL State codes to be ignored. * @see #getDisconnectionIgnoreSqlCodes() * @throws IllegalArgumentException if any SQL state codes overlap with those in {@link #disconnectionSqlCodes}. * @since 2.13.0 */ public void setDisconnectionIgnoreSqlCodes(final Collection<String> disconnectionIgnoreSqlCodes) { Utils.checkSqlCodes(disconnectionIgnoreSqlCodes, this.disconnectionSqlCodes); this.disconnectionIgnoreSqlCodes = disconnectionIgnoreSqlCodes; } /** * Sets the disconnection SQL codes. * * @param disconnectionSqlCodes * The disconnection SQL codes. * @see #getDisconnectionSqlCodes() * @throws IllegalArgumentException if any SQL state codes overlap with those in {@link #disconnectionIgnoreSqlCodes}. * @since 2.1 */ public void setDisconnectionSqlCodes(final Collection<String> disconnectionSqlCodes) { Utils.checkSqlCodes(disconnectionSqlCodes, this.disconnectionIgnoreSqlCodes); this.disconnectionSqlCodes = disconnectionSqlCodes; } /** * Sets whether to set auto-commit on {@link #passivateObject(PooledObject)}. * * @param autoCommitOnReturn whether to set auto-commit. */ @Deprecated public void setEnableAutoCommitOnReturn(final boolean autoCommitOnReturn) { this.autoCommitOnReturn = autoCommitOnReturn; } /** * Sets whether connections created by this factory will fast fail validation. * * @param fastFailValidation true means connections created by this factory will fast fail validation * @see #isFastFailValidation() * @since 2.1 */ public void setFastFailValidation(final boolean fastFailValidation) { this.fastFailValidation = fastFailValidation; } /** * 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 maxConnDuration * The maximum lifetime in milliseconds. * @since 2.10.0 */ public void setMaxConn(final Duration maxConnDuration) { this.maxConnDuration = maxConnDuration; } /** * 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. * @deprecated Use {@link #setMaxConn(Duration)}. */ @Deprecated public void setMaxConnLifetimeMillis(final long maxConnLifetimeMillis) { this.maxConnDuration = Duration.ofMillis(maxConnLifetimeMillis); } /** * Sets the maximum number of open prepared statements. * * @param maxOpenPreparedStatements * The maximum number of open prepared statements. */ public void setMaxOpenPreparedStatements(final int maxOpenPreparedStatements) { this.maxOpenPreparedStatements = maxOpenPreparedStatements; } /** * Deprecated due to typo in method name. * * @param maxOpenPreparedStatements * The maximum number of open prepared statements. * @deprecated Use {@link #setMaxOpenPreparedStatements(int)}. */ @Deprecated // Due to typo in method name. public void setMaxOpenPrepatedStatements(final int maxOpenPreparedStatements) { setMaxOpenPreparedStatements(maxOpenPreparedStatements); } /** * 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 synchronized void setPool(final ObjectPool<PoolableConnection> pool) { if (null != this.pool && pool != this.pool) { Utils.closeQuietly(this.pool); } this.pool = pool; } /** * Sets whether to pool statements. * * @param poolStatements whether to pool statements. */ public void setPoolStatements(final boolean poolStatements) { this.poolStatements = poolStatements; } /** * Sets whether to rollback on return. * * @param rollbackOnReturn whether to rollback on return. */ public void setRollbackOnReturn(final boolean rollbackOnReturn) { this.rollbackOnReturn = rollbackOnReturn; } /** * 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; } /** * Sets the validation query timeout, the amount of time, 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 validationQueryTimeoutDuration new validation query timeout duration. * @since 2.10.0 */ public void setValidationQueryTimeout(final Duration validationQueryTimeoutDuration) { this.validationQueryTimeoutDuration = validationQueryTimeoutDuration; } /** * 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 * @deprecated {@link #setValidationQueryTimeout(Duration)}. */ @Deprecated public void setValidationQueryTimeout(final int validationQueryTimeoutSeconds) { this.validationQueryTimeoutDuration = Duration.ofSeconds(validationQueryTimeoutSeconds); } /** * Validates the given connection if it is open. * * @param conn the connection to validate. * @throws SQLException if the connection is closed or validate fails. */ public void validateConnection(final PoolableConnection conn) throws SQLException { if (conn.isClosed()) { throw new SQLException("validateConnection: connection closed"); } conn.validate(validationQuery, validationQueryTimeoutDuration); } private void validateLifetime(final PooledObject<PoolableConnection> p) throws LifetimeExceededException { Utils.validateLifetime(p, maxConnDuration); } @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; } } }
Detected license expression
apache-2.0
Detected license expression (SPDX)
Apache-2.0
Percentage of license text
4.45
Copyrights

      
    
Holders

      
    
Authors

      
    
License detections License expression License expression SPDX
apache_2_0-eb6b5ae0-4f88-4e9b-d67c-c6c8e733b1cd apache-2.0 Apache-2.0
URL Start line End line
https://www.apache.org/licenses/LICENSE-2.0 9 9