You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@drill.apache.org by "ASF GitHub Bot (JIRA)" <ji...@apache.org> on 2018/08/27 12:52: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=16593606#comment-16593606 ] 

ASF GitHub Bot commented on DRILL-6349:
---------------------------------------

oleg-zinovev opened a new pull request #1446: DRILL-6349
URL: https://github.com/apache/drill/pull/1446
 
 
   PR allows both build and run with JDK8, JDK 10 (and, likely, JDK9).
   All tests, except HBase, Hive, Kafka Storage Plugin tests, works on JDK10:
    - HBase cannot start master: HMaster ctor fails with message "Unexpected version format: 10.0.2"
    - Hive cannot create HiveMetaStoreClient: ctor fails with "java.base/[Ljava.lang.Object; cannot be cast to java.base/[Ljava.net.URI;"
    - Kafka: KafkaFilterPushdownTest fails with errors "java.lang.NoSuchMethodError: sun.nio.ch.DirectBuffer.cleaner()Lsun/misc/Cleaner;"
   
   Changes:
   - Added a DrillPlatformDependent class, which tries to read maxDirectMemory from jdk.internal.misc.VM, otherwise fallbacks to netty PlatformDependent
   - asm dependency updated to 6.2.1, and ReplacingInterpreter fixed
   - fixed List.toArray() call in FileSystemPartitionDescriptor (in JDK10 this method return Object[] and cast fails)
   - surefire plugin updated to 2.21.0
   - surefire configuration changed: 
     1) added -XX:+IgnoreUnrecognizedVMOptions
     2) added java.se module (mostly, for java.sql module)
     3) added -Djdk.attach.allowAttachSelf=true, required by jmockit
     4) added locale and country settings, because format tests fails with my system locale
   - compiler plugin updated to 3.8.0
   - JarBuilder fixed for JDK10 (target 1.5 and source 1.5 not supported by javac 10)
   - Drill2489CallsAfterCloseThrowExceptionsTest.ThrowsClosedBulkChecker skips new methods in JDK10 (JDK9 ?) jdbc api
   - added jaxb-api and javax.activation dependencies, because javax.xml.bind and javax.activation modules will be removed in JDK11 (javax.activation used by jersey)
   - drill-config.sh and sqlline.bat changed:
     1) added -XX:+IgnoreUnrecognizedVMOptions
     2) added --add-modules java.se (mostly, for java.sql module)
     3) added --add-opens java.base/jdk.internal.misc=ALL-UNNAMED (allows access to jdk.internal.misc.VM)
   
   P.S. I am sorry for possible mistakes because of my bad English

----------------------------------------------------------------
This is an automated message from the Apache Git Service.
To respond to the message, please log on GitHub and use the
URL above to go to the specific comment.
 
For queries about this service, please contact Infrastructure at:
users@infra.apache.org


> 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)