Repository: camel Updated Branches: refs/heads/camel-2.14.x 2f238cc04 -> 888c104eb refs/heads/master 905461d6a -> 8a5a0cb73
CAMEL-8153: Fixed potential connection leak when using streamList with camel-jdbc. Thanks to Konstantin V. Salikhov for the patch. Project: http://git-wip-us.apache.org/repos/asf/camel/repo Commit: http://git-wip-us.apache.org/repos/asf/camel/commit/8a5a0cb7 Tree: http://git-wip-us.apache.org/repos/asf/camel/tree/8a5a0cb7 Diff: http://git-wip-us.apache.org/repos/asf/camel/diff/8a5a0cb7 Branch: refs/heads/master Commit: 8a5a0cb731f1b8a772612005f4baeeb1a7d3fb07 Parents: 905461d Author: Claus Ibsen <[email protected]> Authored: Wed Dec 17 08:05:22 2014 +0100 Committer: Claus Ibsen <[email protected]> Committed: Wed Dec 17 08:05:22 2014 +0100 ---------------------------------------------------------------------- .../camel/component/jdbc/JdbcProducer.java | 19 ++++++++++--------- .../camel/component/jdbc/ResultSetIterator.java | 4 ++-- 2 files changed, 12 insertions(+), 11 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/camel/blob/8a5a0cb7/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java ---------------------------------------------------------------------- diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java index d78e9c7..13ecade 100644 --- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java +++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/JdbcProducer.java @@ -163,7 +163,7 @@ public class JdbcProducer extends DefaultProducer { boolean stmtExecutionResult = ps.execute(); if (stmtExecutionResult) { rs = ps.getResultSet(); - shouldCloseResources = setResultSet(exchange, rs); + shouldCloseResources = setResultSet(exchange, conn, rs); } else { int updateCount = ps.getUpdateCount(); // preserve headers @@ -173,7 +173,7 @@ public class JdbcProducer extends DefaultProducer { } if (shouldRetrieveGeneratedKeys) { - setGeneratedKeys(exchange, ps.getGeneratedKeys()); + setGeneratedKeys(exchange, conn, ps.getGeneratedKeys()); } } finally { if (shouldCloseResources) { @@ -219,7 +219,7 @@ public class JdbcProducer extends DefaultProducer { if (stmtExecutionResult) { rs = stmt.getResultSet(); - shouldCloseResources = setResultSet(exchange, rs); + shouldCloseResources = setResultSet(exchange, conn, rs); } else { int updateCount = stmt.getUpdateCount(); // preserve headers @@ -229,7 +229,7 @@ public class JdbcProducer extends DefaultProducer { } if (shouldRetrieveGeneratedKeys) { - setGeneratedKeys(exchange, stmt.getGeneratedKeys()); + setGeneratedKeys(exchange, conn, stmt.getGeneratedKeys()); } } finally { if (shouldCloseResources) { @@ -285,12 +285,13 @@ public class JdbcProducer extends DefaultProducer { * - {@link JdbcConstants#JDBC_GENERATED_KEYS_ROW_COUNT} : the row count of generated keys * - {@link JdbcConstants#JDBC_GENERATED_KEYS_DATA} : the generated keys data * - * @param exchange The exchange where to store the generated keys + * @param exchange The exchange where to store the generated keys + * @param conn Current JDBC connection * @param generatedKeys The result set containing the generated keys */ - protected void setGeneratedKeys(Exchange exchange, ResultSet generatedKeys) throws SQLException { + protected void setGeneratedKeys(Exchange exchange, Connection conn, ResultSet generatedKeys) throws SQLException { if (generatedKeys != null) { - ResultSetIterator iterator = new ResultSetIterator(generatedKeys, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics()); + ResultSetIterator iterator = new ResultSetIterator(conn, generatedKeys, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics()); List<Map<String, Object>> data = extractRows(iterator); exchange.getOut().setHeader(JdbcConstants.JDBC_GENERATED_KEYS_ROW_COUNT, data.size()); @@ -303,10 +304,10 @@ public class JdbcProducer extends DefaultProducer { * * @return whether to close resources */ - protected boolean setResultSet(Exchange exchange, ResultSet rs) throws SQLException { + protected boolean setResultSet(Exchange exchange, Connection conn, ResultSet rs) throws SQLException { boolean answer = true; - ResultSetIterator iterator = new ResultSetIterator(rs, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics()); + ResultSetIterator iterator = new ResultSetIterator(conn, rs, getEndpoint().isUseJDBC4ColumnNameAndLabelSemantics()); // preserve headers exchange.getOut().getHeaders().putAll(exchange.getIn().getHeaders()); http://git-wip-us.apache.org/repos/asf/camel/blob/8a5a0cb7/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java ---------------------------------------------------------------------- diff --git a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java index caf3ea8..8055550 100644 --- a/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java +++ b/components/camel-jdbc/src/main/java/org/apache/camel/component/jdbc/ResultSetIterator.java @@ -43,10 +43,10 @@ public class ResultSetIterator implements Iterator<Map<String, Object>> { private final Column[] columns; private final AtomicBoolean closed = new AtomicBoolean(); - public ResultSetIterator(ResultSet resultSet, boolean isJDBC4) throws SQLException { + public ResultSetIterator(Connection conn, ResultSet resultSet, boolean isJDBC4) throws SQLException { this.resultSet = resultSet; this.statement = this.resultSet.getStatement(); - this.connection = this.statement.getConnection(); + this.connection = conn; ResultSetMetaData metaData = resultSet.getMetaData(); columns = new Column[metaData.getColumnCount()];
