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);
     }
 
     /**

Reply via email to