Search in sources :

Example 1 with AbstractDataSourceProxyXA

use of io.seata.rm.datasource.xa.AbstractDataSourceProxyXA in project seata by seata.

the class XAModeTest2 method doTestXAModeNormalCasePhase2.

private void doTestXAModeNormalCasePhase2(boolean globalCommit, String mockXid, Long mockBranchId) throws Throwable {
    // init DataSource: helper
    DruidDataSource helperDS = createNewDruidDataSource();
    Connection helperConn = null;
    Statement helperStat = null;
    ResultSet helperRes = null;
    // init RM
    initRM();
    AbstractDataSourceProxyXA dataSourceProxyXA = null;
    if (nativeXA) {
        // init XADataSource runnerXA
        XADataSource runnerXADS = createNewNativeXADataSource();
        dataSourceProxyXA = new DataSourceProxyXANative(runnerXADS);
    } else {
        // init DataSource: runner
        DruidDataSource runnerDS = createNewDruidDataSource();
        dataSourceProxyXA = new DataSourceProxyXA(runnerDS);
    }
    // Global Tx Phase 2:
    if (globalCommit) {
        DefaultResourceManager.get().branchCommit(dataSourceProxyXA.getBranchType(), mockXid, mockBranchId, dataSourceProxyXA.getResourceId(), null);
        // have a check
        helperConn = helperDS.getConnection();
        helperStat = helperConn.createStatement();
        helperRes = helperStat.executeQuery("select * from test where id = " + testRecordId);
        // should see the test record now
        Assertions.assertTrue(helperRes.next());
        Assertions.assertEquals(helperRes.getInt(1), testRecordId);
        Assertions.assertEquals(helperRes.getString(2), testRecordName);
        helperRes.close();
        helperStat.close();
        helperConn.close();
    } else {
        DefaultResourceManager.get().branchRollback(dataSourceProxyXA.getBranchType(), mockXid, mockBranchId, dataSourceProxyXA.getResourceId(), null);
        // have a check
        helperConn = helperDS.getConnection();
        helperStat = helperConn.createStatement();
        helperRes = helperStat.executeQuery("select * from test where id = " + testRecordId);
        // should NOT see the test record now
        Assertions.assertFalse(helperRes.next());
        helperRes.close();
        helperStat.close();
        helperConn.close();
    }
    System.out.println("Phase2 looks good!");
}
Also used : AbstractDataSourceProxyXA(io.seata.rm.datasource.xa.AbstractDataSourceProxyXA) DataSourceProxyXA(io.seata.rm.datasource.xa.DataSourceProxyXA) XADataSource(javax.sql.XADataSource) MysqlXADataSource(com.mysql.jdbc.jdbc2.optional.MysqlXADataSource) DruidXADataSource(com.alibaba.druid.pool.xa.DruidXADataSource) PGXADataSource(org.postgresql.xa.PGXADataSource) DataSourceProxyXANative(io.seata.rm.datasource.xa.DataSourceProxyXANative) Statement(java.sql.Statement) Connection(java.sql.Connection) XAConnection(javax.sql.XAConnection) ResultSet(java.sql.ResultSet) DruidDataSource(com.alibaba.druid.pool.DruidDataSource) AbstractDataSourceProxyXA(io.seata.rm.datasource.xa.AbstractDataSourceProxyXA)

Example 2 with AbstractDataSourceProxyXA

use of io.seata.rm.datasource.xa.AbstractDataSourceProxyXA in project seata by seata.

the class XAModeTest2 method doTestXAModeNormalCasePhase1.

private void doTestXAModeNormalCasePhase1(String mockXid, Long mockBranchId) throws Throwable {
    // init DataSource: helper
    DruidDataSource helperDS = createNewDruidDataSource();
    Connection helperConn = null;
    Statement helperStat = null;
    ResultSet helperRes = null;
    // init RM
    initRM();
    AbstractDataSourceProxyXA dataSourceProxyXA = null;
    if (nativeXA) {
        // init XADataSource runnerXA
        XADataSource runnerXADS = createNewNativeXADataSource();
        dataSourceProxyXA = new DataSourceProxyXANative(runnerXADS);
    } else {
        // init DataSource: runner
        DruidDataSource runnerDS = createNewDruidDataSource();
        dataSourceProxyXA = new DataSourceProxyXA(runnerDS);
    }
    // Global Tx Phase 1:
    RootContext.bind(mockXid);
    Connection testConn = dataSourceProxyXA.getConnection();
    Statement testStat = testConn.createStatement();
    // >>> insert the test record with XA mode
    testStat.execute("insert into test(id, name) values(" + testRecordId + ", '" + testRecordName + "')");
    // >>> close the statement and connection
    testStat.close();
    testConn.close();
    RootContext.unbind();
    // have a check
    helperConn = helperDS.getConnection();
    helperStat = helperConn.createStatement();
    helperRes = helperStat.executeQuery("select * from test where id = " + testRecordId);
    // should NOT see the record(id=888) now
    Assertions.assertFalse(helperRes.next());
    helperRes.close();
    helperStat.close();
    helperConn.close();
    if (JdbcUtils.MYSQL.equals(dbType)) {
        XAXid xaXid = XAXidBuilder.build(mockXid, mockBranchId);
        dataSourceProxyXA.forceClosePhysicalConnection(xaXid);
    }
    System.out.println("Phase1 looks good!");
}
Also used : AbstractDataSourceProxyXA(io.seata.rm.datasource.xa.AbstractDataSourceProxyXA) DataSourceProxyXA(io.seata.rm.datasource.xa.DataSourceProxyXA) XADataSource(javax.sql.XADataSource) MysqlXADataSource(com.mysql.jdbc.jdbc2.optional.MysqlXADataSource) DruidXADataSource(com.alibaba.druid.pool.xa.DruidXADataSource) PGXADataSource(org.postgresql.xa.PGXADataSource) DataSourceProxyXANative(io.seata.rm.datasource.xa.DataSourceProxyXANative) Statement(java.sql.Statement) Connection(java.sql.Connection) XAConnection(javax.sql.XAConnection) ResultSet(java.sql.ResultSet) XAXid(io.seata.rm.datasource.xa.XAXid) DruidDataSource(com.alibaba.druid.pool.DruidDataSource) AbstractDataSourceProxyXA(io.seata.rm.datasource.xa.AbstractDataSourceProxyXA)

