JTA事务总结(一)

自:http://blog.sina.com.cn/s/blog_661a3fce0100mshi.html

今天在weblogic在对几种JTA的应用场景进行了测试,总结如下:

测试代码片段:

public void doTest()throws Exception{
UserTransaction tx = null;
try{
Context ctx = new InitialContext();
tx = (UserTransaction)ctx.lookup("javax.transaction.UserTransaction");
tx.begin();

doResource1();
doResource2();

tx.commit();
}catch(Exception e){
e.printStackTrace();
if(tx != null){
tx.rollback();
}
}
}

private void doResource1()throws Exception{
...
DataSource ds = (DataSource) ctx.lookup("A|B|C|D|E");
con = ds.getConnection();
...
}

private void doResource2()throws Exception{
...
DataSource ds = (DataSource) ctx.lookup("A|B|C|D|E");
con = ds.getConnection();
...
}

共创建了五个连接池以及对应的数据源

A: OracleLocalDataSource
B: OracleLocalDataSource2
C: OracleXADataSource
D: OracleXADataSource2
E: MysqlLocalDataSource

A、B:【oracle.jdbc.driver.OracleDriver】
C、D:【oracle.jdbc.xa.client.OracleXADataSource】
E:【org.gjt.mm.mysql.Driver】

Mysql没有支持分布式的XA驱动程序


对于doResource1和doResource2所用不同数据源类型搭配测试情况如下:

[A-A]:运行成功,且weblogic进行了优化,两次操作获得的con其实是同一个连接对象
[A-B]:运行失败,不允许在一次事务中从不同的数据库获取local事务类型的连接
[A-E]:运行失败,不允许在一次事务中从不同的数据库获取local事务类型的连接
[A-D]:在允许Emulate Two-Phase Commit for non-XA Driver的情况下成功,否则失败
[C-C]:运行成功,但是不像(A-A)的情况,两次获得con的对象不是同一个对象,weblogic并为对该情况进行优化
[C-D]:运行成功,这是典型的2PC(two-phase transaction commit process)用于分布式多资源的应用情况

对于C、D的XA类型驱动程序,weblogic默认不允许通过con.setAutoCommit(false)的方式进行事务启动,可以通过允许(Supports Local Transaction)选项启动本地事务。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值