首页 > 解决方案 > 在 WebSphere 中,resources.xml 文件中创建的 JDBCProvider 默认为 xa="true"?

问题描述

这是一个特殊的问题:

我们的 Websphere 管理员在创建数据源时犯了一个脚本错误,导致我们的数据源在 resources.xml 文件中没有属性 xa=”true”。数据源不是使用 WAS UI 创建的,而是使用 jython 脚本创建的。

这是来自 resources.xml 的 xml 片段

<resources.jdbc:JDBCProvider xmi:id="JDBCProvider_34335495940" name="Oracle JDBC Driver (XA)" description="Oracle JDBC Driver (XA)" providerType="Oracle JDBC Driver (XA)" isolatedClassLoader="false" implementationClassName="oracle.jdbc.xa.client.OracleXADataSource" >
<classpath>${ORACLE_JDBC_DRIVER_PATH}/ojdbc7.jar</classpath>

理想情况下,resources.xml 文件应该是这样的(最后带有 xa 属性)

<resources.jdbc:JDBCProvider xmi:id="JDBCProvider_1518484995940" name="Oracle JDBC Driver (XA)" description="Oracle JDBC Driver (XA)" providerType="Oracle JDBC Driver (XA)" isolatedClassLoader="false" implementationClassName="oracle.jdbc.xa.client.OracleXADataSource" **xa="true"**>
        <classpath>${ORACLE_JDBC_DRIVER_PATH}/ojdbc7.jar</classpath>

该应用程序在生产中运行良好,没有任何问题。

问题是如果我们不在 JDBC 提供程序中提供“xa”属性,它将如何理解连接?

驱动实现类为:oracle.jdbc.xa.client.OracleXADataSource 连接方式均为XA getXAConnection() getXAConnection(java.lang.String userName, java.lang.String passwd)

那么当 WebSphere 在运行时获得连接时,默认情况下应该是 XA 连接吗?

我还与 DBA 检查并确认数据库已启用 XA。

属性 xa=”true” 是必需的吗?如果不提供,默认值会变成“false”吗?

感谢您的帮助!!

标签: webspheredatasourcexa

解决方案


我对 xa=true/false 的理解是,在 JDBC 供应商提供的情况下,它有助于阐明需要哪种数据源接口类型(支持 xa 的 javax.sql.XADataSource 与不支持 xa 的 javax.sql.ConnectionPoolDataSource)同时实现两个接口的数据源类。在 JDBC 供应商只实现其中一个接口的情况下,我们假设您正在使用的 oracle.jdbc.xa.client.OracleXADataSource 就是这种情况,应用程序服务器能够确定您确实需要 javax.sql。 XADataSource 因为它是该类实现的唯一接口。鉴于 javax.sql.XADataSource 仅创建 java.sql.XAConnection,在您的情况下,您将始终使用具有两阶段提交能力的 XAConnection。

至于是否需要 xa 属性,我会回答您应该始终包含它,以确保清晰和与 WAS UI 保持一致,并防止 JDBC 供应商在未来版本的他们的驱动程序可以更新他们的数据源实现以实现这两个接口,在这种情况下,需要 xa=true 属性来区分。


推荐阅读