#javax.sql.XADataSource
# 描述
XADataSource接口用于获取XAConnection对象。
javax.sql.XADataSource是JDBC规范中用于创建支持分布式事务(XA事务)的数据库连接(XAConnection)的核心接口,XADataSource专门生产XAConnection实例,让每个连接都能被XA事务管理器管控,从而实现跨多个数据库或资源的分布式事务一致性。
详细接口说明请参考JDBC官方网站 (opens new window)。
# 方法
YashanDB JDBC驱动对XADataSource接口有如下方法:
| 方法 | 返回类型 |
|---|---|
| getXAConnection() throws SQLException; | XAConnection |
| getXAConnection(String user, String password) throws SQLException; | XAConnection |
Note:
YashanDB的XADataSource实现为YasXADataSource,该实现同时继承了javax.sql.DataSource,所以javax.sql.DataSource中支持的方法在YasXADataSource上均可调用。
# 示例
package quickstart;
import javax.sql.XADataSource;
import javax.sql.XAConnection;
import javax.transaction.xa.XAResource;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class XADataSourceExample {
// 创建 YashanDB XADataSource
public XADataSource createXADataSource() throws SQLException {
com.yashandb.xa.YasXADataSource ds = new com.yashandb.xa.YasXADataSource();
ds.setServerName("192.168.1.2");
ds.setPortNumber(1688);
ds.setDatabaseName("yasdb");
ds.setUser("username");
ds.setPassword("passwd");
return ds;
}
// 使用 XADataSource 获取 XAConnection
public void useXADataSource(XADataSource xaDS) throws SQLException {
// 获取 XA 连接
XAConnection xaConn = xaDS.getXAConnection();
try {
// 获取 XAResource
XAResource xaRes = xaConn.getXAResource();
System.out.println("XAResource available");
// 获取普通连接
try (Connection conn = xaConn.getConnection()) {
try (Statement stmt = conn.createStatement()) {
try (ResultSet rs = stmt.executeQuery("SELECT 1 FROM dual")) {
if (rs.next()) {
System.out.println("Query result: " + rs.getInt(1));
}
}
}
}
} finally {
xaConn.close();
}
}
public static void main(String[] args) {
try {
XADataSourceExample example = new XADataSourceExample();
XADataSource xaDS = example.createXADataSource();
example.useXADataSource(xaDS);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
正常情况下,程序输出如下:
XAResource available
Query result: 1

