2012-08-04 48 views
0

我有一種情況,我們更新實體數據,然後基於某種類型的更新,我們也可能更新另一個實體。回滾失敗情況的變化

有些情況下,第二個條目中的更新可能由於某些原因而失敗並拋出異常。

問題是如何處理這種情況,因爲我們想回滾在第一個實體中完成的更改。

我們不能將更新推遲到第一個條目,直到第二個條目更新。

在當前形勢下,如果認爲只要代碼到達下面的框,然後發生

那麼它會犯的第一個條目的變化甚至還有在第二實體更新失敗。那麼如何回滾?如果第二個實體更新失敗,我認爲不關閉persistentManager不是正確的選擇。

finally { 
      try { 
       if (pm != null && pm.isClosed() == false) 
        pm.close(); 
      } catch (Exception e) { 
       log.severe("Exception in finally of execute of updateDonor"); 
       log.severe("Exception class is :" + e.getClass().getName()); 
       log.severe("Exception is :" + e.getMessage()); 
       throw new Exception(e.getMessage() 
         + "Unable to close persistence manager"); 
      } 
      log.info("end of updateDonor"); 
     } 

回答

1

我不知道我完全理解你的處境,但將cross-group(XG)交易,允許交易從一個以上的實體組被應用到實體,將你在找什麼呢?搜索'this page上的跨組交易。對於XG交易,交易包含的實體的所有更改都會通過,否則都不會。

+0

看起來不錯amy。試試吧 – Vik 2012-08-04 17:27:03

+0

那麼我們使用的是jdo,所以看起來像我們需要在jdoconfig.xml中啓用所有實體才能運行跨組事務。但是,我沒有看到jdo案例的頁面上的代碼?我的意思是如何開始txn並完成它?爲了清除我的需求,我們希望將原子更新運行到兩個不同的實體。 – Vik 2012-08-04 17:30:35

相關問題