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;
}
}