JBoss - JCA для JNI с использованием модуля: libbaz.so: невозможно открыть общий объектный файл: нет такого файла или каталога - PullRequest
0 голосов
/ 01 мая 2019

Я не могу понять, как получить стороннюю библиотеку JNI для нужных ей SO, используя JBoss Wildfly 8.

В моем EAR содержится адаптер ресурсов JCA для обработки вызовов JNI, соответствующих спецификации EJB, которая зависит от модуля, который я создал (от имени стороннего EIS) и поместил в мой jboss-deploy-structure.xml

<jboss-deployment-structure>  
  <deployment>  
    <dependencies>  
      <module name="foo.bar" export="TRUE" /> <!-- This one created by me -->
      <module name="other.unimportant.ear.dependencies" export="TRUE" />
    </dependencies>  
  </deployment>  
</jboss-deployment-structure> 

И module.xml для стороннего кода выглядит следующим образом:

<module xmlns="urn:jboss:module:1.1" name="foo.bar">
    <resources>
        <resource-root path="baz_jni.jar"/> <!-- this is the third party JAR that actually does the JNI -->
    </resources>
    <dependencies>
        <module name="javax.api"/>
    </dependencies>
</module>

В модуле module.xml для сторонней библиотеки находится каталог lib/linux-x86_64, где содержимое каталога представляет собой символические ссылки на реальные SO (я не могу их переместить, поэтому вместо них я использую символическую ссылку):

libbar.so   -> /path/to/libbar.so
libbaz.so   -> /path/to/libbaz.so
libfoo.so   -> /path/to/libfoo.so
libother.so -> /path/to/libother.so

bar_jni.jar зависит от libbar.so, где от libbar.so зависит от трех других: libbaz.so, libfoo.so, libother.so.

Первоначально без каталога lib/linux-x86_64 я получал сообщение об ошибке:

java.lang.UnsatisfiedLinkError: нет строки в java.library.path

, в результате чего добавление каталога lib с символическими ссылками решило эту проблему. Что удивляет, так это новая ошибка:

java.lang.UnsatisfiedLinkError: /path/to/libbar.so: libbaz.so: невозможно открыть общий объектный файл: нет такого файла или каталога

Так что он явно получает libbar.so нормально, но когда libbar.so разрешает свои зависимости, теперь он не может найти libbaz.so, но с немного другой ошибкой.

Я удалил все символические ссылки в каталоге lib/linux-x86_64 с единственным оставшимся файлом libbar.so, и произошла та же ошибка, указывающая мне, что символические ссылки, которые я пытался вставить туда, не имели никакого эффекта.

Разрешается ли разрешение зависимостей другого SO в модуле иначе, чем разрешение SO файла .jar для модулей JBoss? Я пропускаю что-то простое здесь?

...