How can I solve Modularity related issue ?

Mandy Chung mandy.chung at oracle.com
Sat Sep 29 00:35:01 UTC 2018



On 9/28/18 1:59 AM, Alan Bateman wrote:
> On 28/09/2018 08:28, Ichiroh Takiguchi wrote:
>> Hello.
>>
>> One of JDBC application with JavaDB did not work on JDK12.
>> Following exception happened:
>>   java.sql.SQLException: No suitable driver found for jdbc:derby:xxxxxx
>>
>> I assume, this issue related Modularity feature...
>> I could not solve this issue by myself.
> I suspect this is related to the de-privileging of the java.sql.rowset 
> module in JDK 9. The java.sql.rowset module is mapped to the platform 
> class loader whereas historically the types in this module were 
> defined by the boot class loader. This is relevant because 
> java.sql.rowset is making use of the java.sql.DriverManager (in the 
> java.sql module) and DriverManager is caller sensitive so it sees the 
> caller coming from java.sql.rowset. This is problematic because the 
> JDBC driver is on the class path and is not visible to the caller's 
> class loader. The visibility check has always been in JDBC and I 
> suspect this usage in the JDBC Rowset implementation only worked by 
> accident in the past because DriverManager used the TCCL when called 
> from code defined to the bootstrap class loader. I'm sure Lance will 
> jump in but all previous investigations into changing behavior going 
> back 20+ has come to nothing due to compatibility concerns.
>

It does look like related to the de-privileging of java.sql.rowset 
module.  JDBC rowset implementation just happened to work in the past as 
it was defined to the bootstrap class loader.

I have created JBS issue for this:
    https://bugs.openjdk.java.net/browse/JDK-8211295

Mandy


More information about the core-libs-dev mailing list