Hi,
I added your JDBC driver into my project (with version 4.2.2-202004211133290458-b550b6fa) and it doesn’t work with Java 11. It says
java.lang.UnsupportedOperationException: sun.misc.Unsafe or java.nio.DirectByteBuffer.<init>(long, int) not available
at cdjd.io.netty.util.internal.PlatformDependent.directBuffer(PlatformDependent.java:474) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.buffer.NettyArrowBuf.getDirectBuffer(NettyArrowBuf.java:257) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.buffer.NettyArrowBuf.nioBuffer(NettyArrowBuf.java:236) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.buffer.NettyArrowBuf.nioBuffers(NettyArrowBuf.java:220) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.buffer.NettyArrowBuf.setBytes(NettyArrowBuf.java:378) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.buffer.MutableWrappedByteBuf.setBytes(MutableWrappedByteBuf.java:373) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.buffer.ExpandableByteBuf.setBytes(ExpandableByteBuf.java:27) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.buffer.AbstractByteBuf.writeBytes(AbstractByteBuf.java:1133) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.channel.socket.nio.NioSocketChannel.doReadBytes(NioSocketChannel.java:350) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.channel.nio.AbstractNioByteChannel$NioByteUnsafe.read(AbstractNioByteChannel.java:148) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:714) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:650) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:576) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:493) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.util.concurrent.SingleThreadEventExecutor$4.run(SingleThreadEventExecutor.java:989) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at cdjd.io.netty.util.internal.ThreadExecutorMap$2.run(ThreadExecutorMap.java:74) ~[dremio-jdbc-driver-4.2.1-202004111451200819-0c3ecaea.jar:4.2.1-202004111451200819-0c3ecaea]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
2020-04-23 10:33:53.360 INFO 18393 --- [ Client-1] c.com.dremio.sabot.rpc.user.UserClient : [USER]: Channel closed null <--> null (user client)
2020-04-23 10:33:54.371 ERROR 18393 --- [nio-8080-exec-1] com.zaxxer.hikari.pool.HikariPool : HikariPool-1 - Exception during pool initialization.
java.sql.SQLException: Failure in connecting to Dremio: cdjd.com.dremio.exec.rpc.RpcException: HANDSHAKE_COMMUNICATION : [USER]: Channel closed null <--> null (user client)
When I tried to run it with Java 8, it works great. Do you plan to support the Java 11 or is there a workaround on how to make it work with 11?
Is there a public issue tracker or some way to vote on getting Java 11 support for the Java JDBC driver? Not being able to run on newer versions than (seemingly) Java 8 is a pretty big issue for the driver. I know at my company we’re actively migrating towards Java 11, and this is a considerable blocker.
I’m having the same problem here is my logs:
[Client-1] ERROR cdjd.com.dremio.exec.rpc.BasicClient - Failed to establish connection
java.util.concurrent.ExecutionException: cdjd.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: dremiolab.allstate.com/10.194.21.26:31010
at cdjd.io.netty.util.concurrent.AbstractFuture.get(AbstractFuture.java:54)
at cdjd.com.dremio.exec.rpc.BasicClient$ConnectionMultiListener$ConnectionEstablishmentListener.operationComplete(BasicClient.java:285)
at cdjd.com.dremio.exec.rpc.BasicClient$ConnectionMultiListener$ConnectionEstablishmentListener.operationComplete(BasicClient.java:273)
at cdjd.io.netty.util.concurrent.DefaultPromise.notifyListener0(DefaultPromise.java:511)
at cdjd.io.netty.util.concurrent.DefaultPromise.notifyListeners0(DefaultPromise.java:504)
at cdjd.io.netty.util.concurrent.DefaultPromise.notifyListenersNow(DefaultPromise.java:483)
at cdjd.io.netty.util.concurrent.DefaultPromise.notifyListeners(DefaultPromise.java:424)
at cdjd.io.netty.util.concurrent.DefaultPromise.tryFailure(DefaultPromise.java:121)
at cdjd.io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.fulfillConnectPromise(AbstractNioChannel.java:327)
at cdjd.io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:343)
at cdjd.io.netty.channel.nio.NioEventLoop.processSelectedKey(NioEventLoop.java:633)
at cdjd.io.netty.channel.nio.NioEventLoop.processSelectedKeysOptimized(NioEventLoop.java:580)
at cdjd.io.netty.channel.nio.NioEventLoop.processSelectedKeys(NioEventLoop.java:497)
at cdjd.io.netty.channel.nio.NioEventLoop.run(NioEventLoop.java:459)
at cdjd.io.netty.util.concurrent.SingleThreadEventExecutor$5.run(SingleThreadEventExecutor.java:886)
at java.lang.Thread.run(Thread.java:748)
Caused by: cdjd.io.netty.channel.AbstractChannel$AnnotatedConnectException: Connection refused: no further information: dremiolab.allstate.com/10.194.21.26:31010
at sun.nio.ch.SocketChannelImpl.checkConnect(Native Method)
at sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)
at cdjd.io.netty.channel.socket.nio.NioSocketChannel.doFinishConnect(NioSocketChannel.java:325)
at cdjd.io.netty.channel.nio.AbstractNioChannel$AbstractNioUnsafe.finishConnect(AbstractNioChannel.java:340)
… 6 more
Caused by: java.net.ConnectException: Connection refused: no further information
… 10 more
Basically I’m trying to hit what is in effect a Dremio Lab that my company’s Dremio support team has provided - we don’t have an actual instance of Dremio in place as yet. I can hit the Lab via the APIs in Postman without a problem but I need to confirm that I can hit the Lab via the jdbc as I am the SME of a spring boot microservices app that is migrating from Hive to Dremio. So I have a simple java (JDK 1.8) test application to check connection to the lab via the jdbc client driver. I know there are issues with the new versions of the driver and new recent versions of the JDK. I have tried setting the runtime option using -Dcdjd.io.netty.tryReflectionSetAccessible=true but I still get the same problem with a refusal to connect from the Lab side.
Sorry for the confusion.
I am testing connection to my company’s Dremio Lab via jdbc with a simple java (jkd 1.8) test application. I cannot confirm what version of java is used for the server.
I am on Windows 10 and telnet is disabled by our support team.
// Requires JDK 1.8 in your classpath
// Download the Dremio jar from Index of jdbc-driver/3.0.6-201812082352540436-1f684f9/
// and save to the same location as your program
// For logging download slf4j-api and slf4j-simple (select same versions) jars from Artifactory
// Use this command to configure netty:
// set JAVA_TOOL_OPTIONS: -Dcdjd.io.netty.tryReflectionSetAccessible=true
// Compile and run the program, from the location you saved it, in a command prompt with the command:
// javac DremioJdbcTest.java && java -cp .;* DremioJdbcTest
import java.sql.*;
import java.util.Properties;
public class DremioJdbcTest {
public static void main(String[] args) {
final String DB_URL = "jdbc:dremio:direct=dremiolab.allstate.com:31010;";
final String USER = "";
final String PWD = "";
Properties props = new Properties();
props.setProperty("userName",USER);
props.setProperty("password",PWD);
Connection conn = null;
Statement stmt = null;
try {
System.out.println("Connecting to database...");
conn = DriverManager.getConnection(DB_URL, props);
System.out.println("Creating statement...");
stmt = conn.createStatement();
String sql;
sql = "SELECT user";
ResultSet rs = stmt.executeQuery(sql);
while (rs.next()) {
System.out.print(rs.getString("user"));
}
rs.close();
stmt.close();
conn.close();
} catch (SQLException se) {
se.printStackTrace();
}
}
Hi @ben
I am facing same problem. And add following code into java class. System.setProperty("cdjd.io.netty.tryReflectionSetAccessible","true");
Now it works. I don’t sure below things. Could you kindly give me some suggestion?
Whether the property will affect overall application?
@mccann.ren This property is only for JDK 11 client to connect to JDK 8 server, this is a ODBC driver specific parameter, it should not affect the application
@balaji.ramaswamy Thanks for your reply.
Would you please help double confrim:
Is this property only for Dremio?
cdjd.io.netty.tryReflectionSetAccessible
@mccann.ren I am not sure I follow your question, are you asking if this parameter can be used in a different tool or asking where you need to enter this parameter
@balaji.ramaswamy yes, we are asking that will this parameter used by others(different tool)?
As we are changing the parameter to true. so we want to know will someone else need this parameter set to false.
Hi @balaji.ramaswamy , I think we still not get the confirmed response. Is it the Dremio specific parameter? We could raise a support ticket if you need someone/dev to check.