You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@drill.apache.org by "Marc Prud'hommeaux (JIRA)" <ji...@apache.org> on 2018/04/23 20:40:00 UTC

[jira] [Commented] (DRILL-6349) Drill JDBC driver fails on Java 1.9+ with NoClassDefFoundError: sun/misc/VM

    [ https://issues.apache.org/jira/browse/DRILL-6349?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16448832#comment-16448832 ] 

Marc Prud'hommeaux commented on DRILL-6349:
-------------------------------------------

This patch may be sufficient to get the driver to load on Java 9+:

https://github.com/apache/drill/compare/master...mprudhom:patch-1

> Drill JDBC driver fails on Java 1.9+ with NoClassDefFoundError: sun/misc/VM
> ---------------------------------------------------------------------------
>
>                 Key: DRILL-6349
>                 URL: https://issues.apache.org/jira/browse/DRILL-6349
>             Project: Apache Drill
>          Issue Type: Bug
>          Components: Client - JDBC
>    Affects Versions: 1.13.0
>         Environment: 16:23 apache-drill-1.13.0$ uname -a
> Darwin bix.local 17.5.0 Darwin Kernel Version 17.5.0: Mon Mar  5 22:24:32 PST 2018; root:xnu-4570.51.1~1/RELEASE_X86_64 x86_64
>  
>            Reporter: Marc Prud'hommeaux
>            Priority: Major
>
> I'm surprised to be unable to find this issue logged elsewhere, but a quick search yields nothing. Trying to connect with the JDBC driver raises a NoClassDefFoundError for sun.misc.VM, which was removed in Java 9. It is understandable that the full drillbit (or its many dependencies) may have difficult-to-extract dependencies on some sun.misc.* classes, but the JDBC driver should be able to be loaded by any JVM.
>  
> Looking at ./common/src/main/java/org/apache/drill/common/config/DrillConfig.java, it appears that a quick workaround could be to make sun.misc.VM.maxDirectMemory called lazily from the one place that uses it: getMaxDirectMemory()
>  
>  
>  
> {{}}{{16:21 apache-drill-1.13.0$ JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk ./bin/drill-localhost }}
> ***Connecting to jdbc:drill:drillbit=localhost*
> WARNING: An illegal reflective access operation has occurred
> WARNING: Illegal reflective access by org.apache.calcite.avatica.com.google.protobuf.UnsafeUtil (file:/Users/marc/Downloads/apache-drill-1.13.0/jars/3rdparty/avatica-1.10.0.jar) to field java.nio.Buffer.address
> WARNING: Please consider reporting this to the maintainers of org.apache.calcite.avatica.com.google.protobuf.UnsafeUtil
> WARNING: Use --illegal-access=warn to enable warnings of further illegal reflective access operations
> WARNING: All illegal access operations will be denied in a future release
> {{java.lang.NoClassDefFoundError: sun/misc/VM}}
> {{  at org.apache.drill.common.config.DrillConfig.<clinit>(DrillConfig.java:49)}}
> {{  at org.apache.drill.jdbc.impl.DrillConnectionImpl.<init>(DrillConnectionImpl.java:155)}}
> {{  at org.apache.drill.jdbc.impl.DrillJdbc41Factory.newDrillConnection(DrillJdbc41Factory.java:73)}}
> {{  at org.apache.drill.jdbc.impl.DrillFactory.newConnection(DrillFactory.java:69)}}
> {{  at org.apache.calcite.avatica.UnregisteredDriver.connect(UnregisteredDriver.java:138)}}
> {{  at org.apache.drill.jdbc.Driver.connect(Driver.java:72)}}
> {{  at sqlline.DatabaseConnection.connect(DatabaseConnection.java:168)}}
> {{  at sqlline.DatabaseConnection.getConnection(DatabaseConnection.java:214)}}
> {{  at sqlline.Commands.connect(Commands.java:1083)}}
> {{  at sqlline.Commands.connect(Commands.java:1015)}}
> {{  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)}}
> {{  at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)}}
> {{  at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)}}
> {{  at java.base/java.lang.reflect.Method.invoke(Method.java:564)}}
> {{  at sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:36)}}
> {{  at sqlline.SqlLine.dispatch(SqlLine.java:742)}}
> {{  at sqlline.SqlLine.initArgs(SqlLine.java:528)}}
> {{  at sqlline.SqlLine.begin(SqlLine.java:596)}}
> {{  at sqlline.SqlLine.start(SqlLine.java:375)}}
> {{  at sqlline.SqlLine.main(SqlLine.java:268)}}
> {{Caused by: java.lang.ClassNotFoundException: sun.misc.VM}}
> {{  at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:582)}}
> {{  at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:185)}}
> {{  at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:496)}}
> {{... 20 more}}
> apache drill 1.13.0 
> "just drill it"
> 0: jdbc:drill:drillbit=localhost> 
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)