我需要执行几个方法调用,需要“事务性”但我不确定如何在try / catch / finally之外实现它。
背景
我想弄清楚
我想确保在请求注销时我想确保整个过程全部成功,或者根本不成功。例如,我不希望清理数据库,清理会话ID并注销操作失败(因此登录仍然有效)。
理想情况下,解决方案会在故障时“回滚”,从而确保维持先前的状态。
是否有一种灵活的方法来实现这一目标,还是我坚持使用一系列嵌套的try / catch / finally块来实现这一目标?
答案 0 :(得分:1)
如果要实现某种rollback
方法,则必须存储撤消数据,以便在发生故障时回滚所需的所有内容。
这将允许您在代码中的任何位置在发生错误时回滚到先前的状态。
答案 1 :(得分:0)
“整洁”可能意味着这样的事情? (http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html)
但是我更喜欢你提到的KISS结构......至少在实现复杂的语言/资源构造之前一直坚持工作......让它工作......然后让它更漂亮/更快/解耦/ ..
答案 2 :(得分:0)
对于这个问题的任何偶然的瞥视,不假设try / catch块是继承原子的。他们不:
代码证明:
public class TransactionTest {
private class Thing {
public int number = 1;
public String thingName = "Marge";
}
public static void main(String args[]) {
new TransactionTest();
}
public TransactionTest() {
transactionExperiment();
}
private void transactionExperiment() {
Thing t = new Thing();
try {
System.out.println("Original name: " + t.thingName);
t.thingName = "Homer";
throw new IllegalArgumentException("Throw exception deliberately");
}
catch(IllegalArgumentException e) {
System.out.println("Caught exception");
}
System.out.println("Thing is: " + t.thingName);
}
}
<强>输出:强>