我使用的即使UserTransaction,但是无法管理两个数据库的事务。远程序如下:
InitialContext ctx = getInitialContext(); UserTransaction transaction=(UserTransaction)ctx.lookup("javax.transaction.UserTransaction");
try{
System.out.println("begin"); javax.sql.DataSource ds1 = (javax.sql.DataSource)ctx.lookup("GadbTest");
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("JTSTest");
transaction.begin() ; System.out.println(" get conn1");
conn1= ds.getConnection() ;
String sql="insert into test1 values('1','2')";
stmt = conn1.createStatement();
int jj = stmt.executeUpdate(sql);
conn1.close();
System.out.println(" get conn2"); conn2 = ds1.getConnection();(程序执行到此句是报错) System.out.println("get connection success");
sql = "insert into table1 values('h')";
stmt1 = conn2.createStatement();
System.out.println(" excute sql2");
int qq = stmt1.executeUpdate(sql);
if(qq == 1){
System.out.println("throw new exception");
throw new Exception();
} transaction.commit() ; System.out.println("end");
}
InitialContext ctx = getInitialContext(); UserTransaction transaction=(UserTransaction)ctx.lookup("javax.transaction.UserTransaction");
try{
System.out.println("begin"); javax.sql.DataSource ds1 = (javax.sql.DataSource)ctx.lookup("GadbTest");
javax.sql.DataSource ds = (javax.sql.DataSource)ctx.lookup("JTSTest");
transaction.begin() ; System.out.println(" get conn1");
conn1= ds.getConnection() ;
String sql="insert into test1 values('1','2')";
stmt = conn1.createStatement();
int jj = stmt.executeUpdate(sql);
conn1.close();
System.out.println(" get conn2"); conn2 = ds1.getConnection();(程序执行到此句是报错) System.out.println("get connection success");
sql = "insert into table1 values('h')";
stmt1 = conn2.createStatement();
System.out.println(" excute sql2");
int qq = stmt1.executeUpdate(sql);
if(qq == 1){
System.out.println("throw new exception");
throw new Exception();
} transaction.commit() ; System.out.println("end");
}
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货