【发布时间】:2014-11-26 22:59:27
【问题描述】:
我正在阅读 this blog 关于容器管理事务中的事务处理。
作者明确区分了EJB事务和数据库事务。 数据库事务只是 EJB 事务之一。
考虑这个例子:
进行货币交易。这不仅改变了一个或多个数据库中的一些数字。管理、通知、确认和验证也在进行中。
基于此示例考虑以下无状态 bean,
@Stateless
public class MoneyTransactionBean {
public void MoneyTransfer(int amount, BankAccount from, BankAccount to){
//db transaction
/ // adminstration transaction //JMS
// confirmation //JMS
// Notification //JSP
// validation //EJB
// email //JMAIL
}
}
场景 1: 如果 Notification 步骤失败,与 Confirmation 关联的 JMS 事务是否会回滚?换句话说,JMS 消息是否会出队,即 Notification 事件会从 JMS 队列中清除?
场景 2:
如果所有单个事务(在各个 bean 上调用)都成功但 Validation 失败,来自确认步骤的 JMS 消息是否会回滚并且电子邮件是否会出队?
这种情况下事务的回滚是如何发生的?
【问题讨论】:
标签: jakarta-ee transactions ejb-3.1 stateless-session-bean