2012-08-04 4 views
0

엔티티 데이터를 업데이트 한 다음 특정 유형의 업데이트를 기반으로 다른 엔티티도 업데이트 할 수 있습니다.오류 상황의 변경 롤백

두 번째 항목의 updation이 실패하여 예외가 발생할 수 있습니다.

문제는 첫 번째 엔티티에서 수행 된 변경 사항을 롤백하려는 경우에이 상황을 처리하는 방법입니다.

두 번째 항목이 업데이트 될 때까지 첫 번째 항목에 대한 업데이트를 연기 할 수 없습니다. 현재 상황에서

그 다음은 첫 번째 항목이 변경 커밋합니다 즉시 코드가 아래 블록에 도달으로 다음

을 발생하는 경우에도 2 개체 업데이트에 실패 있습니다. 그래서 롤백하는 방법? 두 번째 엔터티 업데이트가 실패한 경우 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

좋아요. 그것을 시도해보십시오 – Vik

+0

글쎄 우리는 jdo를 사용하고 있습니다. 그래서 모든 엔티티가 그룹 간 트랜잭션을 실행할 수 있도록 jdoconfig.xml을 활성화해야합니다. 그러나 jdo의 경우 페이지에 코드가 표시되지 않습니까? 나는 txn을 시작하고 그것을 끝내는 방법을 의미합니까? 내 요구 사항을 지우기 위해 두 개의 다른 엔티티에 원자 적 업데이트를 실행하려고합니다. – Vik