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


The following commit(s) were added to refs/heads/master by this push:
     new 14790b20 [DBCP-473] Datasource bean creation failed due to mismatched 
return type of setter and getter for connectionInitSqls in BasicDataSource
14790b20 is described below

commit 14790b2082d63b4f8556841999f2527203678651
Author: Gary Gregory <[email protected]>
AuthorDate: Thu Feb 29 14:59:31 2024 -0500

    [DBCP-473] Datasource bean creation failed due to mismatched return type
    of setter and getter for connectionInitSqls in BasicDataSource
    
    Add BasicDataSource.setConnectionInitSqls(List<String>)
---
 pom.xml                                            |  5 ++-
 src/changes/changes.xml                            |  3 +-
 .../org/apache/commons/dbcp2/BasicDataSource.java  | 45 ++++++++--------------
 .../commons/dbcp2/BasicDataSourceFactory.java      |  7 ++--
 .../apache/commons/dbcp2/TestBasicDataSource.java  | 17 +++++++-
 5 files changed, 39 insertions(+), 38 deletions(-)

diff --git a/pom.xml b/pom.xml
index 08367233..9dc92f33 100644
--- a/pom.xml
+++ b/pom.xml
@@ -26,7 +26,7 @@
   </parent>
   <modelVersion>4.0.0</modelVersion>
   <artifactId>commons-dbcp2</artifactId>
-  <version>2.11.1-SNAPSHOT</version>
+  <version>2.12.0-SNAPSHOT</version>
   <name>Apache Commons DBCP</name>
 
   <inceptionYear>2001</inceptionYear>
@@ -304,7 +304,8 @@
     <commons.rc.version>RC1</commons.rc.version>
     <commons.module.name>org.apache.commons.dbcp2</commons.module.name>
     
-    <commons.release.version>2.11.1</commons.release.version>
+    <commons.release.version>2.12.0</commons.release.version>
+    <commons.release.next>2.12.1</commons.release.next>
     <commons.release.desc>for JDBC 4.2 on Java 8</commons.release.desc>
     <commons.release.hash>sha512</commons.release.hash>
     
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index bce1d49c..63ddbbf4 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -68,10 +68,11 @@ The <action> type attribute can be add,update,fix,remove.
       <action type="fix" issue="DBCP-596" dev="ggregory" due-to="Aapo 
Haapanen, Gary Gregory">PoolingConnection.toString() causes 
StackOverflowError.</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory, Rémy 
Maucherat">PooledConnectionImpl.destroyObject(PStmtKey, PooledObject) can throw 
NullPointerException #312.</action>
       <action type="fix" dev="ggregory" due-to="Gary Gregory, Rémy 
Maucherat">PoolingConnection.destroyObject(PStmtKey, PooledObject) can throw 
NullPointerException #312.</action>
-      <action type="fix" issue="DBCP-477" dev="ggregory" due-to="Steve Cohen, 
Gary Gregory">Fix examples in 
src/main/java/org/apache/commons/dbcp2/package-info.java.</action>
+      <action type="fix" issue="DBCP-477" dev="ggregory" due-to="Mubasher 
Usman, Gary Gregory">Fix examples in 
src/main/java/org/apache/commons/dbcp2/package-info.java.</action>
       <!-- ADD -->
       <action type="add" dev="ggregory" due-to="Gary Gregory">Add property 
project.build.outputTimestamp for build reproducibility.</action>
       <action type="add" dev="ggregory" due-to="Heewon Lee">Add null guards in 
DelegatingDatabaseMetaData constructor #352.</action>
+      <action type="add" issue="DBCP-473" dev="ggregory" due-to="Steve Cohen, 
Gary Gregory">Data source bean creation failed due to mismatched return type of 
setter and getter for connectionInitSqls in BasicDataSource: Add 
BasicDataSource.setConnectionInitSqls(List).</action>
       <!-- UPDATE -->
       <action type="update" dev="psteitz" due-to="cortlepp-intershop">Use 
ReentrantLock in PoolableConnection.close, #591</action>
       <action type="update" dev="ggregory" due-to="Gary Gregory">Bump 
commons-lang3 from 3.13.0 to 3.14.0.</action>
diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java 
b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
index 48b2fedb..ed58c7ae 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSource.java
@@ -1783,7 +1783,7 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
     }
 
     /**
-     * Sets the list of SQL statements to be executed when a physical 
connection is first created.
+     * Sets the collection of SQL statements to be executed when a physical 
connection is first created.
      * <p>
      * 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: <code>getConnection, 
setLogwriter,
@@ -1793,25 +1793,26 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
      * @param connectionInitSqls Collection of SQL statements to execute on 
connection creation
      */
     public void setConnectionInitSqls(final Collection<String> 
connectionInitSqls) {
-//        if (connectionInitSqls != null && !connectionInitSqls.isEmpty()) {
-//            ArrayList<String> newVal = null;
-//            for (final String s : connectionInitSqls) {
-//                if (!isEmpty(s)) {
-//                    if (newVal == null) {
-//                        newVal = new ArrayList<>();
-//                    }
-//                    newVal.add(s);
-//                }
-//            }
-//            this.connectionInitSqls = newVal;
-//        } else {
-//            this.connectionInitSqls = null;
-//        }
         final List<String> collect = Utils.isEmpty(connectionInitSqls) ? null
                 : connectionInitSqls.stream().filter(s -> 
!isEmpty(s)).collect(Collectors.toList());
         this.connectionInitSqls = Utils.isEmpty(collect) ? null : collect;
     }
 
