Я не могу понять, как получить стороннюю библиотеку 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? Я пропускаю что-то простое здесь?