import com.gbasedbt.jdbcx.IfxXADataSource;
import com.gbasedbt.jdbcx.IfxXid;
import javax.sql.XAConnection;
import javax.transaction.xa.XAResource;
import javax.transaction.xa.Xid;
import java.sql.Connection;
import java.sql.SQLException;
import java.sql.Statement;
public class test {
public static void main(String[] args) throws Exception {
Class<?> aclass = Class.forName("com.gbasedbt.jdbc.Driver");
IfxXADataSource ifxXADataSource= new IfxXADataSource();
ifxXADataSource.setServerName("gbase330_2");
ifxXADataSource.setIfxIFXHOST("172.16.39.175");
ifxXADataSource.setDatabaseName("test");
ifxXADataSource.setPortNumber(9088);
ifxXADataSource.setDescription("xa datasource");
ifxXADataSource.setIfxCLIENT_LOCALE("zh_CN.utf8");
ifxXADataSource.setUser("gbasedbt");
ifxXADataSource.setPassword("123456");
XAConnection xaConnection1= ifxXADataSource.getXAConnection();
XAConnection xaConnection2= ifxXADataSource.getXAConnection();
Xid xid1= createXid(1);
Xid xid2= createXid(2);
Connection conn1 = xaConnection1.getConnection();
Connection conn2 = xaConnection2.getConnection();
XAResource xar1 = xaConnection1.getXAResource();
XAResource xar2 = xaConnection2.getXAResource();
xar1.start (xid1, XAResource.TMNOFLAGS);
xar2.start (xid2, XAResource.TMNOFLAGS);
DoSomeWork1(conn1);
DoSomeWork2(conn2);
xar1.end(xid1, XAResource.TMSUCCESS);
xar2.end(xid2, XAResource.TMSUCCESS);
int prp1 = xar1.prepare (xid1);
int prp2 = xar2.prepare (xid2);
boolean do_commit = false;
if(prp1==XAResource.XA_OK && prp2==XAResource.XA_OK)
do_commit=true;
if(do_commit){
xar1.commit(xid1,false);
xar2.commit(xid2,false);
}else{
xar1.rollback(xid1);
xar2.rollback(xid2);
}
conn1.close();
conn2.close();
xaConnection1.close();
xaConnection2.close();
}
static Xid createXid(int bids) throws Exception
{
byte[] gid = new byte[1]; gid[0]= (byte) 9;
byte[] bid = new byte[1]; bid[0]= (byte) bids;
byte[] gtrid = new byte[64];
byte[] bqual = new byte[64];
System.arraycopy (gid, 0, gtrid, 0, 1);
System.arraycopy (bid, 0, bqual, 0, 1);
Xid xid = new IfxXid(0x1234, gtrid, bqual);
return xid;
}
private static void DoSomeWork1 (Connection conn) throws SQLException
{
Statement stmt = conn.createStatement ();
stmt.executeUpdate ("insert into vv1 values (1)");
stmt.close();
}
private static void DoSomeWork2 (Connection conn) throws SQLException
{
Statement stmt = conn.createStatement ();
stmt.executeUpdate ("insert into vv2 values (1)");
stmt.close();
}
}
gbase8s数据库XADATASOURCE/两阶段提交简单案例
最新推荐文章于 2024-10-10 23:05:59 发布