This is an automated email from the ASF dual-hosted git repository. ggregory pushed a commit to branch master in repository https://gitbox.apache.org/repos/asf/commons-dbcp.git
commit b954fc9321030e8fe2fad54839961c18218f86e9 Author: Gary Gregory <gardgreg...@gmail.com> AuthorDate: Sun Jul 3 13:05:41 2022 -0400 Refactor duplicate logic and throw SQLException instead of Exception in internal validateLifetime() methods. --- .../commons/dbcp2/PoolableConnectionFactory.java | 9 +-------- src/main/java/org/apache/commons/dbcp2/Utils.java | 13 +++++++++++++ .../dbcp2/datasources/CPDSConnectionFactory.java | 20 +++++++------------- .../datasources/KeyedCPDSConnectionFactory.java | 16 +++------------- 4 files changed, 24 insertions(+), 34 deletions(-) diff --git a/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java index 80aa601d..71aebbb4 100644 --- a/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/PoolableConnectionFactory.java @@ -20,7 +20,6 @@ import java.sql.Connection; import java.sql.SQLException; import java.sql.Statement; import java.time.Duration; -import java.time.Instant; import java.util.Collection; import java.util.Objects; import java.util.concurrent.atomic.AtomicLong; @@ -745,19 +744,13 @@ public class PoolableConnectionFactory implements PooledObjectFactory<PoolableCo } private void validateLifetime(final PooledObject<PoolableConnection> p) throws LifetimeExceededException { - if (maxConnDuration.compareTo(Duration.ZERO) > 0) { - final Duration lifetimeDuration = Duration.between(p.getCreateInstant(), Instant.now()); - if (lifetimeDuration.compareTo(maxConnDuration) > 0) { - throw new LifetimeExceededException(Utils.getMessage("connectionFactory.lifetimeExceeded", lifetimeDuration, maxConnDuration)); - } - } + Utils.validateLifetime(p, maxConnDuration); } @Override public boolean validateObject(final PooledObject<PoolableConnection> p) { try { validateLifetime(p); - validateConnection(p.getObject()); return true; } catch (final Exception e) { diff --git a/src/main/java/org/apache/commons/dbcp2/Utils.java b/src/main/java/org/apache/commons/dbcp2/Utils.java index 8caf10d1..afe64f51 100644 --- a/src/main/java/org/apache/commons/dbcp2/Utils.java +++ b/src/main/java/org/apache/commons/dbcp2/Utils.java @@ -21,11 +21,15 @@ import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import java.text.MessageFormat; +import java.time.Duration; +import java.time.Instant; import java.util.HashSet; import java.util.Properties; import java.util.ResourceBundle; import java.util.Set; +import org.apache.commons.pool2.PooledObject; + /** * Utility methods. * @@ -219,6 +223,15 @@ public final class Utils { return value == null ? null : String.valueOf(value); } + public static void validateLifetime(final PooledObject<?> p, final Duration maxDuration) throws LifetimeExceededException { + if (maxDuration.compareTo(Duration.ZERO) > 0) { + final Duration lifetimeDuration = Duration.between(p.getCreateInstant(), Instant.now()); + if (lifetimeDuration.compareTo(maxDuration) > 0) { + throw new LifetimeExceededException(Utils.getMessage("connectionFactory.lifetimeExceeded", lifetimeDuration, maxDuration)); + } + } + } + private Utils() { // not instantiable } diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java index 9962fe98..7907ef20 100644 --- a/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/datasources/CPDSConnectionFactory.java @@ -21,7 +21,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.time.Duration; -import java.time.Instant; import java.util.Collections; import java.util.Map; import java.util.Set; @@ -176,7 +175,7 @@ class CPDSConnectionFactory } @Override - public void activateObject(final PooledObject<PooledConnectionAndInfo> p) throws Exception { + public void activateObject(final PooledObject<PooledConnectionAndInfo> p) throws SQLException { validateLifetime(p); } @@ -304,10 +303,6 @@ class CPDSConnectionFactory } } - // *********************************************************************** - // java.sql.ConnectionEventListener implementation - // *********************************************************************** - @Override public synchronized PooledObject<PooledConnectionAndInfo> makeObject() { final PooledConnectionAndInfo pci; @@ -334,6 +329,10 @@ class CPDSConnectionFactory return new DefaultPooledObject<>(pci); } + // *********************************************************************** + // java.sql.ConnectionEventListener implementation + // *********************************************************************** + @Override public void passivateObject(final PooledObject<PooledConnectionAndInfo> p) throws Exception { validateLifetime(p); @@ -434,13 +433,8 @@ class CPDSConnectionFactory return builder.toString(); } - private void validateLifetime(final PooledObject<PooledConnectionAndInfo> pooledObject) throws Exception { - if (maxConnDuration.compareTo(Duration.ZERO) > 0) { - final Duration lifetimeDuration = Duration.between(pooledObject.getCreateInstant(), Instant.now()); - if (lifetimeDuration.compareTo(maxConnDuration) > 0) { - throw new Exception(Utils.getMessage("connectionFactory.lifetimeExceeded", lifetimeDuration, maxConnDuration)); - } - } + private void validateLifetime(final PooledObject<PooledConnectionAndInfo> p) throws SQLException { + Utils.validateLifetime(p, maxConnDuration); } @Override diff --git a/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java b/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java index e2c3f991..3631a98d 100644 --- a/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java +++ b/src/main/java/org/apache/commons/dbcp2/datasources/KeyedCPDSConnectionFactory.java @@ -21,7 +21,6 @@ import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.time.Duration; -import java.time.Instant; import java.util.Collections; import java.util.Map; import java.util.Set; @@ -112,7 +111,7 @@ class KeyedCPDSConnectionFactory implements KeyedPooledObjectFactory<UserPassKey } @Override - public void activateObject(final UserPassKey key, final PooledObject<PooledConnectionAndInfo> p) throws Exception { + public void activateObject(final UserPassKey key, final PooledObject<PooledConnectionAndInfo> p) throws SQLException { validateLifetime(p); } @@ -224,10 +223,6 @@ class KeyedCPDSConnectionFactory implements KeyedPooledObjectFactory<UserPassKey } } - // *********************************************************************** - // java.sql.ConnectionEventListener implementation - // *********************************************************************** - /** * Creates a new {@code PooledConnectionAndInfo} from the given {@code UserPassKey}. * @@ -317,13 +312,8 @@ class KeyedCPDSConnectionFactory implements KeyedPooledObjectFactory<UserPassKey this.pool = pool; } - private void validateLifetime(final PooledObject<PooledConnectionAndInfo> p) throws Exception { - if (maxConnLifetime.compareTo(Duration.ZERO) > 0) { - final Duration lifetimeDuration = Duration.between(p.getCreateInstant(), Instant.now()); - if (lifetimeDuration.compareTo(maxConnLifetime) > 0) { - throw new Exception(Utils.getMessage("connectionFactory.lifetimeExceeded", lifetimeDuration, maxConnLifetime)); - } - } + private void validateLifetime(final PooledObject<PooledConnectionAndInfo> pooledObject) throws SQLException { + Utils.validateLifetime(pooledObject, maxConnLifetime); } /**