+    /**
+     * Sets the list of SQL statements to be executed when a physical 
connection is first created.
+     * <p>
+     * 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: <code>getConnection, 
setLogwriter,
+     * setLoginTimeout, getLoginTimeout, getLogWriter.</code>
+     * </p>
+     *
+     * @param connectionInitSqls List of SQL statements to execute on 
connection creation
+     * @since 2.12.0
+     */
+    public void setConnectionInitSqls(final List<String> connectionInitSqls) {
+        setConnectionInitSqls((Collection<String>) connectionInitSqls);
+    }
+
     private <T> void setConnectionPool(final 
BiConsumer<GenericObjectPool<PoolableConnection>, T> consumer, final T object) {
         if (connectionPool != null) {
             consumer.accept(connectionPool, object);
@@ -1965,20 +1966,6 @@ public class BasicDataSource implements DataSource, 
BasicDataSourceMXBean, MBean
      * @since 2.1
      */
     public void setDisconnectionSqlCodes(final Collection<String> 
disconnectionSqlCodes) {
-//        if (disconnectionSqlCodes != null && 
!disconnectionSqlCodes.isEmpty()) {
-//            HashSet<String> newVal = null;
-//            for (final String s : disconnectionSqlCodes) {
-//                if (!isEmpty(s)) {
-//                    if (newVal == null) {
-//                        newVal = new HashSet<>();
-//                    }
-//                    newVal.add(s);
-//                }
-//            }
-//            this.disconnectionSqlCodes = newVal;
-//        } else {
-//            this.disconnectionSqlCodes = null;
-//        }
         final Set<String> collect = Utils.isEmpty(disconnectionSqlCodes) ? null
                 : disconnectionSqlCodes.stream().filter(s -> 
!isEmpty(s)).collect(Collectors.toSet());
         this.disconnectionSqlCodes = Utils.isEmpty(collect) ? null : collect;
diff --git a/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java 
b/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
index d7d47f68..a28b21bf 100644
--- a/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
+++ b/src/main/java/org/apache/commons/dbcp2/BasicDataSourceFactory.java
@@ -24,7 +24,6 @@ import java.sql.SQLException;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Arrays;
-import java.util.Collection;
 import java.util.Enumeration;
 import java.util.Hashtable;
 import java.util.LinkedHashMap;
@@ -339,7 +338,7 @@ public class BasicDataSourceFactory implements 
ObjectFactory {
     }
 
     /**
-     * Parse list of property values from a delimited string
+     * Parses list of property values from a delimited string
      *
      * @param value
      *            delimited list of values
@@ -347,9 +346,9 @@ public class BasicDataSourceFactory implements 
ObjectFactory {
      *            character used to separate values in the list
      * @return String Collection of values
      */
-    private static Collection<String> parseList(final String value, final char 
delimiter) {
+    private static List<String> parseList(final String value, final char 
delimiter) {
         final StringTokenizer tokenizer = new StringTokenizer(value, 
Character.toString(delimiter));
-        final Collection<String> tokens = new 
ArrayList<>(tokenizer.countTokens());
+        final List<String> tokens = new ArrayList<>(tokenizer.countTokens());
         while (tokenizer.hasMoreTokens()) {
             tokens.add(tokenizer.nextToken());
         }
diff --git a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java 
b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
index 9e0a06c1..47a6d580 100644
--- a/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
+++ b/src/test/java/org/apache/commons/dbcp2/TestBasicDataSource.java
@@ -35,6 +35,7 @@ import java.sql.SQLException;
 import java.time.Duration;
 import java.util.ArrayList;
 import java.util.Arrays;
+import java.util.Collection;
 import java.util.Properties;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -474,13 +475,18 @@ public class TestBasicDataSource extends 
TestConnectionPool {
 
     @Test
     public void testEmptyInitConnectionSql() throws Exception {
+        // List
         ds.setConnectionInitSqls(Arrays.asList("", "   "));
         assertNotNull(ds.getConnectionInitSqls());
         assertEquals(0, ds.getConnectionInitSqls().size());
-
+        // null
         ds.setConnectionInitSqls(null);
         assertNotNull(ds.getConnectionInitSqls());
         assertEquals(0, ds.getConnectionInitSqls().size());
+        // Collection
+        ds.setConnectionInitSqls((Collection<String>) Arrays.asList("", "   
"));
+        assertNotNull(ds.getConnectionInitSqls());
+        assertEquals(0, ds.getConnectionInitSqls().size());
     }
 
     @Test
@@ -576,12 +582,19 @@ public class TestBasicDataSource extends 
TestConnectionPool {
     }
 
     @Test
-    public void testInvalidConnectionInitSql() {
+    public void testInvalidConnectionInitSqlList() {
         ds.setConnectionInitSqls(Arrays.asList("SELECT 1", "invalid"));
         final SQLException e = assertThrows(SQLException.class, 
ds::getConnection);
         assertTrue(e.toString().contains("invalid"));
     }
 
+    @Test
+    public void testInvalidConnectionInitSqlCollection() {
+        ds.setConnectionInitSqls((Collection<String>) Arrays.asList("SELECT 
1", "invalid"));
+        final SQLException e = assertThrows(SQLException.class, 
ds::getConnection);
+        assertTrue(e.toString().contains("invalid"));
+    }
+
     @Test
     public void testInvalidValidationQuery() {
         ds.setValidationQuery("invalid");

Reply via email to