Leveraging Lambda for JDBC 4.2

Mark Rotteveel mark at lawinegevaar.nl
Thu Dec 6 10:37:36 PST 2012


On 6-12-2012 18:40, Lance Andersen - Oracle wrote:
> Folks
>
> In order to make it a little easier for migration to the new JDBC releases I am planning to leverage default methods in Lambda.
>

>
> Optional methods will default to throwing a SQLFeatureNotSupportedException
>
> Required methods will default to throwing a UnsupportedOperationException allowing for this to be flagged by the JDBC test suite as a compliance issue
>
>
> Leveraging Lambda will allow existing code to compile on the new JDK without having to immediately add stubs or implementation.

For optional methods I like it, although I have some reservations. It 
makes creating a compliant driver easier, although as a driver developer 
it will make it harder to spot which optional method you forgot to 
implement (I just hope the IDEs with Java 8 support will support 
warnings for not overriding a default method).

However for required methods I think it is a really bad idea. One of the 
nice things about interfaces is that having a required method not 
implemented will be immediately and forcefully signaled to the driver 
developer by a compile time error (both in the IDE and at building the 
driver). Introducing a default method that throws 
UnsupportedOperationException will remove those handy signals.

I also think throwing UnsupportedOperationException doesn't fit with 
other use in Java. In general this exception is used either as an 
equivalent of SQLFeatureNotSupportedException, eg in the collections 
framework, or if some state prevents the operation, for example (in AWT) 
to signal that something cannot be done because of missing keyboard, 
display or mouse (HeadlessException), or in NIO for readonly 
buffers/filesystems (ReadOnlyBufferException cq 
ReadOnlyFileSystemException).

On the other hand: not having a method implemented in a class which was 
compiled to an earlier version of the interface is allowed until you 
actually call that method (which will then throw an 
AbstractMethodError), which to be honest is about as informative as an 
UnsupportedOperationException. Replacing compile time errors with errors 
in the JDBC testsuite is IMHO bad.

And now we are on the JDBC testsuite: I don't know if you actually ever 
tried to get your hands on a recent JDBC testsuite, but as an 
independent, open source developer it is next to impossible. Any 
potential source for more information either leads to dead links on 
sun.com which redirect to useless or general links on oracle.com, or to 
sites that say you can get access as a non-profit, but then don't 
actually bother to say how (eg for the Java 7 SE TCK, see 
http://jcp.org/aboutJava/communityprocess/final/jsr336/index.html).

Mark
-- 
Mark Rotteveel


More information about the jdbc-spec-discuss mailing list