Issue Details (XML | Word | Printable)

Key: DBCP-11
Type: Bug Bug
Status: Closed Closed
Resolution: Fixed
Priority: Major Major
Assignee: Unassigned
Reporter: Alexander Rupsch
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Commons Dbcp

[dbcp] stmt.getConnection() != Connection used to create the statement

Created: 08/Aug/05 08:38 PM   Updated: 25/Mar/08 08:11 AM
Return to search
Component/s: None
Affects Version/s: 1.2
Fix Version/s: 1.3

Time Tracking:
Not Specified

File Attachments:
  Size
Text File Licensed for inclusion in ASF works back-pointers.patch 2007-07-18 07:27 PM Dain Sundstrom 21 kB
Environment:
Operating System: other
Platform: All

Bugzilla Id: 36077
Resolution Date: 21/Jul/07 03:48 PM


 Description  « Hide
Hi,

I'm not an expert in implementing connection pools or jdbc itself. But shouldn't
the following code work?

Connection con = pool.getConnection()
PreparedStatement ps = con.prepareStatement()

con.equals(ps.getConnection) // returns false!

Ok, I don't need it to be equal, but the following also does not work:

ps.getConnection().close()
con.isClosed() // is false!!!

That means, if I have a Statment and want to close its connection, I have to
remember the conncetion. Is that the requested behavior? Because of this my pool
is running over.

The java.sql API says that Statment.getConnection() has to be the connection
which created the statement.



 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
Phil Steitz added a comment - 25/Sep/06 05:25 AM
Changing the fix version to 1.3. We may in fact decide on WONTFIX eventually, but I want to hold off on that judgement until we have reworked close() systematically.

If we interpret the spec to mean that Statment.getConnection() has to return the physical connection that created the statement, this is in general not going to be equal to the connection object that the user has a reference to and may also be open when the user's connection is closed.


Henri Yandell added a comment - 12/Mar/07 11:44 PM
My vote (with a few minutes thought) is that the Statements should be returning the Connection they came from and not the underlying physical connection. ie) We should change things.

Dain Sundstrom added a comment - 18/Jul/07 07:27 PM
This patch assures that all all returned Statements, PreparedStatements, CallableStatements and ResultSets are wrapped with a delegating object, which already properly handle the back pointers for Connection and Statement. This patch includes an extensive test to assure that the same object used to create the statement or result set is returned from either the getConnection() or getStatementMethod().

Phil Steitz added a comment - 21/Jul/07 03:48 PM
Patch applied. Thanks.