关于JTA事务提交的疑问?
在使用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修改过]