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 Mon, 30 Jan 2006 11:11:51 GMT

>
>- If I have this right, the exceptionFactory doesn't get initialized until the first instance
of InternalDriver() is created.  Isn't it possible that getExceptionFactory() will return
null?  Doesn't this mean that at some point during pre-boot I'll get a NullPointerException
if I try to throw a SQLException?  Is this something that could happen, or are all SQLExceptions
guaranteed to be thrown only after at least one instance of InternalDriver has been created?
>  
>
No the boot method is called from the static initializer of 
EmbeddedDriver, so the factory will get initialized when the driver 
class is loaded. I was under assumption that there is no situation which 
may cause SQLException before the driver is booted. Looking at the code 
it appears the SQLException is thrown only after the boot is successful 
and all the method coming in the execution chain of boot throw Standard 
Exception.
Once the boot method is call the exception factory will be available to 
all the classes even if the boot fails.

>Perhaps this is not an issue, but the pattern I proposed in my email does not have this
potential timing bug, where the exception factory is created as part of the static initializer
for the InternalDriver class.  I also question whether it needs to be part of the InternalDriver
at all,  looking at the code, there appears to be no dependency on the data or behavior of
InternalDriver.   Usually for a singleton pattern like this you see something like this (independent
from InternalDriver, and with no dependencies on boot timing):
>
>  
>
I had used a similar approach in my first patch (checking for jvm 
version). But checking jvm info wasn't a good idea (its already been 
checked while loading the Driver), so Dan suggested to use the 
InternalDriver to get the correct Exception Factory.
Using InternalDriver for getting the exception factory has added 
advantage of not using reflection to load and instantiate exception 
factory which I will need if I try to check jvm version and create 
ExceptionFactory for that version.

anurag

Mime
View raw message