Este tópico o ajudará a entender as interações que ocorrem entre os componentes do WebSphere Message Broker quando se executa um analisador definido pelo usuário. Ele explica cada estágio em termos dos eventos que causam e ocorrem durante e após cada estágio, e as APIs que são chamadas. A compreensão dos conceitos neste tópico permitirá que você projete e desenvolva seu analisador com mais efetividade.
A primeira fase no ciclo de vida do analisador definido pelo usuário é a fase de registro. A finalidade da fase de registro é registrar o analisador definido pelo usuário com o intermediário. Esta fase é acionada pela fase de inicialização do processo do grupo de execução da inicialização.
O analisador é criado durante a fase de instanciação do ciclo de vida do analisador. Quando uma mensagem de entrada é recebida ou uma mensagem de saída é construída em um nó Compute, o analisador relevante é identificado e os requisitos do analisador são obtidos do cabeçalho de mensagem, tal como MQMD. O intermediário inicia e carrega a LIL (Loadable Implementation Library) e o depósito de informações do provedor do analisador. O processo do grupo de execução cria uma instância do analisador e o intermediário faz uma chamada a cpiCreateContext para permitir que o objeto do analisador adquira a seção apropriada da mensagem.
Antes que essa função seja chamada, o intermediário terá criado um elemento de nome como o elemento raiz efetivo para o analisador. Entretanto, esse elemento não é nomeado. O analisador deve nomear esse elemento na função cpiSetElementName.
O intermediário faz em seguida uma chamada para cpiParseBuffer. A finalidade de cpiParseBuffer neste estágio é executar qualquer inicialização necessária e retornar o comprimento do conteúdo da mensagem da qual o analisador está assumindo a propriedade. O analisador avalia quanto dos dados da mensagem deve analisar e pede o número apropriado de bytes.
Sempre que uma instância de um objeto do analisador definido pelo usuário é criada, a função de implementação de criação de contexto cpiCreateContext também é chamada pelo intermediário de mensagens. Isso permite ao analisador alocar dados da instância associados ao analisador. Uma função cpiDeleteContext para excluir o contexto do objeto do analisador também é necessária.
A finalidade da fase de processamento é manipular, alterar e referenciar elementos em um objeto de mensagem que o analisador está interpretando. A fase de processamento do fluxo de mensagens começa quando ocorre alguma atividade de processamento de mensagem, como a navegação, que exija acesso a um elemento em uma mensagem que não exista na representação do modelo interna do intermediário da mensagem envolvida.
Durante a fase de processamento do fluxo de mensagens, o analisador é chamado em resposta a tentativas de navegar para a árvore de mensagens. O analisador examina o buffer alocado quando cpiParseBuffer foi chamado e cria quaisquer elementos de mensagem necessários.
Essas funções são chamadas quando qualquer forma de navegação é feita, tal como uma expressão de filtro que especifique um campo da mensagem, para a parte da árvore de elementos de sintaxe que representa logicamente os dados para um formato de mensagem suportado por um analisador definido pelo usuário. Isso ocorre quando uma operação no intermediário exige que uma árvore de elementos de sintaxe seja construída ou estendida.
Quando o analisador tiver terminado de analisar as partes relevantes da árvore de elementos de sintaxe, ele chamará cpiWriteBuffer. Essa função anexa sua parte da árvore de elementos da sintaxe ao fluxo de bits no buffer de mensagem que está associado ao objeto analisador. Isso cria a mensagem de saída.
A fase de Destruição é a fase final no ciclo de vida do analisador definido pelo usuário. Quando o analisador tiver gravado sua parte da árvore de elemento da sintaxe para o fluxo de bits e criado a mensagem de saída, os recursos do sistema que foram criados pelo intermediário para o analisador utilizar precisarão ser liberados.
A fase de destruição começa quando o comando mqsistop é utilizado para parar o processo de execução.