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

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

oleg-zinovev commented on issue #1446: DRILL-6349: Drill JDBC driver fails on 
Java 1.9+ with NoClassDefFoundError: sun/misc/VM
URL: https://github.com/apache/drill/pull/1446#issuecomment-432165721
 
 
   '@oleg-zinovev, Is it make sence to move these two dependencies to the root 
pom?'
   
   @vvysotskyi, it isn't make sence at all, so i remove this dependencies.
   
   I try to build Drill with fresh JDK 11 and fix new errors:
   1) JMockit 1.39 -> 1.43. JMockit had an issue with java 11 
(https://github.com/jmockit/jmockit1/issues/534), so I had to update this 
dependecy. Starting JMockit 1.42, "-javaagent" must be specified to run tests 
(http://jmockit.github.io/tutorial/Introduction.html#runningTests) and 
jmockit.integration.junit4.JMockit.class was removed. That's why i have to 
change this tests:
   - TestCastFunctions.java
   - TestConstantFolding.java
   - TestDateConversions.java
   - TestDateFunctions.java
   - TestExtendedTypes.java
   - TestUtf8SupportInQueryString.java
   - AvroFormatTest.java
   2) BoundsCheckingTest.java fails with IllegalAccessException. This was fixed 
by adding a call of setAccessible(true).
   3) JDKClassCompiler.java - Java 11 intoduces 'Nests' 
(http://openjdk.java.net/jeps/181), and resulting byte-code, generated by javac 
11 requires a "Nests" support from ASM visitors. Since Drill supports java 1.8+ 
i simply add a target and source version to javac call, to not have to change 
ASM visitors.
   4) hadoop 2.7.1 -> 2.7.4. Haboop org.apache.hadoop.util.Shell class in 
version 2.7.1 contains a Java version check:
   "System.getProperty("java.version").substring(0, 3).compareTo("1.7") >= 0;"
   But, for jdk 11 (at least for OpenJDK Ubuntu package), 
System.getProperty("java.version") return "11", and substring call fails. I had 
to update hadoop to minimal version, which not contains this call.
   5) TestImpersonationMetadata.java - in hadoop 2.7.4 error message was 
changed, so i slightly change a "expected" error to fit both new and old 
messages.
   6) maven-source-plugin fails to execute "jar-no-fork" on JDK 11, and i 
update it to the latest version. 
   
   Now on java 11 fails:
   1) HBase tests
   2) Hive test
   
   I will try to update a HBase and revalidate drill on JDK 9 and JDK 10 to the 
end of the week.
   
   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:
us...@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
>            Assignee: Oleg Zinoviev
>            Priority: Major
>             Fix For: 1.15.0
>
>
> 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)

Reply via email to