Как исправить ошибку «Не удалось инициализировать класс org.apache.ignite.IgniteJdbcThinDriver» в Apache Ignite? - PullRequest
1 голос
/ 27 мая 2019

Проблема

Я пытаюсь подключиться к серверу Apache Ignite с помощью встроенного инструмента Apache Ignite, SQLLine.Я получаю сообщение об ошибке: java.lang.NoClassDefFoundError: Could not initialize class org.apache.ignite.IgniteJdbcThinDriver

Фон

У меня Apache Ignite работает в контейнере, а CentOS7 работает в другом контейнере.Оба контейнера работают в одной сети (пинг работает в обе стороны).Испытанное соединение происходит из 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-множественные конечные точки ).Когда я скачал драйвер, который называется 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)

Вывод

Я должен иметь возможность подключиться к своему серверу Ignite с помощью команды !connect jdbc:ignite:thin://172.19.0.2/ в sqlline.Это не работает, и выдает Could not initialize class org.apache.ignite.IgniteJdbcThinDriver IgniteJDBCThinDriver установлен / доступен.

Ответы [ 2 ]

1 голос
/ 27 мая 2019

Спасибо @alamar, это сработало!

Я удалил JDK12, который я установил с RPM.Проверьте название пакета: rpm -qa | grep jdk.Удалите пакет: rpm -e jdk-12.0.1-12.0.1-ga.x86_64.

Я работаю в изолированной системе, поэтому я скачал и перенес JDK8.rpm с другой машины.Установите JDK8: rpm -ihv jdk-8u211-linux-x64.rpm.

Теперь, когда я запускаю: ./sqlline.sh --verbose=true -u jdbc:ignite:thin://172.19.0.2, я получаю: issuing: !connect jdbc:ignite:thin://172.19.0.2/ '' '' org.apache.ignite.IgniteJdbcTh Connecting to jdbc:ignite:thin://172.19.0.2/ Connected to: Apache Ignite (version 2.7.0#20181130-sha1:256ae401) Driver: Apache Ignite Thin JDBC Driver (version 2.7.0#20181130-sha1:256ae401) Autocommit status: true Transaction isolation: TRANSACTION_REPEATABLE_READ sqlline version 1.3.0.

Теперь я могу запросить свою базу данных.

1 голос
/ 27 мая 2019

Рекомендуется для Java 8, так как Apache Ignite 2.7.0 не имеет полной поддержки Java 12.В противном случае вы можете попробовать возиться с опциями JVM .

...