[英]How to make a series of non database methods mimic transactions.
我需要執行幾個方法調用,需要“事務性”但我不確定如何在try / catch / finally之外實現它。
背景
我想弄清楚的是什么
我想確保在請求注銷時我想確保整個過程全部成功,或者根本不成功。 例如,我不希望清理數據庫,清理會話ID並注銷操作失敗(因此登錄仍然有效)。
理想情況下,解決方案將在故障時“回滾”,從而確保維持先前的狀態。
有沒有一個光滑的方法來實現這一點,或者我堅持使用一系列嵌套的try / catch / finally塊來實現這一目標?
如果要實現某些rollback
方法,則必須存儲撤消數據,以便在發生故障時回滾所需的所有內容。
這將允許您在代碼中的任何位置在發生錯誤時回滾到先前的狀態。
“整潔”可能意味着這樣的事情? ( http://static.springsource.org/spring/docs/2.0.x/reference/transaction.html )
但是我更喜歡像你提到的KISS結構......至少在實現復雜的語言/資源構造之前一直堅持工作......讓它工作......然后讓它更美觀/快速/解耦/ ...
對於這個問題的任何偶然的問題, 不要認為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);
}
}
輸出:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.