CreateOrderSaga 생성자는 사가 데피니션을 생성하여 sagaDefinition 필드에 세팅합니다. getSagaDefinition()은 사가 데피니션을 반환하는 메서드입니다. 사가 세 번째 단계 데피니션(예제 4-3)에서는 KitchenService를 호출하여 티켓을 생성하고 이 티켓을 취소하는 보상 트랜잭션을 정의합니다. step(), invokeParticipant(), onReply(), withCompensation()은 이벤추에이트 트램 사가에서 기본 제공되는 DSL의 일부입니다.
예제 4-3 사가 3단계 데피니션
public class CreateOrderSaga ...
public CreateOrderSaga(..., KitchenServiceProxy kitchenService,
...) {
...
.step()
.invokeParticipant(kitchenService.create, ← 포워드 트랜잭션 정의
CreateOrderSagaState::makeCreateTicketCommand)
.onReply(CreateTicketReply.class,
CreateOrderSagaState::handleCreateTicketReply) ← 성공 응답을 수신하면 handleCreateTicketReply( ) 호출
.withCompensation(kitchenService.cancel, ← 보상 트랜잭션 정의
CreateOrderSagaState::makeCancelCreateTicketCommand)
...
;