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");