Настройте источник данных db2 с помощью Thorntail / Wildfly Swarm

Кому-нибудь удалось настроить источник данных 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"

person Michael Hunziker    schedule 02.05.2019    source источник


Ответы (1)


Вы обнаружили ошибку в коде автоопределения драйвера 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

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

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

person Ladicek    schedule 03.05.2019
comment
Большое спасибо! Я создал собственное определение jdbc-драйвера. Это прекрасно работает. Однако я все еще получаю сообщение об ошибке из-за автоматического обнаружения. Есть ли способ отключить автоматическое определение драйвера JDBC? - person Michael Hunziker; 06.05.2019
comment
Я не думаю, что отключение автоопределения драйвера JDBC возможно. Если у вас есть драйвер JDBC среди ваших зависимостей, он будет обнаружен автоматически. Вы можете удалить его из Maven POM, но тогда вам придется создать для него свой собственный module.xml и т. Д. Для него есть некоторая документация по адресу docs.thorntail.io/2.4.0.Final/ - person Ladicek; 06.05.2019