이 주제는 다음 절을 포함합니다.
메시지 컨텐츠에 따라 메시지를 라우트하려면 Filter 노드를 사용하십시오. ESQL로 필터 표현식을 코드화하여 라우트를 정의합니다. 필터 표현식에 입력 메시지 또는 메시지 등록 정보의 요소를 포함시킬 수 있습니다. 외부 데이터베이스에 보유된 데이터를 사용하여 표현식을 완료할 수도 있습니다. 메시지가 라우트되는 출력 터미널은 표현식이 어떻게 평가(참, 거짓 또는 알 수 없음)되는지에 따라 달라집니다.
필터에서 얻을 수 있는 모든 상황을 포괄하는 터미널을 연결하십시오. 노드가 연결되지 않은 터미널에 메시지를 전달하면 이 메시지는 트랜잭션 메시지라도 제거됩니다.
이 노드는 Compute 및 Database 노드와 동일한 방법으로 ESQL문을 승인합니다. 실행된 마지막 명령문은 표현식이 Boolean 값으로 평가되는 RETURN <expression> 문이어야 합니다. 이 Boolean 값으로 메시지를 라우트할 터미널을 판별합니다. 대부분의 경우, 라우팅 알고리즘은 단순히 메시지 필드 값을 비교하는 것입니다. 비교는 표현식으로 기술되며 RETURN문은 유일한 명령문입니다. 표현식 없는 RETURN(RETURN;) 또는 NULL 표현식이 있는 RETURN을 코드화하면 노드는 메시지를 unknown 터미널에 전달합니다.
메시지 플로우에 좀 더 복잡한 라우팅 옵션이 필요한 경우 RouteToLabel 및 Label 노드를 사용할 수 있습니다.
Filter 노드는 Workbench에서 다음 아이콘으로 표현됩니다.
이 노드를 사용하는 방법을 보려면 다음 샘플을 참조하십시오.
10개의 다중 선택 질문이 있는 온라인 테스트를 생성하는 상황을 고려해 보십시오. 수신되는 각 메시지에는 후보 이름 및 주소와 그 다음에 일련의 응답이 있습니다. 각 응답을 선택했을 때 응답이 올바르면, SCORE 필드가 1씩 증가됩니다. 모든 응답을 선택하면 SCORE 필드를 테스트하여 5점이 넘는지를 확인합니다. 5점이 넘으면 Filter 노드는 성공한 후보 입력을 핸들링하는 플로우로 메시지를 전달하고, 넘지 않으면 거부 프로세스로 필터하며 거부 메시지를 작성합니다.
Filter 노드 인스턴스를 메시지 플로우에 넣었으면 이 노드를 구성할 수 있습니다. 편집기 보기에서 이 노드를 마우스 오른쪽 단추로 누른 후 등록 정보를 누르십시오. 노드의 기본 등록 정보가 표시됩니다.
값을 입력해야 하는 모든 필수 등록 정보(정의된 디폴트 값이 없는 등록 정보)는 등록 정보 대화 상자에서 별표(*)로 표시됩니다.
다음과 같이 Filter 노드를 구성하십시오.
z/OS 시스템에서는 브로커가 브로커 시작 작업 ID나, 사용자 정의 데이터 세트 <hlq>.SBIPPROC에서 mqsisetdbparms 명령 JCL, BIPSDBP에 지정한 사용자 ID 및 암호를 사용합니다.
이 Filter 노드의 인스턴스에 포함시킨 메시지 플로우와 연관된 ESQL 파일에 Filter 노드의 작동을 사용자 정의하려면 ESQL문을 코딩하십시오. ESQL 파일(디폴트 이름은 <message_flow_name>.esql)은 파일이 필요한 메시지 플로우 내의 모든 노드에 대한 ESQL을 포함합니다. 특정 노드와 연관된 코드의 각 부분을 모듈이라고 합니다.
ESQL 파일이 아직 이 메시지 플로우에 존재하지 않으면, Filter 노드를 마우스 오른쪽 단추로 누른 다음 ESQL 열기를 누르십시오. 그러면 새 ESQL 파일이 작성되어 ESQL 편집기 보기에서 열립니다.
파일이 이미 존재하면 필터 표현식 등록 정보 옆에 있는 찾아보기 단추를 누르십시오. 그러면 이 메시지 플로우에 의해 액세스 가능한 ESQL 파일에 정의되어 있는 사용 가능한 Filter 노드 모듈을 나열하는 모듈 선택 대화 상자가 표시됩니다(ESQL 파일은 종속된 다른 프로젝트에 정의될 수 있음). 적절한 모듈을 선택한 후 확인을 누르십시오. 적당한 모듈이 사용 가능하지 않으면 목록은 비어 있습니다.
지정한 모듈이 존재하지 않을 경우, 모듈이 작성되며 편집기는 파일을 표시할 수 있도록 배치합니다. 파일 및 모듈이 존재할 경우, 편집기는 파일을 배치하여 올바른 모듈을 표시 및 강조표시합니다.
원할 경우, 자원 네비게이터에서 적절한 ESQL 파일을 열어 아웃라인 보기에서 이 노드를 선택할 수 있습니다.
새 ESQL 또는 기존의 ESQL 파일에 이 노드에 대한 모듈 구조가 작성된 경우, 이는 다음과 같은 ESQL로 구성되어 있습니다. 이 예에는 디폴트 모듈 이름이 나와 있습니다.
CREATE FILTER MODULE <flow_name>_Filter CREATE FUNCTION Main() RETURNS BOOLEAN BEGIN RETURN TRUE; END; END MODULE;
자신의 ESQL 모듈을 작성할 경우 이 구조대로 작성해야 합니다. 디폴트 이름을 갱신할 수 있으나 지정한 이름이 해당 노드 등록 정보인 필터 표현식의 이름과 일치하는지 확인하십시오.
이 노드를 사용자 정의하려면 BEGIN문 뒤, RETURN문 앞에 자신의 ESQL을 추가하십시오. RETURN문의 표현식이 TRUE 또는 FALSE가 아닌 경우 이 값을 해석하여 메시지가 전달되는 터미널을 판별합니다. 표현식이 NULL로 해석되거나 사용자가 RETURN;을 코드화하거나 RETURN문을 생략하는 경우 노드는 메시지를 unknown 터미널에 전달합니다.
을 눌러 ESQL 파일을 작성할 수도 있습니다.
이 모듈에 SET, WHILE, DECLARE 및 IF를 비롯하여 모든 ESQL문을 사용할 수 있으나, Compute 노드와 달리 Filter 노드는 입력 터미널에서 수신한 메시지를 변경하지 않은 상태로 출력 터미널로 전달합니다. 이는 Database 노드에서와 같이 Filter 노드에서도 하나의 메시지만 참조한다는 의미입니다.
메시지의 어떤 부분도 수정할 수 없으므로, 지정 명령문(INSERT문의 SET절이 아닌 SET문)은 임시 변수에만 값을 지정할 수 있습니다. 따라서 지정 명령문에 취할 수 있는 조치의 범위는 제한됩니다.
상자를 선택하면, 노드는 데이터베이스에서 리턴된 모든 양의 리턴 코드를 오류로 핸들링하고 음의 리턴 코드 또는 그 이상의 심각한 오류에서와 같은 방법으로 예외를 생성합니다.
선택란을 선택하지 않으면, 노드에서는 경고를 정상 리턴 코드로 처리하고 예외를 전달하지 않습니다. 발생하는 경고 중 가장 중요한 것은 없음으로서, 대부분의 환경에서 정상적인 리턴 코드로 안전하게 핸들링될 수 있습니다.
선택란을 선택하지 않을 경우, 각 데이터베이스 호출 이후에 리턴될 수 있는 임의의 데이터베이스 오류를 점검하려면 ESQL을 포함시켜야 합니다(SQLCODE 및 SQLSTATE를 사용하여 이를 수행할 수 있음). 오류가 발생한 경우, 브로커와 데이터베이스의 무결성을 보장하려면 메시지 플로우 내의 오류를 핸들링해야 합니다. 자체 처리를 통해 오류를 핸들링하지 않을 경우, 브로커가 디폴트 오류 핸들링을 호출하도록 선택하지 않았으므로 오류가 무시됩니다. 예를 들면, ESQL THROW문을 포함시켜 이 노드에서 예외를 전달하거나 Throw 노드를 사용하여 나중에 자체적으로 예외를 생성하게 할 수 있습니다.
대화 상자를 닫고 등록 정보에서 작성한 모든 변경을 제거하려면 취소를 누르십시오.
다음 표에는 Filter 노드 터미널이 설명되어 있습니다.
터미널 | 설명 |
---|---|
In | 노드가 처리할 메시지를 승인하는 입력 터미널. |
Failure | 처리 중에 실패가 감지될 경우 메시지가 라우트될 출력 터미널. |
Unknown | 지정된 필터 표현식이 알 수 없음 또는 널(NULL)로 평가될 경우 메시지가 라우트될 출력 터미널. |
False | 지정된 필터 표현식이 거짓으로 평가될 경우 메시지가 라우트될 출력 터미널. |
True | 지정된 필터 표현식이 참으로 평가될 경우 메시지가 라우트될 출력 터미널. |
다음 표에는 노드 등록 정보가 설명되어 있습니다. 앞에 M이 표시된 열은 등록 정보가 필수임을 나타내며(디폴트가 정의되지 않았을 때 값을 입력해야 하는 경우 등록 정보 대화 상자에 별표(*)로 표시됨) 앞에 C가 표시된 열은 등록 정보가 구성 가능함을 나타냅니다(메시지 플로우를 Bar 파일에 추가하여 전개할 때 값을 변경할 수 있음).
다음 표에는 Filter 노드 기본 등록 정보가 설명되어 있습니다.
등록 정보 | M | C | 디폴트 | 설명 |
---|---|---|---|---|
데이터 소스 | 아니오 | 예 | 이 등록 정보는 이 노드와 연관된 ESQL에서 참조하는 테이블이 상주하는 데이터베이스의 ODBC 데이터 소스 이름(필터 표현식 등록 정보에 의해 식별됨). | |
트랜잭션 | 예 | 아니오 | 자동 | 노드의 트랜잭션 모드. 자동 또는 확약일 수 있습니다. |
필터 표현식 | 예 | 아니오 | 필터 | 노드에서 수신되는 메시지에 대해 실행되는 명령문을 포함하는 ESQL 자원(파일) 내의 모듈의 이름. |
경고를 오류로 처리 | 예 | 아니오 | 지우기 | 데이터베이스 SQL 경고를 오류로 처리합니다. 이 선택란을 선택하면 이 조치가 수행됩니다. |
데이터베이스 오류 시 예외 전달 | 예 | 아니오 | 선택 | 데이터베이스 오류가 발생할 때 브로커가 예외를 전달하도록 합니다. 이 선택란을 선택하면 이 조치가 수행됩니다. |
다음 표에는 Filter 노드 설명 등록 정보가 설명되어 있습니다.
등록 정보 | M | C | 디폴트 | 설명 |
---|---|---|---|---|
간단한 설명 | 아니오 | 아니오 | 노드에 대한 간략한 설명. | |
자세한 설명 | 아니오 | 아니오 | 메시지 플로우에서 노드의 목적을 설명하는 텍스트. |