장기 실행 트랜잭션을 사용하는 시나리오
다음 시나리오에서는 장기 실행 트랜잭션의 사용에 대해 설명합니다.
시나리오 1: 시간 제한과 함께 장기 실행 트랜잭션 사용
장기 실행 범위는 장기 실행 작업을 완료해야 하는 논리적 시간인 특정 시간 제한과 연결될 수 있습니다. 지정된 시간 내에 scope 완료되지 않으면 미리 정의된 시스템 예외 TimeoutException이 발생합니다.
전체 오케스트레이션을 장기 실행으로 표시하거나 외부 장기 실행 범위에 다른 모든 범위를 중첩하여 장기 실행 프로세스를 만들 수 있습니다. 이전 시나리오에서는 시스템 제공 예외 핸들러가 실행되지만 후자의 경우 특정 예외 핸들러를 외부 범위에 연결할 수 있습니다. 기본 시스템 제공 예외 핸들러는 성공적으로 완료된 각 중첩 트랜잭션 범위(있는 경우)에 대한 보정 핸들러를 완료 순서와 반대로 실행합니다. 장기 실행 트랜잭션에 대한 예외 핸들러에 Compensate 셰이프를 사용하여 자체 보정을 통해 동일한 작업을 수행할 수 있습니다.
다음 오케스트레이션은 시간 제한을 장기 실행 트랜잭션과 연결하는 방법을 보여 줍니다.
시간 제한이 있는 장기 실행 트랜잭션
경우에 따라 일괄 처리 방식으로 작동하는 레거시 시스템과 상호 연결되어야 할 수도 있습니다. 이 시나리오에서는 구매 주문을 받아 레거시 시스템으로 보내는 방법을 보여 줍니다. 레거시 시스템은 구매 주문을 처리하고 다시 구매 주문 승인을 보냅니다. 송신 작업은 구매 주문 번호를 사용하여 상관 관계 집합을 초기화하고 수신 작업은 해당 상관 관계 집합을 따릅니다. 또한 수신 작업은 시간 제한 값이 있는 장기 실행 범위에 있습니다.
오케스트레이션 엔진은 수신 대기 중인 오케스트레이션 인스턴스를 디하이드레이션합니다. 상관 관계는 메시지가 수신된 후 동일한 오케스트레이션 인스턴스가 호출되도록 합니다. 구매 주문 승인이 시간 제한 값으로 지정된 시간 간격 내에 도착하지 않으면 TimeoutException 이 throw됩니다.
시나리오 2: 사용자 지정 보정과 함께 장기 실행 트랜잭션 사용
다음 오케스트레이션은 전체 오케스트레이션과 연결된 사용자 지정 보정을 연결하고 호출하는 방법을 보여 줍니다. 이 시나리오에서는 새 고객을 삽입한 다음 고객의 주문 정보를 삽입합니다. 오케스트레이션 논리에 따라 주문 삽입에 실패하면 고객 삽입을 롤백해야 합니다. 고객 삽입은 레거시 시스템에서 수행될 수 있으므로 별도의 호출 가능한 오케스트레이션에 표시됩니다. 호출된 오케스트레이션에는 보정 프로세스를 수행할 별도의 시트를 제공하는 보정을 위한 사용자 지정 속성 집합이 있습니다. 보정은 새로 삽입된 고객을 삭제하는 것입니다.
호출 오케스트레이션에는 주문 삽입을 수행할 장기 실행 범위가 있습니다. 이 범위는 외부 장기 실행 범위 내에 중첩되어 있습니다. 외부 범위에는 모든 예외를 catch할 예외 핸들러가 연결되어 있습니다. 이 핸들러는 오케스트레이션 호출 시 발생한 모든 변경 내용을 롤백하기 위해 Compensate 셰이프를 사용하여 호출된 오케스트레이션과 연결된 사용자 지정 예외를 호출합니다.
사용자 지정 보정이 포함된 장기 실행 트랜잭션
호출될 오케스트레이션(주)
호출될 오케스트레이션(보정)