Example 3 with AbstractDataSourceProxyXA

use of io.seata.rm.datasource.xa.AbstractDataSourceProxyXA in project seata by seata.

the class XAModeTest2 method doTestXAModeNormalCaseAllInOne.

private void doTestXAModeNormalCaseAllInOne(String mockXid, Long mockBranchId) throws Throwable {
    // init DataSource: helper
    DruidDataSource helperDS = createNewDruidDataSource();
    Connection helperConn = null;
    Statement helperStat = null;
    ResultSet helperRes = null;
    // init RM
    initRM();
    AbstractDataSourceProxyXA dataSourceProxyXA = null;
    if (nativeXA) {
        // init XADataSource runnerXA
        XADataSource runnerXADS = createNewNativeXADataSource();
        dataSourceProxyXA = new DataSourceProxyXANative(runnerXADS);
    } else {
        // init DataSource: runner
        DruidDataSource runnerDS = createNewDruidDataSource();
        dataSourceProxyXA = new DataSourceProxyXA(runnerDS);
    }
    // Global Tx Phase 1:
    RootContext.bind(mockXid);
    Connection testConn = dataSourceProxyXA.getConnection();
    Statement testStat = testConn.createStatement();
    // >>> insert the test record with XA mode
    testStat.execute("insert into test(id, name) values(" + testRecordId + ", '" + testRecordName + "')");
    // >>> close the statement and connection
    testStat.close();
    testConn.close();
    RootContext.unbind();
    // have a check
    helperConn = helperDS.getConnection();
    helperStat = helperConn.createStatement();
    helperRes = helperStat.executeQuery("select * from test where id = " + testRecordId);
    // should NOT see the record(id=888) now
    Assertions.assertFalse(helperRes.next());
    helperRes.close();
    helperStat.close();
    helperConn.close();
    // Global Tx Phase 2: run phase 2 with the same runner DS
    DefaultResourceManager.get().branchCommit(dataSourceProxyXA.getBranchType(), mockXid, mockBranchId, dataSourceProxyXA.getResourceId(), null);
    // have a check
    helperConn = helperDS.getConnection();
    helperStat = helperConn.createStatement();
    helperRes = helperStat.executeQuery("select * from test where id = " + testRecordId);
    // should see the test record now
    Assertions.assertTrue(helperRes.next());
    Assertions.assertEquals(helperRes.getInt(1), testRecordId);
    Assertions.assertEquals(helperRes.getString(2), testRecordName);
    helperRes.close();
    helperStat.close();
    helperConn.close();
    System.out.println("All in one looks good!");
}
Also used : AbstractDataSourceProxyXA(io.seata.rm.datasource.xa.AbstractDataSourceProxyXA) DataSourceProxyXA(io.seata.rm.datasource.xa.DataSourceProxyXA) XADataSource(javax.sql.XADataSource) MysqlXADataSource(com.mysql.jdbc.jdbc2.optional.MysqlXADataSource) DruidXADataSource(com.alibaba.druid.pool.xa.DruidXADataSource) PGXADataSource(org.postgresql.xa.PGXADataSource) DataSourceProxyXANative(io.seata.rm.datasource.xa.DataSourceProxyXANative) Statement(java.sql.Statement) Connection(java.sql.Connection) XAConnection(javax.sql.XAConnection) ResultSet(java.sql.ResultSet) DruidDataSource(com.alibaba.druid.pool.DruidDataSource) AbstractDataSourceProxyXA(io.seata.rm.datasource.xa.AbstractDataSourceProxyXA)

Aggregations

DruidDataSource (com.alibaba.druid.pool.DruidDataSource)3 DruidXADataSource (com.alibaba.druid.pool.xa.DruidXADataSource)3 MysqlXADataSource (com.mysql.jdbc.jdbc2.optional.MysqlXADataSource)3 AbstractDataSourceProxyXA (io.seata.rm.datasource.xa.AbstractDataSourceProxyXA)3 DataSourceProxyXA (io.seata.rm.datasource.xa.DataSourceProxyXA)3 DataSourceProxyXANative (io.seata.rm.datasource.xa.DataSourceProxyXANative)3 Connection (java.sql.Connection)3 ResultSet (java.sql.ResultSet)3 Statement (java.sql.Statement)3 XAConnection (javax.sql.XAConnection)3 XADataSource (javax.sql.XADataSource)3 PGXADataSource (org.postgresql.xa.PGXADataSource)3 XAXid (io.seata.rm.datasource.xa.XAXid)1