Planificación de nodos de proceso de mensajes definidos por el usuario

Este tema proporciona instrucciones para escribir el nodo de proceso de mensajes, a fin de garantizar que funciona correctamente. En él se explica cómo utilizar el nodo de proceso de mensajes para desplazarse por un mensaje.

Consideraciones sobre diseño

Antes de desarrollar e implementar el nodo de proceso de mensajes, debe decidir lo siguiente:
  • El analizador de mensajes que analizará el mensaje
  • Si desea alterar temporalmente los valores de atributo del analizador de mensajes por omisión para este nodo de proceso de mensajes
  • El modelo de trabajo con hebras adecuado para el nodo de proceso de mensajes
  • El soporte de transacciones y el proceso de final de mensaje al que dará soporte el nodo
  • Los atributos de configuración necesarios para el nodo de proceso de mensajes que deben externalizarse para la alteración por parte del diseñador de flujo de mensajes
  • Las API de nodos opcionales que proporcionará el nodo definido por el usuario
  • Cuestiones de desarrollo general:
    • Trabajo con hebras
    • Gestión de almacenamiento
    • Manejo de series de caracteres
    • Manejo de excepciones
    • Formatos de mensaje esperados para nodos primitivos que esperan carpetas de cabecera específicas

Navegación por los elementos de sintaxis

La infraestructura de intermediario proporciona funciones que permiten que la implementación de un nodo de proceso de mensajes atraviese la representación de árbol del mensaje, con funciones y métodos que permiten ir desde el elemento actual hasta el elemento correspondiente, que puede ser:
  • Elemento superior
  • Primer elemento dependiente
  • Último elemento dependiente
  • Elemento igual anterior (o izquierdo)
  • Elemento igual posterior (o derecho)
tal como se muestra en la figura que aparece a continuación. Otras funciones y métodos dan soporte a la manipulación de los propios elementos, con funciones y métodos para crear elementos, establecer o consultar los valores de dichos elementos, insertar nuevos elementos en el árbol y eliminar elementos del árbol. Consulte los apartados Funciones de programa de utilidad de nodo de lenguaje C y Funciones de programa de utilidad de analizador, o el documento Java si desea ver más información.

Un elemento de sintaxis con conexiones con otros elementos


La figura muestra un elemento de sintaxis. Este elemento está conectado a otros elementos. Los otros elementos son: elemento igual anterior y elemento igual posterior a la izquierda y la derecha del elemento, primer elemento dependiente y último elemento dependiente debajo del elemento, y elemento superior, que está encima del elemento.
En la figura siguiente se describe un árbol de elementos de sintaxis simple, que muestra un rango completo de interconexiones entre los elementos.

Árbol de elementos de sintaxis


La figura muestra un árbol de elementos de sintaxis. El elemento A está en la parte superior del diagrama, encima del elemento B que, a su vez, está encima de los elementos C, D y E, que están al mismo nivel.

El elemento A es el elemento raíz del árbol. No tiene elemento superior porque es la raíz. Su primer elemento dependiente es el elemento B. Dado que A no tiene otros elementos dependientes, el elemento B es también el último elemento dependiente de A.

El elemento B tiene tres elementos dependientes: los elementos C, D y E. El elemento C es el primer elemento dependiente de B; el elemento E es el último elemento dependiente de B.

El elemento C tiene dos elementos iguales: los elementos D y E. El elemento igual posterior del elemento C es el elemento D. El elemento igual posterior del elemento D es el elemento E. El elemento igual anterior del elemento E es el elemento D. El elemento igual anterior del elemento D es el elemento C.

La figura siguiente muestra la primera generación de elementos de sintaxis de un mensaje típico recibido por WebSphere Business Integration Message Broker. Tenga en cuenta que no todos los mensajes tendrán una cabecera MQRFH2.

Primera generación de elementos de sintaxis en un mensaje típico


En la parte superior de la figura hay un recuadro etiquetado como Root (Raíz). Una línea conecta el recuadro con otro recuadro marcado como Properties (Propiedades), situado abajo y a la izquierda, y otra línea lo conecta con otro recuadro marcado como XML, debajo y a la derecha. Entre estos dos recuadros hay dos recuadros más, marcados como MQMD y MQRFH2.

