Произошла ошибка JNI - контейнер Docker Oracle NoSQL - PullRequest
0 голосов
/ 02 апреля 2019

Я занимаюсь исследованиями пару дней, и это моя последняя пуля, надеюсь, вы, ребята, можете мне помочь.

В основном я пытаюсь создать внешнюю таблицу в реляционной базе данных Oracle 12c, которая указывает на таблицу моей базы данных Oracle NoSQL. Я делаю это, следуя этому руководству . Все шло хорошо до достижения точки 4, где вы генерируете файл ".dat", используя некоторые библиотеки. У меня есть свой случай с моими собственными данными, но вы можете увидеть полный пример процесса здесь .

Проблема, с которой я сталкиваюсь, возникает при выполнении следующей команды:

java -cp ./lib/kvstore-ee.jar:./lib/ojdbc6.jar oracle.kv.exttab.Publish -config ./exttab/nueva.xml -publish -verbose

, что приводит меня к следующей ошибке:

Picked up _JAVA_OPTIONS: -Djava.security.egd=file:/dev/./urandom
Error: A JNI error has occurred, please check your installation and try again
Exception in thread "main" java.lang.NoClassDefFoundError: oracle/kv/KVStoreException

        at java.lang.Class.getDeclaredMethods0(Native Method)
            at java.lang.Class.privateGetDeclaredMethods(Class.java:2701)
            at java.lang.Class.privateGetMethodRecursive(Class.java:3048)
            at java.lang.Class.getMethod0(Class.java:3018)
            at java.lang.Class.getMethod(Class.java:1784)
            at sun.launcher.LauncherHelper.validateMainClass(LauncherHelper.java:544)
            at sun.launcher.LauncherHelper.checkAndLoadMain(LauncherHelper.java:526)
    Caused by: java.lang.ClassNotFoundException: oracle.kv.KVStoreException
            at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
            ... 7 more

Теперь я перейду к вещам, которым пытался следовать, чтобы решить эту проблему:

  • Различные версии JDK
  • Различные версии файлов .jar.
  • Переключение файлов в родительский каталог
  • Выполнение команды из разных каталогов.
  • Проверка кода в участвующих классах вручную, чтобы увидеть, отличается ли он от оригинала, предоставленного Oracle

На данный момент, я не знаю, делаю ли я что-то неправильно или что-то не так с окружающей средой. Мне просто нужно иметь возможность выполнить это, чтобы сгенерировать файл .dat, но я не могу найти способ. Я оставляю здесь некоторую информацию на случай, если она поможет:

Окружающая среда . Я использую Docker-контейнер с дистрибутивом Oracle NoSQL . В этой среде я установил эту версию JDK:

  • Java-версия "1.8.0_73" Java (TM) SE Runtime Environment (сборка 1.8.0_73-b02) 64-разрядная виртуальная машина Java HotSpot (TM) (сборка 25.73-b02, смешанный режим)

У меня есть все jar-файлы, необходимые по путям, указанным в команде, и, конечно, XML-файл. Я также могу предоставить вам переменные окружения, код для файла конфигурации или, в основном, все, что вам нужно, но я потерян на этом этапе. Заранее спасибо.

1 Ответ

0 голосов
/ 03 апреля 2019

Испуганный в коммете предложил Джорн Верни , я еще раз проверил в библиотеках, чтобы увидеть, где находится класс, так как я был уверен, что где-то видел его.

Есть другая библиотека с именем kvstore.jar с утилитами для базы данных.Как видите, команда не использовала эту библиотеку, где oracle.kv.KVStoreException.

Короче говоря, решение состоит в том, чтобы просто добавить этот jar в команду, что приведет к:

java -cp ./lib/kvstore-ee.jar:./lib/kvstore.jar:./lib/ojdbc6-11.2.0.3.jar oracle.kv.exttab.Publish -config ./exttab/nueva.xml -publish -verbose

Тогда команда выполняется нормально.Спасибо за вашу идею!

...