JTA的小实践

通常事务是实现业务逻辑很重要的部分. 而JavaEE一个重要的功能就是提供声明性的事务管理, 支持自动的提交和回滚. 整个过程只需要配置, 不需要写一行代码, 极大的简化了事务管理. 但同时JavaEE也定义了Java Transaction API (JTA), 这样就容许我们在应用层面可以实现一些更复杂的事务控制.

JTA包括涉及到事务的三个角色, 例如Application, Server, 事务中的Resource.

Application发起和提交事务, 即定义事务的边界.

Server监听事务的状态,处理事务流程.

Resource即是事务处理的资源, 例如我们熟悉的JDBC, JMS等.



Weblogic提供一个单例weblogic.transaction.TransactionHelper, 我们可以使用这个Helper类得到当前的TransactionManager,Transaction.

从此入手, 我们可以就可以调用JTA提供的接口.

例如在服务器侧(一个EJB事务内)挂起或继续当前事务.

例如:
TransactionHelper transactionHelper = TransactionHelper.getTransactionHelper();
Transaction tx = transactionHelper.getTransaction();
if (null != tx && tx.getStatus() == Status.STATUS_ACTIVE){
    transactionHelper.getTransactionManager().suspend();
    //...
    transactionHelper.getTransactionManager().resume(tx);
}


另外我们通过JTA也可以来在事务提交前后加入自己客户化的一些同步操作.

这个是通过注册 javax.transaction.Synchronization的类来实现. 这个interface有两个方法:

afterCompletion(int status);

beforeCompletion();


假设我们想统计事务提交的状态, 我们可以实现afterCompletion(int status)方法, 然后将这个实现类TransactionStatistic注册到Transaction上.  这样在transaction提交或回滚后, 系统就会回调我们实现afterCompletion()方法. 而这个统计方法不会影响事务本身的逻辑,并且和业务方法解耦,提高系统的正交性.
TransactionStatistic sync=new TransactionStatistic();//implements  Synchronization

Transaction tx = TransactionHelper.getTransactionHelper().getTransaction();
tx.registerSynchronization(sync);


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值