Permalink
Browse files

LocalDataSourceConnectionProvider checks against SmartDataSource befo…

…re closing a Connection

Issue: SPR-9978
  • Loading branch information...
jhoeller committed Nov 8, 2012
1 parent 4ed9aba commit d6e1a4a26a4bb583f2da3e20c5eda30ec995b5fb
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2010 the original author or authors.
+ * Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -316,7 +316,6 @@ public static void doReleaseConnection(Connection con, DataSource dataSource) th
if (con == null) {
return;
}
-
if (dataSource != null) {
ConnectionHolder conHolder = (ConnectionHolder) TransactionSynchronizationManager.getResource(dataSource);
if (conHolder != null && connectionEquals(conHolder, con)) {
@@ -325,11 +324,20 @@ public static void doReleaseConnection(Connection con, DataSource dataSource) th
return;
}
}
+ logger.debug("Returning JDBC Connection to DataSource");
+ doCloseConnection(con, dataSource);
+ }
- // Leave the Connection open only if the DataSource is our
- // special SmartDataSoruce and it wants the Connection left open.
+ /**
+ * Close the Connection, unless a {@link SmartDataSource} doesn't want us to.
+ * @param con the Connection to close if necessary
+ * @param dataSource the DataSource that the Connection was obtained from
+ * @throws SQLException if thrown by JDBC methods
+ * @see Connection#close()
+ * @see SmartDataSource#shouldClose(Connection)
+ */
+ public static void doCloseConnection(Connection con, DataSource dataSource) throws SQLException {
if (!(dataSource instanceof SmartDataSource) || ((SmartDataSource) dataSource).shouldClose(con)) {
- logger.debug("Returning JDBC Connection to DataSource");
con.close();
}
}
@@ -1,5 +1,5 @@
/*
- * Copyright 2002-2009 the original author or authors.
+ * Copyright 2002-2012 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -25,6 +25,8 @@
import org.hibernate.connection.ConnectionProvider;
import org.hibernate.util.JDBCExceptionReporter;
+import org.springframework.jdbc.datasource.DataSourceUtils;
+
/**
* Hibernate connection provider for local DataSource instances
* in an application context. This provider will be used if
@@ -87,12 +89,12 @@ public Connection getConnection() throws SQLException {
}
/**
- * This implementation simply calls <code>Connection.close</code>.
- * @see java.sql.Connection#close()
+ * This implementation calls {@link DataSourceUtils#doCloseConnection},
+ * checking against a {@link org.springframework.jdbc.datasource.SmartDataSource}.
*/
public void closeConnection(Connection con) throws SQLException {
try {
- con.close();
+ DataSourceUtils.doCloseConnection(con, this.dataSourceToUse);
}
catch (SQLException ex) {
JDBCExceptionReporter.logExceptions(ex);

0 comments on commit d6e1a4a

Please sign in to comment.