더북(TheBook)

이 클래스는 5장에서 자세히 설명하기로 하고, 지금은 createOrder()에 주목합시다(예제 4-1). 이 메서드는 먼저 주문을 생성한 후, 주문을 검증하기 위해 CreateOrderSaga를 생성합니다.

예제 4-1 Orderservice 클래스와 createOrder( ) 메서드

@Transactional ← 서비스 메서드에 트랜잭션을 적용
public class OrderService {

  @Autowired
  private SagaManager<CreateOrderSagaState> createOrderSagaManager;

  @Autowired
  private OrderRepository orderRepository;

  @Autowired
  private DomainEventPublisher eventPublisher;

  public Order createOrder(OrderDetails orderDetails) {
    ...
    ResultWithEvents<Order> orderAndEvents = Order.createOrder(...); ← Order 생성
    Order order = orderAndEvents.result;
    OrderRepository.save(order);  ← DB에 Order 저장

    eventPublisher.publish(Order.class,  ← 도메인 이벤트 발행
                          Long.toString(order.getId()),
                          orderAndEvents.events);

    CreateOrderSagaState data =
        new CreateOrderSagaState(order.getId(), orderDetails);  ← CreateOrdersaga 생성
    CreateOrderSagaManager.create(data, Order.class, order.getId());

    return order;
  }

  ...
}
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.