You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2019/07/31 01:25:38 UTC
[commons-dbcp] 01/03: [DBCP-554]
org.apache.commons.dbcp2.PoolableCallableStatement.passivate() should close
ALL of its resources even when an exception occurs.
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 1918a4419cdb7a6776a8ec5121a070ea1f2277b9
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue Jul 30 21:12:03 2019 -0400
[DBCP-554]
org.apache.commons.dbcp2.PoolableCallableStatement.passivate() should
close ALL of its resources even when an exception occurs.
---
src/changes/changes.xml | 3 +++
.../commons/dbcp2/PoolableCallableStatement.java | 21 ++++++++++++++++-----
2 files changed, 19 insertions(+), 5 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 99132a4..66eb615 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -133,6 +133,9 @@ The <action> type attribute can be add,update,fix,remove.
<action dev="ggregory" type="update" issue="DBCP-553" due-to="Gary Gregory">
org.apache.commons.dbcp2.PoolablePreparedStatement.passivate() should close ALL of its resources even when an exception occurs.
</action>
+ <action dev="ggregory" type="update" issue="DBCP-554" due-to="Gary Gregory">
+ org.apache.commons.dbcp2.PoolableCallableStatement.passivate() should close ALL of its resources even when an exception occurs.
+ </action>
</release>
<release version="2.6.0" date="2019-02-14" description="This is a minor release, including bug fixes and enhancements.">
<action dev="chtompki" type="add" issue="DBCP-534" due-to="Peter Wicks">
diff --git a/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java b/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
index 717e7b2..8efcefd 100644
--- a/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
+++ b/src/main/java/org/apache/commons/dbcp2/PoolableCallableStatement.java
@@ -21,6 +21,7 @@ import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
+import java.util.ArrayList;
import java.util.List;
import org.apache.commons.pool2.KeyedObjectPool;
@@ -119,13 +120,23 @@ public class PoolableCallableStatement extends DelegatingCallableStatement {
// ResultSet's when it is closed.
// FIXME The PreparedStatement we're wrapping should handle this for us.
// See DBCP-10 for what could happen when ResultSets are closed twice.
- final List<AbandonedTrace> resultSets = getTrace();
- if (resultSets != null) {
- final ResultSet[] set = resultSets.toArray(new ResultSet[resultSets.size()]);
- for (final ResultSet element : set) {
- element.close();
+ final List<AbandonedTrace> resultSetList = getTrace();
+ if (resultSetList != null) {
+ final List<Exception> thrown = new ArrayList<>();
+ final ResultSet[] resultSets = resultSetList.toArray(new ResultSet[resultSetList.size()]);
+ for (final ResultSet resultSet : resultSets) {
+ if (resultSet != null) {
+ try {
+ resultSet.close();
+ } catch (Exception e) {
+ thrown.add(e);
+ }
+ }
}
clearTrace();
+ if (!thrown.isEmpty()) {
+ throw new SQLExceptionList(thrown);
+ }
}
super.passivate();