[
http://issues.apache.org/jira/browse/DERBY-1095?page=comments#action_12370305 ]
Daniel John Debrunner commented on DERBY-1095:
----------------------------------------------
Knut wrote:
> In the client driver, NetConnection maintains a WeakHashMap with all
> open statements. When the connection is marked as closed, it will call
> markClosed() on the open statements. I'm afraid I don't see why it's a
> bad idea to do the same in EmbedConnection. Could you please explain?
Two reasons:
1) Statement resources are already closed correctly on a connection.close()
so I don't know what purpose this additional code is meant to solve.
2) Performance overhead due to storage and additional object creation and
garbage collection is a concern. Maybe if it's only at the
Statement level it's not too bad a concern, but there would have to be
some additional logic to handle server-side JDBC. In the server-side case
I don't think you want to set up the WeakHashMap, if you did the
performance overhead would be a concern, because with server-side
logic there is no way for the application to hang onto statements for
multiple applications like a JDBC client program can. Also J2EE
applications tend to be stateless and therefore incur Statement creation
on each execution.
For ResultSet.isClosed() a simple way of implementing it would be:
if (isClosed)
return true;
try {
checkExecStatus();
return false;
} catch (SQLException sqle)
{
return isClosed;
}
A similar approach would work for Statement.isClosed.
> Closing an embedded connection does not seem to close associated
> EmbedStatements
> --------------------------------------------------------------------------------
>
> Key: DERBY-1095
> URL: http://issues.apache.org/jira/browse/DERBY-1095
> Project: Derby
> Type: Bug
> Components: JDBC
> Versions: 10.2.0.0
> Reporter: Kristian Waagan
> Assignee: Daniel John Debrunner
> Priority: Minor
> Attachments: Derby1095Repro.java
>
> Closing an embedded connection (calling EmbedConnection.close()) does not
> seem to close associated EmbedStatements.
> The severity of the bug is not determined. The least severe case is that the
> internal EmbedStatement variable 'active' is not updated accordingly, the
> most severe case is that the the resources bound to EmbedStatement will not
> be viable for garbage collection until the EmbedStatement itself is (if user
> keeps references to it).
> If methods on the statement are called, Derby will correctly throw an
> NoCurrentConnection exception, but the close() method is still never called
> automatically.
> The problem also seem to extend down to ResultSet.isClosed(), but this is
> probably due to the bug in EmbedStatement.
> Problem detected while fixing DERBY-953; implement Statement.isClosed().
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira