Planejando Nós de Processamento de Mensagem Definidos pelo Usuário

Este tópico fornece orientação para criar seu nó de processamento de mensagens para assegurar que ele funcione corretamente. Ele explica como você pode utilizar seu nó de processamento de mensagem para navegar uma mensagem.

Considerações de Design

Antes de desenvolver e implementar seu nó de processamento de mensagem, você deve decidir sobre o seguinte:
  • O analisador de mensagens que irá analisar a mensagem
  • Se os valores de atributos do analisador de mensagem padrão devem ser substituídos para este nó de processamento de mensagem.
  • O modelo de encadeamento apropriado para o nó de processamento de mensagem
  • O processamento de fim de mensagem e suporte a transação que o nó irá suportar
  • Os atributos de configuração requeridos pelo nó de processamento de mensagem que devem ser exteriorizados para alteração pelo designer do fluxo de mensagens.
  • APIs opcionais do nó que o nó definido pelo usuário fornecerá
  • Questões gerais de desenvolvimento:

Navegação de Elementos de Sintaxe

A infra-estrutura do intermediário fornece funções que permitem a uma implementação de nó de processamento de mensagem atravessar a representação em árvore da mensagem, com funções e métodos para permitir a navegação a partir do elemento atual para seu:
  • Pai
  • Primeiro filho
  • Último filho
  • Irmão anterior (ou esquerdo)
  • Próximo irmão (ou direito)
Isso é mostrado na figura a seguir. Outras funções e métodos suportam a manipulação dos próprios elementos, com funções e métodos para criar elementos, para definir ou consultar seus valores, para inserir novos elementos na árvore e para remover elementos da árvore. Consulte Funções de Utilitários de Nó C e Funções de Utilitários do Analisador C, ou o Javadoc para obter informações adicionais.

Um elemento de sintaxe com conexões a outros elementos


A figura mostra um elemento da sintaxe.Ele é conectado a outros elementos. Os outros elementos são: irmão anterior e próximo irmão à esquerda e à direita do elemento, primeiro filho e último filho abaixo do elemento e pai, que está acima do elemento.
A próxima figura descreve uma árvore simples de elementos de sintaxe que mostra uma gama completa de interconexões entre os elementos.

Árvore de elementos de sintaxe


A figura mostra uma árvore do elemento da sintaxe.O elemento A está na parte superior do diagrama, acima do elemento B, o qual por sua vez está acima dos elementos C, D e E, os quais estão no mesmo nível.

O elemento A é o elemento raiz da árvore. Ele não tem pai porque é o raiz. Ele possui um primeiro filho de elemento B. Como A não possui filhos, o elemento B também será o último filho de A.

O elemento B tem três filhos: elementos C, D e E. O elemento C é o primeiro filho de B; o elemento E é o último filho de B.

O elemento C tem dois irmãos: elementos D e E. O próximo irmão do elemento C é o elemento D. O próximo irmão do elemento D é o elemento E. O irmão anterior do elemento E é o elemento D. O irmão anterior do elemento D é o elemento C.

A figura a seguir mostra a primeira geração de elementos de sintaxe de uma mensagem típica recebida pelo WebSphere Message Broker.(Observe que nem todas as mensagens terão um cabeçalho MQRFH2).

Primeira geração de elementos de sintaxe em uma mensagem típica


Na parte superior da figura está uma caixa denominada Root. Uma linha conecta a caixa a uma marcada como Propriedades abaixo e à esquerda, e outra linha a uma caixa marcada como XML abaixo e à direita. Entre essas duas estão mais duas caixas, marcadas como MQMD e MQRFH2.

Esses elementos na primeira geração são muitas vezes denominados "pastas", nas quais os elementos de sintaxe que representam cabeçalhos de mensagem e dados de conteúdo de mensagem são armazenados. Neste exemplo, o primeiro filho de root é a pasta Propriedades. O próximo irmão de Propriedades é a pasta para o MQMD das mensagens de entrada do WebSphere MQ. O próximo irmão é a pasta para o cabeçalho MQRFH2. Finalmente, há a pasta que representa o conteúdo da mensagem, a qual (neste exemplo) é uma mensagem XML.

A figura acima inclui um cabeçalho MQMD e um MQRFH2. Todas as mensagens recebidas por um nó de processamento MQmessage incluem um cabeçalho MQMD, e existem vários outros cabeçalhos que podem também ser incluídos.

Navegando uma Mensagem XML

Suponha que tenhamos a seguinte mensagem XML:
  <Business>
    <Product type='messaging'></Product>
    <Company>
      <Title>IBM</Title>
      <Location>Hursley</Location>
      <Department>WebSphere MQ</Department>
    </Company>
  </Business>
Neste exemplo, os elementos são dos seguintes tipos:
Elemento de nome
Business, Product, Company, Title, Location, Department
Elemento de valor
IBM, Hursley, WebSphere MQ
Elemento de nome/valor
type='messaging'

Você pode utilizar funções e métodos utilitários do nó (ou as funções similares do analisador) para navegar por uma mensagem. Tomando a mensagem XML mostrada acima, você precisa chamar cniRootElement primeiro, com a mensagem recebida pelo nó como entrada para essa função. Em Java você precisa chamar getRootElement na MbMessage de entrada. Isso retorna um MbElement que representa a raiz do elemento. O elemento raiz não deve ser modificado pelo nó definido pelo usuário.

A figura acima mostra que o último filho do elemento raiz é a pasta que contém a árvore de análise XML. Você pode navegar até essa pasta chamando cniLastChild (com a saída da chamada anterior como entrada para essa função) em um nó C, ou chamando o método getLastChild no elemento raiz em um nó Java.

Há somente um elemento (<Business>) no nível superior da mensagem, portanto chamar cniFirstChild (em C) ou getFirstChild (em Java) moverá para este ponto na árvore. Você pode utilizar cniElementType ou getElementType para obter seu tipo (que é name), seguido por cniElementName ou getName para retornar o próprio nome (Business).

<Business> tem dois filhos, <Product> e <Company>, portanto você pode utilizar cniFirstChild ou getFirstChild seguido de cniNextSibling ou getNextSibling para navegar para eles.

<Product> tem um atributo (type='messaging'), que é um elemento filho. Utilize cniFirstChild ou getFirstChild novamente para navegar até este elemento, e cniElementType ou getType para retornar seu tipo (que é name-value). Utilize cniElementName ou getName como anteriormente para obter o nome. Para obter o valor, chame cniElementValueType para retornar o tipo, seguido pela função apropriada no grupo cniElementValue. Neste exemplo ela será cniElementCharacterValue. Em Java utilize o método getValue, o qual irá retornar um objeto Java representando o valor do elemento.

<Company> tem três filhos, cada um deles tendo um filho que é um elemento de valor (IBM, Hursley e WebSphere MQ). Você pode utilizar as funções já descritas para navegar até eles e acessar seus valores.

Outras funções estão disponíveis para copiar a árvore de elementos (ou parte dela). A cópia pode então ser modificada incluindo ou removendo elementos e alterando seus nomes e valores, para criar uma mensagem de saída.

Avisos | Marcas Registradas | Downloads | Biblioteca | Suporte | Feedback
Direitos Autorais IBM Corporation 1999, 2006 Última Atualização: 1 Sep 2006
as01395_