더북(TheBook)

CreateOrdersaga 오케스트레이터

CreateOrderSaga는 그림 4-7 상태 기계를 구현한 클래스입니다. 이 클래스는 사가 기초 인터페이스 SimpleSaga를 구현한 클래스입니다. CreateOrderSaga 클래스의 핵심은 예제 4-2의 사가 데피니션입니다. 주문 생성 사가 단계는 이벤추에이트 트램 사가 프레임워크에서 제공되는 DSL을 이용하여 정의합니다.

예제 4-2 CreateOrdersaga 데피니션

public class CreateOrderSaga implements SimpleSaga<CreateOrderSagaState> {

  private SagaDefinition<CreateOrderSagaState> sagaDefinition;

  public CreateOrderSaga(OrderServiceProxy orderService,
                         ConsumerServiceProxy consumerService,
                         KitchenServiceProxy kitchenService,
                         AccountingServiceProxy accountingService) {

    this.sagaDefinition =
            step()
            .withCompensation(orderService.reject,
                    CreateOrderSagaState::makeRejectOrderCommand)

            .step()
              .invokeParticipant(consumerService.validateOrder,
                    CreateOrderSagaState::makeValidateOrderByConsumerCommand)
            .step()
              .invokeParticipant(kitchenService.create,
                    CreateOrderSagaState::makeCreateTicketCommand)
            .onReply(CreateTicketReply.class,
                    CreateOrderSagaState::handleCreateTicketReply)
            .withCompensation(kitchenService.cancel,
                    CreateOrderSagaState::makeCancelCreateTicketCommand)
            .step()
              .invokeParticipant(accountingService.authorize,
                    CreateOrderSagaState::makeAuthorizeCommand)
            .step()
              .invokeParticipant(kitchenService.confirmCreate,
                    CreateOrderSagaState::makeConfirmCreateTicketCommand)
            .step()
              .invokeParticipant(orderService.approve,
                    CreateOrderSagaState::makeApproveOrderCommand)
            .build();
  }

  @Override
  public SagaDefinition<CreateOrderSagaState> getSagaDefinition() {
    return sagaDefinition;
  }
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.