我在书中读过:
通常,容器在企业bean方法启动之前立即开始事务。它在方法退出之前提交事务。
假设我的有状态EJB暴露了3种业务方法,客户端依次调用这3种方法,并希望在单个事务中运行这3种方法。这些方法将在多个请求中调用。
现在规范说该事务在方法退出之前提交。如果我的第一种方法成功且第二(或第三)方法失败,我将如何能够回滚整个事务?
请注意,我不想使用创建自己的事务边界。
任何帮助或正确方向的指针都将受到高度赞赏。
答案 0 :(得分:0)
在bean中创建一个调用所有其他3种方法的方法。然后他们将在同一笔交易中。
答案 1 :(得分:0)
您正在使用有状态会话bean充当缓冲区。并且您希望围绕多个呼叫进行交易。
从设计的角度来看,如果事务是从单个请求启动并提交/回滚的(例如,在单个HttpServletRequest
内),则没关系。在这种情况下,您可以使用UserTransaction
跨多次调用EJB来跨越事务。但是UserTransaction
绑定到当前线程,因此可能很难将其传递给下一个请求。
如果您从不同的请求启动并提交,则无法控制事务的持续时间:现在客户端控制事务。如果该客户端崩溃,则在达到事务超时之前不会回滚事务。因此,在这种情况下的建议是缓冲在HttpSession
中。如果已收集所有数据,请调用(无状态)EJB以保留它。