Как настроить библиотеку Oracle AQ в качестве модуля Wildfly 8?

В настоящее время я застрял в середине проекта миграции JBoss с версии 4.2.2GA на Wildfly 8.0.0.Final. В проекте используется драйвер Oracle OCI для доступа к базе данных и Oracle AQ вместе с ним. Теперь я запускаю Wildfly с переменной среды «LD_LIBRARY_PATH», установленной в место, где находятся собственные реализации OCI, и все работает нормально, кроме AQ. Это ошибка, которую я получаю при использовании AQ API: oracle.jms.AQjmsSession.ociinit([JIIZSII)J: java.lang.UnsatisfiedLinkError: oracle.jms.AQjmsSession.ociinit([JIIZSII)J

Это мой модуль:
путь: ${WILDFLY_HOME}/modules/oracle/aq/api/main
содержимое: aqapi.jar, module.xml
module.xml:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="oracle.aq.api">
  <resources>
    <resource-root path="aqapi.jar" />
  </resources>
  <dependencies>
    <module name="javax.api" />
    <module name="javax.jms.api" />
    <module name="oracle.jdbc" />
  </dependencies>
</module>

Итак, теперь вопрос в том, по какой причине Wildfly не распространяет «LD_LIBRARY_PATH» на загрузчик классов модуля?

Для более старых версий JBoss я обнаружил эту проблему: https://issues.jboss.org/browse/SOA-3570, который распространяется, чтобы поместить aqapi.jar в папку библиотеки сервера, как мы делаем это для JBoss 4. Но как я могу решить эту проблему для Wildfly? Есть идеи?

Спасибо!


person shillner    schedule 19.03.2014    source источник


Ответы (2)


После долгого путешествия по интернету и многих попыток мой коллега наконец нашел решение.

Решение состояло в том, чтобы объединить оба модуля в один модуль jdbc/aq, выглядящий так:

путь: ${WILDFLY_HOME}/modules/oracle/jdbcaq/main
содержимое: ojdbc5.jar, aqapi.jar, orai18n.jar, module.xml
module.xml:

<?xml version="1.0" encoding="UTF-8"?>
<module xmlns="urn:jboss:module:1.0" name="oracle.jdbcaq">
  <resources>
<resource-root path="aqapi.jar" />
    <resource-root path="ojdbc5.jar"/>
    <resource-root path="orai18n.jar"/>
  </resources>
  <dependencies>
    <module name="javax.api"/>
    <module name="javax.jms.api" />
    <module name="javax.transaction.api"/>
  </dependencies>
</module>

Я думаю, что это как-то связано с загрузчиками классов модулей wildfly. Возможно, для связи между обоими модулями (jdbc и aq) требуется, чтобы собственные реализации загружались одним и тем же загрузчиком классов, что вызывает эту ошибку при использовании двух модулей вместо одного.

person shillner    schedule 25.03.2014

Вместо установки LD_LIBRARY_PATH модуль JBoss/WildFly также может автоматически искать собственные библиотеки в модуле: https://docs.jboss.org/author/display/MODULES/Native+Libraries

Таким образом, вы можете загрузить свои общие библиотеки в ${WILDFLY_HOME}/modules/oracle/jdbcaq/main/lib/linux-x86_64/ либо путем копирования .so файлов, либо благодаря символической ссылке.

person Yves Martin    schedule 05.12.2014