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

时间:2019-05-02 07:20:12

标签: db2 wildfly-swarm thorntail

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

据我了解:一旦我提取了数据源部分,就应该根据文档(https://docs.thorntail.io/2.3.0.Final/#auto-detecting-jdbc-drivers_thorntail)自动检测db2驱动程序。 因此,我唯一要做的就是在数据源中引用“ 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 个答案:

答案 0 :(得分:1)

您在JDBC驱动程序自动检测代码中发现了一个错误。驱动程序已被(可能)自动检测到,但是配置错误。具体来说,this line of code将XA数据源类名称设置为com.ibm.db2.jdbc.DB2XADataSource,该名称不存在。 (这实际上是您的错误消息所说的,但是我也通过研究JDBC驱动程序JAR来确认这一点。)正确的类名是com.ibm.db2.jcc.DB2XADataSource。我提交了THORN-2398并提交了具有修复程序的PR。

我不确定是否有一个简单的解决方法,因为在应用所有配置之后将执行JDBC驱动程序自动检测。也许以下破解可能有效。像这样在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

但请保持其他所有内容不变。这意味着将有2个针对DB2的JDBC驱动程序,一个自动检测到(它将创建com.ibm.db2jcc模块),而您创建的第二个驱动程序将依赖于第一个创建的基础结构。如果可行,只需将数据源中的driver-name: ibmdb2更改为driver-name: mydb2

如果这不起作用,则必须暂时退出JDBC驱动程序自动检测,直到问题解决。