使用 Thorntail / Wildfly Swarm 配置 db2 数据源

Configure a db2 datasource with Thorntail / Wildfly Swarm

有人设法使用 Thorntail / Wildfly Swarm 配置 db2 数据源吗?

据我了解:只要我提取数据源部分,就会根据文档自动检测到 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>

项目-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"

您在 JDBC 驱动程序自动检测代码中发现了一个错误。驱动程序(可能)被自动检测到,但配置错误。具体来说,this line of code sets the XA datasource class name to com.ibm.db2.jdbc.DB2XADataSource, which doesn't exist. (That's actually what your error message says, but I also confirmed it by looking into the JDBC driver JAR.) The correct class name is com.ibm.db2.jcc.DB2XADataSource. I filed THORN-2398 并提交了带有修复的 PR。

我不确定是否有简单的解决方法,因为 JDBC 驱动程序自动检测是在应用所有配置后执行的。也许以下 hack 可能会起作用。在 project-defaults.yml 中定义一个新的 JDBC 驱动程序,如下所示:

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

但要保持其他一切完好无损。这意味着 DB2 将有 2 个 JDBC 驱动程序,一个自动检测(将创建 com.ibm.db2jcc 模块),而您创建的第二个驱动程序将搭载在第一个创建的基础架构上。如果可行,只需将数据源中的 driver-name: ibmdb2 更改为 driver-name: mydb2.

如果这不起作用,您必须暂时停止 JDBC 驱动程序自动检测,直到问题得到解决。