2012-08-04 49 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

相关问题