PS:在寫這段代碼的時候,還發現了一個細節,就是try...catch代碼塊后面的代碼,在發生異常的時候,會能執行到的。所以B回滾的代碼:throw e,是不需要放在finally里面的,也就是說,只要B事務發生異常,無論A補償是否成功,B都可以成功的回滾。
但是經過和別人的討論,發現此處嚴謹來說,還是應該放在finally代碼塊中,因為如果catch塊里面有throw 的需求,或者catch的異常范圍不是所有的exception,下面的代碼就執行不到了。
所以最終代碼,應該是這樣,確保B回滾成功。
經過驗證,這段代碼是有問題的,A能成功補償,但是B卻不能成功回滾,但是單獨執行B,可以回滾,原因未知。。。。。。。。待繼續優化!