使用 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 驱动程序自动检测,直到问题得到解决。
有人设法使用 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 驱动程序自动检测,直到问题得到解决。