本文源自他人设计,作者戴神看到请包涵~~
JPA ?两段式提交? No !我们要的是简单、自由!框架的核心代码如类图。
[img]http://dl2.iteye.com/upload/attachment/0117/3117/c00d62c0-2cc8-338f-aa6f-857d18a3f8d3.png[/img]
[color=red][b]注意:
如果失败策略为默认即抛出异常,则会被 TransactionManager 捕获并触发 rollback() 然后执行一系列的 undo() ;如果失败策略为重试,则异常将被 RetryFailStrategy 自己消化掉,到不了 TransactionManager 这里。[/b][/color]
如何使用:
JPA ?两段式提交? No !我们要的是简单、自由!框架的核心代码如类图。
[img]http://dl2.iteye.com/upload/attachment/0117/3117/c00d62c0-2cc8-338f-aa6f-857d18a3f8d3.png[/img]
[color=red][b]注意:
如果失败策略为默认即抛出异常,则会被 TransactionManager 捕获并触发 rollback() 然后执行一系列的 undo() ;如果失败策略为重试,则异常将被 RetryFailStrategy 自己消化掉,到不了 TransactionManager 这里。[/b][/color]
如何使用:
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;
}
}