gpt4 book ai didi

java - 如何修复 Apache Ignite 中的 "Could not initialize class org.apache.ignite.IgniteJdbcThinDriver"错误?

转载 作者:行者123 更新时间:2023-11-30 01:50:16 41 4
gpt4 key购买 nike

问题

我正在尝试使用 Apache Ignite 内置工具 SQLLine 连接到 Apache Ignite 服务器。我收到错误:java.lang.NoClassDefFoundError:无法初始化类 org.apache.ignite.IgniteJdbcThinDriver

背景

我在一个容器中运行 Apache Ignite,在另一个容器中运行 CentOS7。两个容器都在同一网络中运行(ping 双向工作)。尝试的连接是从 CentOS7 到 Apache Ignite。

Apache Ignite 似乎在默认配置下运行良好。在 CentOS7 容器中,我安装了 Oracle JDK 12.0.1,并且文件夹中有 Apache Ignite 2.7.0 二进制文件。我还设置了 IGNITE_HOME 环境变量。

在这里,( https://apacheignite-sql.readme.io/docs/sqlline ),它说我可以使用以下命令连接到我的集群: ./sqlline.sh --verbose=true -u jdbc:ignite:thin://127.0.0.1/。但是,这会引发前面提到的错误。

SQLLine 应该附带 Ignite JDBC 驱动程序。我尝试手动下载它们( https://apacheignite-sql.readme.io/docs/jdbc-driver#section-multiple-endpoints )。当我下载驱动程序(据说是 ignite-core-{version}.jar)时,我将其放在与 sqlline.jar 文件相同的文件夹中。

输出

[root@bc72c4fbf47e bin]# ./sqlline.sh
sqlline version 1.3.0
sqlline> !connect jdbc:ignite:thin://172.19.0.2/
WARNING: An illegal reflective access operation has occurred
WARNING: Illegal reflective access by org.apache.ignite.internal.util.GridUnsafe$2 (file:/var/tmp/apache-ignite/libs/ignite-core-2.7.0.jar) to field java.nio.Buffer.address
WARNING: Please consider reporting this to the maintainers of org.apache.ignite.internal.util.GridUnsafe$2
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: Could not initialize class org.apache.ignite.IgniteJdbcThinDriver
at java.base/java.lang.Class.forName0(Native Method)
at java.base/java.lang.Class.forName(Class.java:415)
at java.sql/java.sql.DriverManager.isDriverAllowed(DriverManager.java:555)
at java.sql/java.sql.DriverManager.isDriverAllowed(DriverManager.java:547)
at java.sql/java.sql.DriverManager.getDrivers(DriverManager.java:449)
at java.sql/java.sql.DriverManager.getDrivers(DriverManager.java:426)
at sqlline.SqlLine.findRegisteredDriver(SqlLine.java:1568)
at sqlline.SqlLine.scanForDriver(SqlLine.java:1542)
at sqlline.Commands.connect(Commands.java:1074)
at sqlline.Commands.connect(Commands.java:1001)
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:567)
at sqlline.ReflectiveCommandHandler.execute(ReflectiveCommandHandler.java:38)
at sqlline.SqlLine.dispatch(SqlLine.java:791)
at sqlline.SqlLine.begin(SqlLine.java:668)
at sqlline.SqlLine.start(SqlLine.java:373)
at sqlline.SqlLine.main(SqlLine.java:265)

结论

我应该能够使用 sqlline 中的 !connect jdbc:ignite:thin://172.19.0.2/ 命令连接到我的 Ignite 服务器。这不起作用,并抛出无法初始化类org.apache.ignite.IgniteJdbcThinDriverIgniteJDBCThinDriver 已安装/可用。

最佳答案

添加 JVM 参数

--add-opens java.base/java.nio=ALL-UNNAMED

解决了我的问题。

关于java - 如何修复 Apache Ignite 中的 "Could not initialize class org.apache.ignite.IgniteJdbcThinDriver"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56325897/

41 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com