Как правильно разрешить использование разных драйверов jdbc для развернутых приложений на JBoss / Wildfly? - PullRequest
0 голосов
/ 21 февраля 2019

Мои настройки следующие:

  • Я получил приложение, которое я развернул в /standalone/deployments
  • jboss-deployment-structure.xml моего развертывания в /standalone/deployments выглядит следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            [...]
            <module name="org.postgresql"/>
        </dependencies>
    </deployment>
</jboss-deployment-structure>
  • Полное удаление jboss-deployment-structure.xml (поскольку его нельзя использовать, если нет проблем с загрузкой классов), не работает.Я использую больше зависимостей (keycloak) рядом с драйвером, который не может быть найден тогда.

  • Мой module.xml в моем модуле org/postgresql/main выглядит так (как описано в https://www.keycloak.org/docs/4.8/server_installation/index.html#package-the-jdbc-driver)

<?xml version="1.0" encoding="UTF-8"?>
<module name="org.postgresql" xmlns="urn:jboss:module:1.5">
    <resources>
        <resource-root path="postgresql-42.2.5.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>
  • Мое требование: разрешить использование различных типов jdbc-драйверов, например, postgres, oracle, mssql.

Первый вариант:

Я могу изменить свой jboss-deployment-structure.xml на

<?xml version="1.0" encoding="UTF-8"?>
<jboss-deployment-structure>
    <deployment>
        <dependencies>
            [...]
            <module name="org.postgresql" optional="TRUE"/>
            <module name="com.oracle.ojdbc6" optional="TRUE"/>
            [...]
        </dependencies>
    </deployment>
</jboss-deployment-structure>

(добавлен необязательный параметр)

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

Идея исходит из стандартной документации .


Второй вариант:

Я изменяю свой путь к модулю на driver/jdbc/main (вместо org/postgres/main) и module.xml на

<module name="driver.jdbc" xmlns="urn:jboss:module:1.5">
[...]
</module>

(изменил название модуля)

и идусо ссылкой на модуль в моем jboss-deployment-structure.xml как

<jboss-deployment-structure>
    [...]
    <module name="driver.jdbc"/>
    [...]
</jboss-deployment-structure>

Теперь я заставляю своих клиентов называть модуль-драйвер так, как я предложил. Они не могут назвать модуль, как указано в каждой стандартной документации.

Идея исходит из этого вопроса .


Я делаю это в контексте установки Keycloak с самореализованной федерацией пользователей для доступа к отдельному (legacy) пользовательская база данных.Поэтому удаление jboss-deployment-structure.xml не является вариантом, как упомянуто выше.

Как правильно достичь моей цели гибкости с помощью драйвера jdbc?


EDIT: упомянуто, сброс jboss-deployment-structure.xml не работает.

1 Ответ

0 голосов
/ 22 февраля 2019

Я бы посоветовал вам устанавливать все драйверы баз данных по отдельности в виде модулей.Отдельные модули помогут вам легко отслеживать и обновлять файлы драйверов в будущем.

Пока у вас нет проблем с загрузкой классов в вашем приложении, вам не нужно упоминать эти драйверы в jboss-deployment-structure.xmlфайл.Это статические модули , которые будут загружены при запуске сервера.

Кроме того, после установки модулей драйвера необходимо добавить записи в файл standalone.xml.Например, если я установил драйвер Oracle, то в теге

<driver name="oracle" module="com.oracle">
 <driver-class>oracle.jdbc.driver.OracleDriver</driver-class>
</driver>

.Добавьте определение источника данных в теге (рядом с ExampleDS):

<datasource jndi-name="java:/[NAME]" pool-name="OracleDS" enabled="true">
 <connection-url>jdbc:oracle:thin:@[HOST_NAME]:1521:[SID]</connection-url>
  <driver>oracle[has to match the driver name]</driver>
  <pool>
   <min-pool-size>1</min-pool-size>
   <max-pool-size>5</max-pool-size>
   <prefill>true</prefill>
  </pool>
  <security>
   <user-name>[USER]</user-name>
   <password>[PWD]</password>
  </security>
</datasource>
...