[hibernate-dev] Hibernate support for JDBC drivers targeting multiple JVM versions

Bregler, Jonathan jonathan.bregler at sap.com
Mon Mar 12 11:27:40 EDT 2018


Hi,

in a recent version of the HANA JDBC driver the new JDBC 4.3 features that came with Java 9 have been implemented. The driver itself is still compiled for Java 7 (javac -target 1.7). So the driver should also be usable with a JVM 7 or 8. This works as expected until Java reflection is used to determine, for example, the existence of a method on the connection class. Hibernate uses this approach in org.hibernate.engine.jdbc.env.internal.DefaultSchemaNameResolver#determineAppropriateResolverDelegate to determine if the connection class implements the #getSchema method. In this case the JVM tries to load the entire connection class including the non-existing new interface java.sql.ShardingKey. The result is a java.lang.NoClassDefFoundError being thrown which isn't caught anywhere causing the Hibernate bootstrapping process to fail. I've attached a sample stack trace to this mail.

Situations like this can also occur in other places, for example, when getting a connection from a Hikari connection pool.

My question is now how you think Hibernate should handle situations like this. Do you see it as a JDBC driver issue? Should Hibernate ignore the error and continue with a conservative guess if possible (e.g. assume that the connection class doesn't implement #getSchema)?

Thanks,
Jonathan
-------------- next part --------------
An embedded and charset-unspecified text was scrubbed...
Name: Stack Trace.txt
Url: http://lists.jboss.org/pipermail/hibernate-dev/attachments/20180312/825354f4/attachment-0001.txt 


More information about the hibernate-dev mailing list