Ciclo de vida del analizador definido por el usuario

Existen varias etapas en el ciclo de vida de un analizador de flujo de mensajes definido por el usuario.

Estas etapas son las siguientes:
  • Registro
  • Creación de una instancia
  • Proceso
  • Destrucción

En este tema se describen las interacciones que tienen lugar entre los componentes de WebSphere ® Integración de IBM® cuando se ejecuta un analizador definido por el usuario. Explica cada paso en términos de los sucesos que inician cada etapa y los sucesos que se producen durante y después de cada etapa, así como las API a las que se llama. Al comprender los conceptos de este tema podrá diseñar y desarrollar el analizador de un modo más eficaz.

Registro

La primera fase del ciclo de vida del analizador definido por el usuario es la fase de registro. La finalidad de la fase de registro es registrar el analizador definido por el usuario con el nodo de integración. Esta fase se inicia cuando se inicia un servidor de integración.

Creación de una instancia

El analizador se crea durante la fase de creación de una instancia del ciclo de vida del analizador. Cuando se recibe un mensaje de entrada o se crea un mensaje de salida en un nodo Cálculo , se identifica el analizador relevante y se toman los requisitos del analizador de la cabecera del mensaje, como el MQMD. El nodo de integración se inicia y carga la LIL (Loadable Implementation Library) y la fábrica de analizadores. Antes de llamar a la función cpiCreateContext, el nodo de integración crea un elemento de nombre como el elemento raíz efectivo para el analizador. Sin embargo, este elemento no tiene nombre. El analizador debe asignar un nombre a este elemento en la función cpiSetElementName. El proceso del servidor de integración crea una instancia del analizador y el nodo de integración realiza una llamada a cpiCreateContext para que el objeto del analizador adquiera la sección adecuada del mensaje.

A continuación, el nodo de integración realiza una llamada a cpiParseBuffer. cpiParseBuffer realiza la inicialización que sea necesaria y devuelve la longitud del contenido de mensaje del que el analizador está tomando la propiedad. El analizador evalúa la cantidad de los datos del mensaje que se han de analizar y reclamará el número de bytes adecuado.

Cuando se crea una instancia de un objeto de analizador definido por el usuario, el nodo de integración invoca también la función de implementación de creación de contexto cpiCreateContext. Esta llamada permite al analizador asignar los datos de instancia que tiene asociados. También es necesaria una función cpiDeleteContext para suprimir el contexto del objeto de analizador.

Proceso

Durante la fase de proceso, el analizador manipula y modifica los elementos del objeto de mensajes y hace referencia a dichos elementos. La fase de proceso del flujo de mensajes comienza cuando se produce cualquier actividad de proceso de mensajes como, por ejemplo, la navegación que requiere acceso a un elemento dentro de un mensaje que no existe en la representación del modelo interno que hace el nodo de integración del mensaje en cuestión.

Durante la fase de proceso del flujo de mensajes, se invoca el analizador como respuesta a los intentos de navegar por el árbol de mensajes. El analizador examina el almacenamiento intermedio que se ha asignado al llamar a cpiParseBuffer y crea los elementos de mensaje necesarios.

A continuación, el analizador puede navegar por los elementos de mensajes utilizando cualquiera o todas las funciones de implementación del analizador siguientes:
  • cpiParseFirstChild
  • cpiParseLastChild
  • cpiParsePreviousSibling
  • cpiParseNextSibling

Se invocan estas funciones durante cualquier tipo de navegación (por ejemplo una expresión de filtro que especifica un campo de mensaje) en la parte del árbol de elementos de sintaxis que representa lógicamente los datos de un formato de mensaje soportado por un analizador definido por el usuario. Esta navegación se produce cuando una operación interna del nodo de integración requiere que se cree o amplíe un árbol de elementos de sintaxis.

Debe tener en cuenta los puntos siguientes cuando decida el mejor modo de navegar por el árbol de elementos de sintaxis:
  • Un elemento de sintaxis tiene cinco punteros hacia sus padres, hermanos y primer y último hijos, para que está disponible un conjunto finito de navegaciones.
  • Se utilizan las mismas clases internas 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 hay que navegar y el orden en que se invocan las funciones de implementación de analizador de navegación. El analizador definido por el usuario no tiene ningún control sobre la dirección y el orden y debe responder correctamente al esquema de navegación elegido; por ejemplo, analizar de derecha a izquierda, así como de izquierda a derecha.
  • Cuando grabe un analizador definido por el usuario, coloque el código de analizador en una función parseNextItem. Esta función debe crear uno por uno los elementos del árbol de elementos de sintaxis, debe establecer los nombres y valores y completar correctamente los distintivos. El modo en que implemente esta función dependerá de la naturaleza de la corriente de bits que se va a analizar. El analizador de ejemplo proporcionado muestra este comportamiento.

Cuando el analizador ha acabado de analizar las partes relevantes del árbol de elementos de sintaxis, llama a cpiWriteBuffer. Esta función añade su parte del árbol de elementos de sintaxis a la corriente de bits del almacenamiento intermedio de mensajes asociado con el objeto de analizador y 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 del árbol de elementos de sintaxis en la corriente de bits y ha creado el mensaje de salida, es necesario liberar los recursos del sistema que ha creado el nodo de integración para que los utilice el analizador.

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