이 주제에서는 중개 플로우의 실행 오류를 다루는 다양한 방법에 대한 정보를 제공합니다(중지 및 실패 중재 기본요소 사용 방법, 메시지에서 실패 정보 검색 장소 및 WSDL 결함 처리 방법 포함).
메시지를 처리하는 중개 기본요소에는 실패 터미널이 있어 중개 기본요소에서 실행 실패가 발생하면 입력 메시지와 함께 예외 정보를 전달합니다. 예외 정보는 메시지 컨텍스트의 failinfo 요소에 저장됩니다. failinfo에 액세스하려면 중개 기본요소의 실패 터미널을 다른 기본요소에 연결해야 합니다. 기본요소의 실패 터미널은 해당 기본요소의 로직에서 발생하는 실패에 대한 실패 정보는 전달하나 하향스트림 기본요소에 대한 정보는 전달하지 못합니다.
기본요소의 실패 터미널이 연결되지 않은 경우, 실패 정보는 failInfo 요소에 저장되지 않습니다. 이러한 경우에 플로우는 실패하고 예외 정보만이 WebSphere® 출력 로그에 나타납니다.
중개 기본요소에 실행 실패가 발생하면 실패 터미널이 작동됩니다. 런타임 예외가 발생되고 플로우는 실패한 것으로 간주됩니다. 중개 플로우 컴포넌트가 글로벌 트랜잭션에서 실행 중인 경우, 자원을 사용하고 글로벌 트랜잭션에 참여하는 기본요소는 롤백하기로 선택할 수 있습니다.
중개 플로우 컴포넌트가 글로벌 트랜잭션에서 실행 중일 때의 롤백 동작을 설명하려면 아래의 플로우 예제를 사용합니다.
해당 플로우에서 글로벌 트랜잭션이 구성되어 있지 않고 사용자 정의 기본요소에 실행 실패가 발생한다고 가정하십시오. 실패 터미널이 플로우에 연결되어 있지 않으므로 실패합니다. 변환 기본요소가 정보를 지속적으로 제공하지 않고 플로우의 외부 자원과 상호 작용하지 않으므로 해당 기본요소의 작업은 무시됩니다. 그러나 중개 플로우 컴포넌트가 글로벌 트랜잭션에 있지 않아 데이터베이스에 로그되어 있으므로, 로그는 현재 완료됩니다. 이는 로그가 외부 자원과 상호 작용하기 때문입니다.
동일한 플로우에서 글로벌 트랜잭션이 구성되어 있고 사용자 정의 기본요소에서 또다시 실행 실패가 발생하면, 변환 기본요소의 작업도 다시 무시됩니다. 그러나 로그 기본요소에 동일함으로 설정된 해당 트랜잭션 모드 특성이 있는 경우, 트랜잭션은 롤백되고 데이터베이스에는 항목이 발생하지 않을 것입니다. 트랜잭션 모드 특성이 새로 작성으로 설정되어 있으면, 트랜잭션은 글로벌 트랜잭션 외부에서 확약되어 데이터베이스에서 항목이 발생합니다.
기본적으로 중개 플로우 컴포넌트는 글로벌 트랜잭션 규장자와 함께 설정되지는 않습니다. 규정자를 추가하면 글로벌 트랜잭션에서 중개 플로우 컴포넌트를 실행할 수 있습니다. 이는 어셈블리 편집기에서 중개 플로우 컴포넌트에 규정자를 설정하여 실행되며, 특성 보기의 구현 페이지에서 글로벌 특성이 있는 트랜잭션 규정자를 추가하십시오.
중개 기본요소에서 실행 실패 발생 시, 예외 정보는 메시지 컨텍스트의 failnfo 요소에 저장됩니다. 다음은 XPath 식 빌더에 있는 메시지 이미지이며 failnfo를 표시합니다.
중지 기본요소에는 입력 터미널은 있지만 출력 터미널은 없습니다. 중개 기본요소 실패 또는 출력 터미널이 중지 기본요소에 연결되면, 중지 기본요소는 터미널로 이동하는 메시지를 사용하고 특정 플로우 경로는 종료됩니다.
중개 기본요소의 출력 터미널이 연결되지 않은 경우, 중개 플로우 편집기는 경고를 생성합니다. 해당 경고를 표시하지 않으려면 중지 터미널을 사용하십시오. 런타임에 연결이 안 된 출력 터미널은 중지로 자동 전달됩니다.
다음 예제에서 메시지 필터 기본요소의 실패 터미널은 메시지 로거에 연결되어 실패한 메시지를 저장합니다. 더 이상의 조치가 필요하지 않음을 표시하도록 메시지 로거는 중지 기본요소에 연결됩니다.
실행 플로우를 중지하고 예외를 발생시키려면 실패 기본요소를 사용하십시오. 기본요소의 출력 또는 실패 터미널을 실패 기본요소에 연결할 수 있습니다. 중개 플로우 컴포넌트가 글로벌 트랜잭션에서 실행 중인 경우, 자원을 사용하고 글로벌 트랜잭션에 참여하는 기본요소는 롤백하기로 선택할 수 있습니다.
오류 처리에 필요한 특수 중개 플로우를 작성하여 다른 중개 플로우에서 해당 플로우를 호출할 수 있습니다. 예를 들어, ErrorFlow라는 중개 플로우 컴포넌트 및 ErrorFlowExport라는 내보내기를 포함한 ErrorFlowModule로 명명되는 중개 모듈이 있다고 가정합시다. 중개 플로우 컴포넌트에 터미널과 연관된 패턴으로 정의되어 있는 다수의 오류 코드를 포함한 메시지 필터 기본요소가 있을 수 있습니다. 오류 코드에 따라 메시지는 플로우의 다른 경로로 라우트됩니다.
CreditCheckModule이라는 중개 모듈에서 중개 모듈 ErrorFlowModule의 내보내기와 동일한 인터페이스가 있는 ErrorFlow라는 SCA 바인딩으로 가져오기를 작성하십시오. 가져오기 특성 보기의 세부사항 페이지에서 가져오기 인터페이스를 선택하여 마우스 오른쪽 단추를 클릭한 다음 (고급) 연결을 선택하십시오. 해당 가져오기 대상으로 ErrorFlowModule 및 ErrorFlowExport를 선택하십시오.
중개 플로우 컴포넌트 CreditCheck에 메시지 필터가 있어 출력 메시지를 CreditLimitService 인터페이스의 getAmount 조작에 송신합니다. 메시지 필터의 실패 터미널은 XSL 변환 기본요소에 연결된 다음 ErrorFlow 가져오기 인터페이스를 통해 ErrorFlowModule에 전달됩니다.
다음 이미지는 CreditCheck 중개 플로우 컴포넌트의 요청 플로우를 표시합니다.
WSDL 결함은 비즈니스 오류 조건입니다(예: StockSymbolNotFound 또는 NoSuchUser). 중개 플로우 다이어그램에서 WSDL 결함은 각 고유 결함 메시지 유형에 필요한 터미널이 있는 입력 결함 및 발호 결함 노드를 통해 처리됩니다. 소스 또는 대상 조작에 정의된 WSDL 결함 발생 시, 입력 및 발호 결함 노드는 중개 플로우 편집기에 작성됩니다.
예제를 사용하여 결함 노드가 연결되는 방법을 설명해봅시다. 서비스 제공자의 DelayedServicePortType 인터페이스에서 주식 시세를 요청한 getQuote 조작을 갖는 소스 인터페이스 StockQuoteService가 있다고 가정하십시오.
응답 플로우에서 양쪽 간의 XSL 변환 기본요소로, 발호 결함 노드의 올바르지 않은 기호 터미널을 입력 결함 노드의 올바르지 않은 기호 터미널에 연결할 수 있습니다. 다음 이미지는 요청 플로우를 표시합니다.