序
本文主要研究一下sharding-jdbc的SingleXADataSource
SingleXADataSource
incubator-shardingsphere-4.0.0-RC1/sharding-transaction/sharding-transaction-2pc/sharding-transaction-xa/sharding-transaction-xa-core/src/main/java/org/apache/shardingsphere/transaction/xa/jta/datasource/SingleXADataSource.java
public final class SingleXADataSource extends AbstractUnsupportedSingleXADataSource {
@Getter
private final String resourceName;
@Getter
private final XADataSource xaDataSource;
private final DatabaseType databaseType;
private final DataSource originalDataSource;
private final boolean isOriginalXADataSource;
public SingleXADataSource(final DatabaseType databaseType, final String resourceName, final DataSource dataSource) {
this.databaseType = databaseType;
this.resourceName = resourceName;
originalDataSource = dataSource;
if (dataSource instanceof XADataSource) {
xaDataSource = (XADataSource) dataSource;
isOriginalXADataSource = true;
} else {
xaDataSource = XADataSourceFactory.build(databaseType, dataSource);
isOriginalXADataSource = false;
}
}
@Override
public SingleXAConnection getXAConnection() throws SQLException {
return isOriginalXADataSource ? getXAConnectionFromXADataSource() : getXAConnectionFromNoneXADataSource();
}
private SingleXAConnection getXAConnectionFromXADataSource() throws SQLException {
XAConnection xaConnection = xaDataSource.getXAConnection();
return new SingleXAConnection(resourceName, xaConnection.getConnection(), xaConnection);
}
private SingleXAConnection getXAConnectionFromNoneXADataSource() throws SQLException {
Con