이 클래스는 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;
}
...
}