Ciclo de vida de un analizador definido por el usuario

Este tema sirve de guía a través de las distintas etapas de la vida de un analizador de flujo de mensajes definido por el usuario. Las etapas son las siguientes:

Este tema le ayudará a comprender las interacciones que tienen lugar entre los componentes de WebSphere Business Integration Message Broker al ejecutarse un analizador definido por el usuario. En él se define cada etapa desde el punto de vista de los sucesos que las originan, los sucesos que se producen mientras dura cada una de ellas o los que tienen lugar una vez finalizadas, y también se definen las API que se invocan. Una vez que comprenda los conceptos incluidos en este tema, podrá diseñar y desarrollar el analizador de forma más efectiva.

Registro

La primera fase del ciclo de vida del analizador definido por el usuario es el registro. El propósito de la fase de registro es registrar el analizador definido por el usuario con el intermediario. Esta fase se activa mediante la fase de inicialización del inicio del proceso de grupo de ejecución.

Creación de una instancia

El analizador se crea durante la fase de creación de instancias del ciclo de vida del analizador. Al recibirse un mensaje de entrada, o crearse un mensaje de salida en un nodo de cálculo, se identifica el analizador relevante y los requisitos del analizador se toman de la cabecera de mensaje, como por ejemplo MQMD. El intermediario inicia, carga la biblioteca de implementación cargable (lil) y la fábrica del analizador. El proceso de grupo de ejecución crea una instancia del analizador, y el intermediario realiza una llamada a cpiCreateContext para permitir que el objeto de analizador adquiera la sección adecuada del mensaje.

Antes de invocar esta función, el intermediario habrá creado un elemento de nombre como elemento raíz efectivo para el analizador. No obstante, este elemento no recibirá ningún nombre. El analizador debe denominar este elemento en la función cpiSetElementName.

Seguidamente, el intermediario realiza una llamada a cpiParseBuffer. El propósito de cpiParseBuffer en esta etapa es realizar la inicialización que sea necesaria y devolver la longitud del contenido de mensaje del que va a apropiarse el analizador. El analizador valora la cantidad de datos de mensaje que debe analizar y reclama el número de bytes apropiado.

Siempre que se crea una instancia de un objeto de analizador definido por el usuario, el intermediario de mensajes invoca también la función de implementación de creación de contexto cpiCreateContext. Esto permite al analizador asignar datos de instancia asociados con el analizador. También es necesaria un función cpiDeleteContext para suprimir el contexto del objeto de analizador.

Proceso

El propósito de la fase de proceso es manipular, alterar y crear referencias de los elementos de un objeto de mensaje que el analizador va a interpretar. La fase de proceso de flujo de mensajes empieza al producirse alguna actividad de proceso de mensajes, como la navegación, que requiere acceso a un elemento de un mensaje que no existe en la representación de modelo interno del intermediario del mensaje en cuestión.

Durante la fase de proceso de flujo de mensajes, se invoca el analizador en respuesta a los intentos de navegar por el árbol de mensajes. El analizador examina el almacenamiento intermedio asignado en el momento de invocarse a cpiParseBuffer y crea los elementos de mensaje necesarios.

El analizador puede entonces navegar por los elementos de mensaje, utilizando alguna de las siguientes funciones de implementación de analizador, o todas ellas:
  • cpiParseFirstChild
  • cpiParseLastChild
  • cpiParsePreviousSibling
  • cpiParseNextSibling

Se invocan estas funciones al realizarse cualquier forma de navegación, como por ejemplo, una expresión de filtro que especifica un campo de mensaje, hasta la parte del árbol de elementos de sintaxis que representa lógicamente los datos para un formato de mensaje al que da soporte un analizador definido por el usuario. Esto ocurre cuando una operación que tiene lugar en el intermediario requiere crear o ampliar un árbol de elementos de sintaxis.

Cuando tenga que decidir la mejor manera de desplazarse por el árbol de elementos de sintaxis, debe tener en cuenta los puntos siguientes:
  • Un elemento de sintaxis tiene cinco punteros a sus elementos superiores, sus elementos iguales, y al primero y último de sus elementos dependientes. Esto significa que dispone de un conjunto finito de navegaciones.
  • Las mismas clases internas se utilizan para realizar todas estas navegaciones.
  • El analizador no controla la navegación. El ESQL o un nodo definido por el usuario decide en qué dirección navegar y el orden en que deben invocarse las funciones de implementación del analizador de navegación. El analizador de plug-ins no tiene control sobre esto, y necesita responder correctamente al esquema de navegación elegido. Esto puede significar tener que analizar de derecha a izquierda, así como de izquierda a derecha, por ejemplo.
  • Al escribir un analizador definido por el usuario, se presupone que el usuario colocará el propio código de analizador en una función parseNextItem. Esta función debe crear de uno en uno los elementos del árbol de elementos de sintaxis, y también debe definir los nombres, valores y distintivos completos adecuadamente. El modo en que implemente esta función depende de la naturaleza de la corriente de bits que va a analizarse. Puede utilizar el analizador de ejemplo suministrado con WebSphere Business Integration Message Broker para realizar una demostración.

Cuando el analizador ha terminado de analizar las partes relevantes del árbol de elementos de sintaxis, invoca a cpiWriteBuffer. Esta función añade su parte correspondiente del árbol de elementos de sintaxis a la corriente de bits del almacenamiento intermedio de mensajes asociado con el objeto de analizador. Esto crea el mensaje de salida.

Destrucción

La fase de destrucción es la fase final del ciclo de vida del analizador definido por el usuario. Cuando el analizador ha escrito su parte correspondiente del árbol de elementos de sintaxis en la corriente de bits y ha creado el mensaje de salida, los recursos de sistema que el intermediario ha creado para que los utilice el analizador deben liberarse.

La fase de destrucción empieza cuando se utiliza el mandato mqsistop para detener el proceso de ejecución.

Conceptos relacionados
Analizadores
Analizadores definidos por el usuario
Extensiones definidas por el usuario

Tareas relacionadas
Creación de un analizador en C

Referencia relacionada
API de analizador C definida por el usuario