Planificación de los nodos de proceso de mensajes definido por el usuario

En este tema se describe cómo escribir el nodo de proceso de mensajes para asegurarse de que funciona correctamente. Describe cómo puede utilizar el nodo de proceso de mensajes para navegar por un mensaje.

Consideraciones acerca del diseño

Antes de desarrollar e implementar el nodo de proceso de mensajes, debe decidir uno de los aspectos siguientes:
  • El analizador de mensajes que analizará el mensaje
  • Si se alteran temporalmente los valores de los atributos 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 fin de proceso de mensajes y el soporte de transacciones que soportará el nodo
  • Los atributos de configuración que necesita el nodo de proceso de mensajes que debe exteriorizarse para que pueda alterarlos el diseñador del flujo de mensajes.
  • Las API de nodo opcionales que proporcionará el nodo definido por el usuario
  • Temas de desarrollo generales:

Navegación por los elementos de sintaxis

La infraestructura del intermediario proporciona funciones que permiten que una implementación del nodo de proceso de mensajes cruce la representación del árbol del mensaje, con funciones y métodos que permitan navegar desde el elemento actual hasta su:
  • Padre
  • Primer hijo
  • Último hijo
  • Elemento hermano anterior (izquierdo)
  • Elemento hermano siguiente (derecho)
Como se muestra en la figura siguiente. Otras funciones y métodos permiten manipular los propios elementos, con funciones y métodos que crean elementos, para establecer o consultar sus valores, para insertar elementos nuevos en el árbol y para suprimir elementos del árbol. Consulte Funciones de programa de utilidad de nodo en C y Funciones de programa de utilidad de analizador en C o el javadoc para obtener más información.

Un elemento de sintaxis con conexiones con otros elementos.


La figura muestra un elemento de sintaxis. Está conectada a otros elementos. Estos elementos son: el hermano anterior y el hermano siguiente situados, respectivamente, a la izquierda y a la derecha del elemento, el primer hijo y el último hijo, situados debajo del elemento, y el elemento padre, que está encima del elemento.
La figura siguiente describe un árbol de elementos de sintaxis sencillo que muestra un rango completo de las 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 en el mismo nivel.

El elemento A es el elemento raíz del árbol. No tiene padre porque es la raíz. Tiene un primer hijo del elemento B. Debido a que A no tiene más hijos, el elemento B también es el último hijo de A.

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

El elemento C tiene dos hermanos: los elementos D y E. El hermano siguiente del elemento C es el elemento D. El hermano siguiente del elemento D es el elemento E. El hermano anterior del elemento E es el elemento D. El hermano anterior del elemento D es el elemento C.

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

La primera generación de los elementos de sintaxis de un mensaje típico


En la parte superior de la figura hay un recuadro con la etiqueta Root. Una línea conecta el recuadro con otro recuadro denominado Properties que está situado debajo del mismo, a la izquierda, y otra línea conecta con un recuadro denominado XML que está debajo y a la derecha. Entre estos dos, hay dos recuadros adicionales, denominados MQMD y MQRFH2.

En la primera generación se suele hacer referencia a estos elementos como "carpetas" en las que se almacenan los elementos de sintaxis que representan cabeceras de mensajes y datos de contenido de mensajes. En este ejemplo, el primer hijo de la raíz es la carpeta Properties. El hermano siguiente de Properties es la carpeta del MQMD de los mensajes WebSphere MQ de entrada. El hermano siguiente 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 un MQMD y una cabecera MQRFH2. Todos los mensajes que recibe el nodo de proceso de MQmessage incluyen una cabecera MQMD y también pueden incluirse muchas otras cabeceras.

Navegación por un mensaje XML:

Supongamos que tiene 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 las funciones y métodos del programa de utilidad del nodo (o funciones de programa de utilidad de analizador similares) para desplazarse por un mensaje. Tomando como ejemplo el mensaje XML mostrado anteriormente, debe llamar al elemento cniRootElement en primer lugar con el mensaje que ha recibido el nodo como entrada para esta función. En Java, tiene que llamar a getRootElement en el mensaje MbMessage de entrada. Esto devuelve un elemento MbElement que representa la raíz del elemento. El elemento raíz no se debe modificar mediante un nodo definido por el usuario.

La figura anterior muestra que el último hijo del elemento raíz es la carpeta que contiene el árbol del analizador XML. Puede navegar hasta esta carpeta llamando a cniLastChild (con la salida de la llamada anterior como entrada para esta función) en un nodo C o llamando al método getLastChild del elemento raíz en un nodo Java.

En el nivel superior del mensaje sólo hay un elemento (<Business>), por lo tanto si se llama a cniFirstChild (en C) o a getFirstChild (en Java) se traslada a este punto del árbol. Puede utilizar cniElementType o getElementType para obtener su tipo (que es name), seguido de cniElementName o getName para que devuelva el propio nombre (Business).

<Business> tiene dos hijos, <Product> y <Company>, por lo tanto, puede utilizar cniFirstChild o getFirstChild seguido de cniNextSibling o de getNextSibling para desplazarse por ellos por orden.

<Product> tiene un atributo (type='messaging'), que es un elemento hijo. Vuelva a utilizar cniFirstChild o getFirstChild para desplazarse por este elemento y cniElementType o getType para devolver su tipo (que es nombre-valor). Utilice cniElementName o getName como antes para obtener el nombre. Para obtener el valor, llame a cniElementValueType para devolver el tipo, seguido de la función adecuado en el grupo cniElementValue. En este ejemplo, será cniElementCharacterValue. En Java utilice el método getValue, que devolverá un objeto Java que representará el valor del elemento.

<Company> tiene tres hijos, cada uno de los cuales tiene un hijo que es un elemento de valor (IBM, Hursley y WebSphere MQ). Puede utilizar las funciones que ya se han descrito para desplazarse por las mismas y acceder a sus valores.

Se dispone de otras funciones para copiar el árbol de elementos, o parte del mismo. A continuación, la copia se puede modificar añadiendo o suprimiendo elementos y modificando sus nombres y valores para crear un mensaje de salida.

Avisos | Marcas registradas | Descargas | Biblioteca | Soporte | Su opinión
Copyright IBM Corporation 1999, 2006 Última actualización: 22/08/2006
as01395_