Сконфигурируйте источник данных db2 с помощью Thorntail / Wildfly Swarm - PullRequest
0 голосов
/ 02 мая 2019

Кому-нибудь удалось настроить источник данных db2 с Thorntail / Wildfly Swarm?

Насколько я понимаю: как только я извлекаю фракцию источников данных, драйвер db2 должен автоматически определяться в соответствии с документацией (https://docs.thorntail.io/2.3.0.Final/#auto-detecting-jdbc-drivers_thorntail). Таким образом, единственное, что мне нужно сделать, это указать "ibmdb2" в качестве имени драйвера в моем источнике данных, верно?

pom.xml (используя Thorntail 2.3.0.Final)

    <dependency>
        <groupId>io.thorntail</groupId>
        <artifactId>datasources</artifactId>
    </dependency>

    <dependency>
        <groupId>com.ibm.db2</groupId>
        <artifactId>db2jcc_license_cu</artifactId>
        <version>10.1</version>
    </dependency>

    <dependency>
        <groupId>com.ibm.db2</groupId>
        <artifactId>db2jcc4</artifactId>
        <version>4.22.29</version>
    </dependency>

project-defauls.yml

swarm:
  context:
    path: /

  datasources:
    data-sources:
      MYDS:
        driver-name: ibmdb2
        connection-url: jdbc:db2://host:port/schema
        user-name: user
        password: password

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

2019-05-02 09:07:52,747 INFO  [org.wildfly.swarm.datasources] (main) THORN1003: Auto-detected JDBC driver for ibmdb2
2019-05-02 09:07:57,660 ERROR [org.jboss.as.controller.management-operation] (ServerService Thread Pool -- 16) WFLYCTL0013: Operation ("add") failed - address: ([
    ("subsystem" => "datasources"),
    ("jdbc-driver" => "ibmdb2")
]) - failure description: "WFLYJCA0114: Failed to load datasource class: com.ibm.db2.jdbc.DB2XADataSource"

1 Ответ

1 голос
/ 03 мая 2019

Вы нашли ошибку в коде автоопределения драйвера JDBC. Драйвер был (вероятно) автоматически обнаружен, но он был неправильно настроен. В частности, эта строка кода устанавливает имя класса источника данных XA равным com.ibm.db2.jdbc.DB2XADataSource, которого не существует. (Это действительно то, что написано в вашем сообщении об ошибке, но я также подтвердил это, изучив JAR-файл драйвера JDBC.) Правильное имя класса - com.ibm.db2.jcc.DB2XADataSource. Я подал THORN-2398 и представил PR с исправлением.

Я не уверен, есть ли простой обходной путь, потому что автоопределение драйвера JDBC выполняется после применения всей конфигурации. Возможно, следующий хак может сработать. Определите новый драйвер JDBC в project-defaults.yml следующим образом:

thorntail:
  datasources:
    jdbc-drivers:
      mydb2:
        driver-module-name: com.ibm.db2jcc
        driver-xa-datasource-class-name: com.ibm.db2.jcc.DB2XADataSource

Но все остальное не трогай. Это означает, что будет 2 драйвера JDBC для DB2, один с автоматическим определением (который создаст модуль com.ibm.db2jcc), а второй, который вы создадите, будет использовать инфраструктуру, созданную первым. Если это работает, просто измените driver-name: ibmdb2 в вашем источнике данных на driver-name: mydb2.

Если это не сработает, вам придется на время отключить автоопределение драйвера JDBC, пока проблема не будет устранена.

...