在 JBoss 上为 DB2 创建 XA 数据源

Posted

技术标签:

【中文标题】在 JBoss 上为 DB2 创建 XA 数据源【英文标题】:Creating XA DataSource to DB2 on JBoss 【发布时间】:2010-10-21 13:42:57 【问题描述】:

我尝试使用com.ibm.db2.jcc.DB2XADataSource 类配置XA DB2 数据源xa-datasource(基于http://community.jboss.org/wiki/SetUpADB2Datasource)(local-tx-datasource 使用com.ibm.db2.jcc.DB2Driver)。目标服务器是 DB2 Connect V9.7

实际的 xa-datasource 配置:

<xa-datasource>
    <jndi-name>jdbc/DB2ServerDS</jndi-name>
    <use-java-context>false</use-java-context>
    <track-connection-by-tx>true</track-connection-by-tx> 
    <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
    <xa-datasource-property name="URL">jdbc:db2://db2server:50000/FINDB</xa-datasource-property>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.DB2ExceptionSorter</exception-sorter-class-name>
    <xa-datasource-property name="DriverType">4</xa-datasource-property>
    <check-valid-connection-sql>SELECT * FROM ACC.SETTINGS 1=2</check-valid-connection-sql>
    <user-name>findbuser</user-name>
    <password>findbuser</password>
    <min-pool-size>2</min-pool-size>
    <max-pool-size>10</max-pool-size>
    <blocking-timeout-millis>10000</blocking-timeout-millis>
    <type-mapping>DB2</type-mapping>
    <no-tx-separate-pools/>
</xa-datasource>

以及JBoss节点lib目录下的以下jar:

db2umplugin.jar         
db2policy.jar           
db2dbgm.jar             
db2jcc_license_cu.jar   
db2jcc.jar              
db2jcc4.jar             
db2java.zip             
db2jcc_license_cisuz.jar

但我得到了错误:

Caused by: com.ibm.db2.jcc.am.SqlException: [jcc][10389][12245][3.57.82] Failure in loading native library db2jcct2, java.lang.UnsatisfiedLinkError: no db2jcct2 in java.library.path:  ERRORCODE=-4472, SQLSTATE=null

XA 的驱动程序正在尝试使用本机库,尽管我使用的是 JDBC Type 4 驱动程序。

为什么驱动程序尝试使用本机库?有什么我需要添加到我的配置的吗?

【问题讨论】:

【参考方案1】:

解决方法是不使用 URL 指定连接设置。

<xa-datasource>
    <jndi-name>jdbc/DB2ServerDS</jndi-name>
    <use-java-context>false</use-java-context>
    <track-connection-by-tx>true</track-connection-by-tx> 
    <xa-datasource-class>com.ibm.db2.jcc.DB2XADataSource</xa-datasource-class>
    <exception-sorter-class-name>org.jboss.resource.adapter.jdbc.vendor.DB2ExceptionSorter</exception-sorter-class-name>
    <xa-datasource-property name="ServerName">db2server</xa-datasource-property>
    <xa-datasource-property name="PortNumber">50000</xa-datasource-property>
    <xa-datasource-property name="DatabaseName">FINDB</xa-datasource-property>
    <xa-datasource-property name="DriverType">4</xa-datasource-property>
    <xa-datasource-property name="User">findbuser</xa-datasource-property>
    <xa-datasource-property name="Password">findbuser</xa-datasource-property>
    <xa-datasource-property name="DriverType">4</xa-datasource-property>
    <check-valid-connection-sql>SELECT * FROM ACC.SETTINGS 1=2</check-valid-connection-sql>
    <user-name>findbuser</user-name>
    <password>findbuser</password>
    <min-pool-size>2</min-pool-size>
    <max-pool-size>10</max-pool-size>
    <blocking-timeout-millis>10000</blocking-timeout-millis>
    <type-mapping>DB2</type-mapping>
    <no-tx-separate-pools/>
</xa-datasource>

感谢http://dev.wavemaker.com/forums/?q=node/3127

正确的 JAR 是

db2jcc_license_cu.jar             
db2jcc4.jar                         
db2jcc_license_cisuz.jar

您是否会收到如下错误:

org.jboss.resource.JBossResourceException: Could not create connection; - nested throwable: (com.ibm.db2.jcc.am.SqlException: DB2 SQL Error: SQLCODE=-5042, SQLSTATE=     , SQLERRMC= ;1208;FINDBUSER;FINDB;QDB2; ; ; ;1208; , DRIVER=4.7.85)

查看http://www-01.ibm.com/support/docview.wss?uid=swg21405243&myns=swgimgmt&mynp=OCSSEPGG&mync=R 以获得解决方案。

我希望这可以为其他人节省一些挫败感和时间。

【讨论】:

我认为 license_cu 和 license_cisuz 不应该同时使用。 cu 是免费许可证,cisuz 是包含更多平台的商业许可证(后缀中的每个字母一个)- 你想要一个或另一个,而不是两者。

以上是关于在 JBoss 上为 DB2 创建 XA 数据源的主要内容,如果未能解决你的问题,请参考以下文章

如何在 JBOSS MDB 中禁用 XA 连接

如何在 JBoss 中配置 ActiveMQ JCA 连接器以使用 XA 连接?

请教was配置数据库中 连接池数据源和XA数据源区别

Websphere MQ 作为 txn 协调器:- 由于 db2 无法启动 xa,MQ.begin() 在 mq 退出后失败

使用JBoss AS 7连接到DB2 db的JPA-Hibernate:HHH000183:没有为查询类找到持久化类

jboss数据源配置