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