JPA ?两段式提交? No !我们要的是简单、自由!框架的核心代码如类图。
注意:
如果失败策略为默认即抛出异常,则会被 TransactionManager 捕获并触发 rollback() 然后执行一系列的 undo() ;如果失败策略为重试,则异常将被 RetryFailStrategy 自己消化掉,到不了 TransactionManager 这里。
如何使用:
XXBiz @Autowired private TransactionManager transactionManager; @Autowired private FailStrategy defaultFailStrategy; private void doSomething(final int id) { transactionManager.doInTransaction(new TransactionCallback() { @Override public void doInTransaction(Transaction transaction) { transaction.execute(new Operation1(id)); transaction.execute(new Operation2(id)); ... } }); } private class Operation1 implements Operation<Object> { private final int id; public Operation1(int id) { this.id = id; } @Override public Object doIt() { // insert with id; return null; } @Override public void undo() { // delete by id; } @Override public FailStrategy getFailStrategy() { return defaultFailStrategy; } }