由于CMT依靠容器开始、提交和回滚事务,所以会限制事务的边界位置,并且CMT不支持嵌套事务,Bean管理事务支持嵌套事务,所以需要嵌套事务时可以采用Bean管理事务。同时,BMT允许通过编程的方式来指定事务的开始、提交和回滚的位置。主要使用的是javax.transaction.UserTransaction接口。
BMT事务
如下面代码:
Java代码
@Stateless)
@TransactionManagement(TransactionManagementType.BEAN)
public class OrderManagerBean {
@Resource
private UserTransaction userTransaction;
public void placeSnagItOrder(Item item, Customer customer){
try {
userTransaction.begin();
if (!bidsExisting(item)){
validateCredit(customer);
chargeCustomer(customer, item);
removeItemFromBidding(item);
}
userTransaction.commit();
} catch (CreditValidationException cve) {
userTransaction.rollback();
} catch (CreditProcessingException cpe){
userTransaction.rollback();
} catch (DatabaseException de) {
userTransaction.rollback();
} catch (Exception e) {
e.printStackTrace();
}
}