5.2. 使用 API 方法为回滚配置事务
系统级别错误导致的例外,标记进行回滚的事务。您可以通过注入 TransactionManager 来以编程方式标记事务。
流程
注入
TransactionManager并使用setRollbackOnly设置回滚的事务:在本例中,事务上下文被传播到
@Transactional方法中嵌套的所有调用(subDAO.addToGiftList ()和santaDAO.addToSantaTodoList ())。事务管理器提交事务,除非运行时异常超过方法边界。src/main/java/org/acme/SantaClausService.java 示例
import javax.transaction.Transactional; import javax.inject.Inject; import javax.transaction.SystemException; import javax.transaction.UserTransaction; @ApplicationScoped public class SantaClausService { @Inject TransactionManager tm;1 @Inject ChildDAO childDAO; @Inject SantaClausDAO santaDAO; @Transactional public void getAGiftFromSanta(Child child, String giftDescription) { // some transaction work Gift gift = childDAO.addToGiftList(child, giftDescription); if (gift == null) { tm.setRollbackOnly();2 } else { santaDAO.addToSantaTodoList(gift); } } }