2011-08-23 2 views
5

내 응용 프로그램에는 데이터베이스에 대한 많은 커밋이 여러 가지 방법으로 순차적으로 수행되는 여러 단계가 있습니다. 예 :봄과 최대 절전 모드를 사용하는 중첩 된 트랜잭션

A -> B -> C 
     -> D 
      ->E 
     -> F 
    -> G 

C. A가 B를 호출하는 호출이어서 B는 D. D 등등 E를 호출하고, 호출한다. 이러한 모든 메소드에는 일부 데이터베이스 조작이 있습니다. PROPAGATION_REQUIRED (선언적 트랜잭션 관리 - 봄 권장 방법)에서 알 수 있듯이 E이 성공적으로 완료되면 트랜잭션 (및 E의 작업이 커밋됩니다). 이제 약간의 예외로 인해 F이 롤백으로 이어질 수 있습니다. 내가 갖고 싶습니다 무엇부터 시작하여 롤백합니까 했습니다. 이것을 선언적 트랜잭션 관리를 통해 사용할 수 있습니까? 아니면 프로그래밍 방식의 트랜잭션 관리를 사용해야합니까?

감사합니다.

답변

7

첫째, "중첩 된"트랜잭션은 서로에 따라 여러 개의 실행중인 트랜잭션이 있다는 점에서 지원되지 않습니다 (afaik). 내용이 포함되지 않은 경우 등이있는 경우

  • 기존 트랜잭션에 참여 존재하는 경우

      새로운 트랜잭션을 시작
    • :

      그런 다음, propagation=REQUIRED는 전파 모든 방법을 의미합니다.

  • +0

    내가 완전히 동의 한 것입니다 (이 A에 의해 시작 하나의 거래이기 때문에, 다른 방법으로 전파) 시나리오에서, F의 실패가 전체 트랜잭션을 롤백 것을 의미 내가 읽을 때까지 (어딘가 - 찾을 수 없다) 메소드가 완료 되 자마자 커밋이 일어난다. 나는 여기에서 이해가 잘못되었다고 생각한다. 실제 커밋은 언제 발생합니까 (명시 적으로 수행 할 필요는 없습니다.) –

    +1

    트랜잭션을 시작한 메소드가 완료되면 커밋이 발생합니다. 이 경우에 'A'입니다. – Bozho

    +0

    괜찮습니다. 큰. 정말 고맙습니다. –

    관련 문제