Con frecuencia, a estos elementos de la primera generación se les denomina "carpetas", en las cuales se guardan elementos de sintaxis que representan cabeceras de mensajes y contenido de mensajes. En este ejemplo, el primer elemento dependiente de la raíz es la carpeta Propiedades. El elemento igual posterior de Propiedades es la carpeta para el MQMD de los mensajes de WebSphere MQ entrantes. El elemento igual posterior es la carpeta para la cabecera MQRFH2. Finalmente, está la carpeta que representa el contenido del mensaje, que (en este ejemplo) es un mensaje XML.

La figura anterior incluye una cabecera MQMD y otra MQRFH2. Todos los mensajes que recibe un nodo de proceso MQmessage incluyen una cabecera MQMD; hay otras cabeceras que también pueden incluirse.

Navegación por un mensaje XML

Supongamos que tenemos el mensaje XML siguiente:
  <Business>
    <Product type='messaging'></Product>
    <Company>
      <Title>IBM</Title>
      <Location>Hursley</Location>
      <Department>WebSphere MQ</Department>
    </Company>
  </Business>
En este ejemplo, los elementos son de los tipos siguientes:
Elemento de nombre
Business, Product, Company, Title, Location, Department
Elemento de valor
IBM, Hursley, WebSphere MQ
Elemento de nombre-valor
type='messaging'

Puede utilizar métodos y funciones de programa de utilidad de nodo (o las funciones de programa de utilidad de analizador similares) para desplazarse por un mensaje. Si consideramos el mensaje XML mostrado anteriormente, primero debe invocar cniRootElement, con el mensaje recibido por el nodo como entrada de esta función. En Java, debe invocar getRootElement en el MbMessage entrante. Esta acción devuelve un MbElement que representa la raíz del elemento. El elemento raíz no debe modificarse mediante un nodo de plug-in.

La figura anterior muestra que el último elemento dependiente del elemento raíz es la carpeta que contiene el árbol de analizadores XML. Para navegar hasta esta carpeta, puede invocar cniLastChild (con la salida de la llamada anterior como entrada de esta función) en un nodo C, o invocar el método getLastChild en el elemento raíz, en un nodo Java.

Sólo hay un elemento (<Business>) en el nivel superior del mensaje, por lo tanto, al invocar cniFirstChild (en C) o getFirstChild (en Java) se llega a este punto del árbol. Puede utilizar cniElementType o getElementType para obtener el tipo correspondiente (es decir, name), seguido de cniElementName o getName para devolver el propio nombre (Business).

<Business> tiene dos elementos dependientes, <Product> y <Company>, así que puede utilizar cniFirstChild o getFirstChild seguido de cniNextSibling o getNextSibling para desplazarse hasta cada uno de ellos.

<Product> tiene un atributo (type='messaging'), que es un elemento dependiente. Utilice cniFirstChild o getFirstChild otra vez para desplazarse hasta este elemento, y cniElementType o getType para devolver el tipo correspondiente (es decir, name-value). Utilice cniElementName o getName como antes para obtener el nombre. Para obtener el valor, invoque cniElementValueType para que devuelva el tipo, seguido de la función adecuada del grupo cniElementValue. En este ejemplo, será cniElementCharacterValue. En Java, utilice el método getValue, que devolverá un objeto Java que representa el valor de elemento.

<Company> tiene tres elementos dependientes, y cada uno de ellos tiene un elemento dependiente que es un elemento de valor IBM, Hursley y WebSphere MQ). Puede utilizar las funciones ya descritas para desplazarse hasta ellos y acceder a sus valores.

Hay otras funciones disponibles para copiar el árbol de elementos (o parte del mismo). Por lo tanto la copia puede modificarse añadiendo o eliminando elementos y cambiando sus nombres y valores para crear un mensaje de salida.

Conceptos relacionados
Diseño de extensiones definidas por el usuario
Nodos del flujo de mensajes
Nodos de proceso de mensajes definidos por el usuario
Ciclo de vida de los nodos de proceso de mensajes definidos por el usuario

Tareas relacionadas
Creación de un nodo de proceso de mensajes en C
Creación de un nodo de proceso de mensajes o un nodo de salida en Java

Referencia relacionada
Funciones de programa de utilidad de nodo de lenguaje C
Funciones de programa de utilidad de analizador