`
VerRan
  • 浏览: 452231 次
  • 性别: Icon_minigender_1
  • 来自: 陕西.西安
社区版块
存档分类
最新评论

JTA 事务使用

阅读更多

业务场景:

客户下发订单后,订单到竣工需要走三个岗位1,2,3包括两个迁移过程:

1-》2的迁移 实现方式为无状态EJB,容器控制事务

2-》3的迁移 实现方式为无状态EJB,容器控制事务

备注:2-》3的迁移中还调用其它系统的EJB和RMI服务,webservice服务。相对复杂。

 

现在将1-》2 的状态迁移和2-3的迁移放置在一起给外围系统提供接口(EJB实现),同时需要控制1-》2,2->3迁移过程中的事务,当2-》3失败的时候,不影响1->2的事务提交。

 

解决思路:

1. 使用无状态EJB再次进行封装后,如果使用容器控制失误,则1-》2和2-》3的事务无法分离控制。舍弃

2. 将1-》2和2->3分别提供给外围系统,然后由调用方自己控制。 此方案尽量避免,给外围系统的接口尽量简单符合业务场景。(最坏的方案)

3. 使用JTA进行事务控制。

 

使用JTA控制事务的步骤:

1. 获取javax.transaction.UserTransaction userTransaction = sessionContext

.getUserTransaction();

2. 执行第一次状态迁移

userTransaction.begin();

1-》2

userTransaction.commit();

3. 执行第二次状态迁移

userTransaction.begin();

2-》3

userTransaction.commit();

4. 配置文件设置 将EJB的事务控制类型设置为Bean <transaction-type>Bean</transaction-type>

 

这样就实现了对容器控制事物EJB 的分离事务控制。

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics