2014-04-07 5 views
0

Spring과 Activiti의 통합을 테스트하고 싶습니다. 그런 다음 혼란스러운 문제에 봉착했습니다. 내가 적극적으로 다음 트랜잭션 롤백, 새로운 예외를 던져 서비스 A에서 A와 BActiviti + spring + transaction + rollback

(데이터베이스를 업데이트 JPA 저장소 saveAndFlush 방법을 사용) 2 서비스 작업과 워크 플로를 가지고 있고, 흐름은 중지됩니다. 글쎄, 괜찮아.

그러나 서비스 A 만 롤백하고 흐름이 서비스 B를 계속할 수 있습니까? 서비스 A가 예외를 throw하면 흐름이 중지되고 예외가 발견되면 (흐름이 계속되는 경우) 서비스 A가 롤백되지 않습니다.

JPA Repository를 사용하여 트랜잭션을 자동으로 처리하므로 수동 모드로 변경하는 데는 많은 시간이 소요됩니다.

답변

0

아마도 흐름의 모든 서비스에 대해 새 트랜잭션이 필요하고 모든 예외를 잡아야합니다.

+0

글쎄, 전에 말했듯이, 예외를 던지지 않으면 트랜잭션이 롤백되지 않지만, 그렇게하면 워크 플로가 즉시 중단됩니다. –

0

서비스 작업 A, B와 프로세스 사이에 레이어를 두어 이름을 TransactionService으로합시다. 이 서비스는 귀하의 서비스 방법을 촉발시킵니다. 또한 이러한 서비스 메소드는 조작을 위해 새 트랜잭션을 사용해야합니다 (@Transactional 주석을 사용할 수 있음). TransactionService에서 아무 것도하지 말고 그냥 방아쇠를 당겨 try catch 블록으로 감 쌉니다.
그 결과로 예외를 잡아서 다음 작업으로 이동시키고 예외가 발생하면 자동으로 롤백되기 때문에 롤백에 신경 쓰지 않아도됩니다.

관련 문제