본 주제는 사용자 정의 구문 분석기를 실행할 때 WebSphere Message Broker 구성요소 간에 발생하는 상호작용을 이해하도록 도와줍니다. 본 주제에서는 각 단계를 전후하여 발생하는 이벤트 및 호출되는 API 측면에서 각 단계를 설명합니다. 이 주제의 개념을 이해하면 구문 분석기를 더 효과적으로 설계하고 개발할 수 있습니다.
사용자 정의 구문 분석기 수명 주기의 첫 번째 단계는 등록 단계입니다. 등록 단계의 목적은 사용자 정의 구문 분석기를 브로커에 등록하는 것입니다. 그룹 프로세스 실행 시작의 초기화 단계에서 이 단계가 트리거됩니다.
구문 분석기는 구문 분석기 수명 주기의 인스턴스화 단계에서 작성됩니다. 입력 메시지가 수신되거나 출력 메시지가 Compute 노드에서 빌드되면, 관련 구문 분석기가 확인되며 MQMD와 같은 메시지 헤더에서 구문 분석기 요구사항을 가져오게 됩니다. 브로커는 구문 분석기 팩토리가 들어 있는 LIL(Loadable Implementation Library)을 시작, 로드합니다. 확장 그룹 프로세스는 구문 분석기 인스턴스를 작성하며, 브로커는 cpiCreateContext를 호출하여 구문 분석기 오브젝트가 메시지의 적절한 부분을 취하도록 합니다.
이 함수가 호출되기 전에 브로커는 이름 요소를 구문 분석기의 유효한 루트 요소로 작성한 상태입니다. 그러나, 이 요소의 이름은 지정되지 않았습니다. 구문 분석기는 cpiSetElementName 함수에 이 요소의 이름을 지정합니다.
그 다음 브로커는 cpiParseBuffer를 호출합니다. 이 단계에서 cpiParseBuffer의 목적은 필요한 초기화를 수행하고 구문 분석기가 소유하는 메시지 컨텐츠의 길이를 리턴하는 것입니다. 구문 분석기는 구문 분석할 메시지의 양을 평가하고 적절한 바이트 수를 요구합니다.
사용자 정의 구문 분석기 오브젝트의 인스턴스가 작성될 때마다, 메시지 브로커는 컨텍스트 작성 구현 함수 cpiCreateContext를 호출합니다. 그러면 구문 분석기는 구문 분석기와 연관된 인스턴스 데이터를 할당할 수 있게 됩니다. 구문 분석기 오브젝트 컨텍스트를 삭제할 cpiDeleteContext 함수 또한 필요합니다.
처리 단계의 목적은 구문 분석기가 해석하는 메시지 오브젝트 내의 요소를 조작, 변경, 참조하는 것입니다. 관련 메시지의 브로커 내부 모델 표현에 존재하지 않는 메시지 내의 요소에 액세스해야 하는 탐색과 같은 메시지 처리 작동이 발생할 때 메시지 플로우 처리 단계가 시작됩니다.
메시지 플로우 처리 단계에서 메시지 트리 내부를 탐색하려는 시도에 대한 응답으로 구문 분석기가 호출됩니다. cpiParseBuffer가 호출되었을 때 구문 분석기는 할당된 버퍼를 조사하고 필요한 메시지 요소를 작성합니다.
사용자 정의 구문 분석기가 지원하는 메시지 형식의 데이터를 논리적으로 나타내는 구문 요소 트리의 일부로 메시지 필드를 지정하는 필터 표현식과 같은 일정 형식의 탐색이 수행될 때 이 함수가 호출됩니다. 브로커 내의 조작에 구문 요소 트리를 빌드 또는 확장해야 하는 경우 이러한 작업이 수행됩니다.
구문 분석기가 구문 요소 트리의 관련 부분에 대한 구문 분석을 마치면 cpiWriteBuffer를 호출합니다. 이 함수는 구문 분석기 오브젝트와 연관된 메시지 버퍼의 비트스트림에 구문 요소 트리의 해당 부분을 추가합니다. 그러면 출력 메시지가 작성됩니다.