db-derby-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anurag Shekhar <Anurag.Shek...@Sun.COM>
Subject Re: [jira] Commented: (DERBY-819) Provide JDBC4 SQLException subclasses support in Embedded driver
Date Wed, 25 Jan 2006 13:29:04 GMT

>The use of InternalDriver.activeDriver() to obtain a factory exposes Derby to potential
NullPointerExceptions in a shutdown or error on boot situation. I see that you saw one in
your testing as you have a comment on that in the shutdown code.  Such NPEs will hide the
real error from users, making Derby harder to use.
>I think the solution is to move some of the code from java/engine/org/apache/derby/impl/jdbc/Util.java
to be factory methods  on InternalDriver. or methods on EmbedConnection or EmbedConnectionChild.
I think you will find that most, if not all, cases these static Util methods are called from
a JDBC implementation object which has a reference to its InternalDriver factory. Such a change
would then remove the need for special code in the shutdown case. Basically this move to a
factory based allocation for SQLException obejcts should make the Util class go away.
>Also the new patch is missing the test code.
I checked the classes calling using Util to get the SQLException either 
already have the reference of InternalDriver or they can be easily 
modified to have this reference. There appears to be 1 problem class 

EmbedResultSetMetaData is being instantiated staticly from many classes 
(eg  org.apache.derby.diag.StatementDuration, StatementCache). I am not 
sure if its safe to assume that InternalDriver variable will be 
initialized before these classes are loaded. Same problem will exist if 
we use EmbedConnection or EmbedConnectionChild for generating the exception.

Another potential place to convert the old exception to newer one was 
handleException in EmbedConnection. Most of the method use this method 
to do cleanup before throwing back the exception. But this won't handle 
connection related exception (connection doesn't exist, class 08)


View raw message