Dojo
最新
最佳
搜索
订阅
解道Jdon
架构设计
领域驱动
DDD介绍
DDD专辑
战略建模
领域语言UL
领域事件
商业分析
工作流BPM
规则引擎
架构师观点
数据工程
产品经理
系统思维
微服务
微服务介绍
微服务专辑
模块化设计
SOA
API设计
clean架构
SpringBoot
分布式事务
分布式架构
Kubernetes
DevOps
编程设计
GoF设计模式
模式专辑
面向对象
函数式编程
编程语言比较
编程工具比较
形式逻辑
前端编程
Reactive编程
Jdon框架
Rust语言
ChatGPT
Web3
模因梗
幽默梗
程序员吐槽
面试技巧
Java入门
数字化转型
认知偏差
道德经
GitHub工具
更多话题
关于JTA事务提交的疑问?
08-05-22
xmuzyu
在使用CMT的JTA时,每次调用一个业务方法之前(假设方法的事务属性是required),如果客户没有开启事务的话,容器就会新建一个事务,然后在业务方法结束的时候,提交或者回滚事务,问题是假如我在一个sessionBean的业务方法里调用了另一个sessionBean的业务方法,事务什么时候提交呢?是在调用另一个sessionBean的业务方法之前提交,还是等第二个业务方法结束后才提交事务。比如如下代码:orderProcess通过容器注入,
@EJB
OrderProcessFacade orderProcess;
public void processOrder(Customer customer) {
if(manager.contains(customer)){
customer.setCartItems(cartItems);
}else{
customer = manager.find(Customer.class, customer.getId());
customer.setCartItems(cartItems);
}
manager.merge(customer); // 1
orderProcess.processOrder(customer);
}
在上述方法里,外层processOrder方法所在的事务是在执行完manager.merge(customer)后提交,还是在执行orderProcess.processOrder(customer)后提交。
[该贴被xmuzyu于2008-05-22 18:44修改过]
Mrcaochong
2008-05-22 22:23
//第一种情况 没有采用事务代理模式(AOP编程)
第一个业务方法 开启事物
另一个业务方法(传递第一个业务方法开始事务的对象)
两个业务方法执行结束后 commit();否则一起rollback();
//第二种 采用事务代理模式
就不需要去担心什么时候该开启事务 什么时候提交事务
在代理类中统一开启事务 统一关闭
xmuzyu
2008-05-23 02:08
那CMT应该属于你所说的第二种方式,如果是第二种方式,我想弄清楚到底外层processOrder()所在的事务是什么时候结束的,EJB不支持嵌入式事务,所以我想应该是外层方法所在的事务先提交,然后内层方法在一个新的事务里执行,我这样理解对吗?请各位指点。多谢了。
banq
2008-05-26 10:31
>事务什么时候提交呢?
EJB事务在JBOss4中已经使用AOP拦截器实现,这就类似Spring的事务拦截器,都是在EJB方法执行之前激活事务,,方法结束后关闭事务,如果方法中有调用其他EJB,一般采取扁平事务,而不是嵌套事务,扁平事务就是将子事务纳入当前事务作为同一个事务。
JTA事务
事务架构