Manejo de excepciones y puntos muertos de base de datos en flujos de agregaciones

Al utilizar flujos de agregaciones, es posible que se produzcan excepciones o puntos muertos en la base de datos. Este tema le indica cómo tratarlos.

Antes de empezar:

Para llevar a cabo esta tarea, debe haber completado las siguientes tareas:

Cómo manejar las excepciones

Si se ha detectado un error en sentido descendente de un nodo AggregateReply, el intermediario emite una excepción. Es posible que otro nodo de flujo de mensajes genere una excepción utilizando la sentencia ESQL THROW. En cualquiera de los dos casos, cuando se emite una excepción, ésta se detecta en uno de los dos lugares siguientes:

  • El nodo de entrada al que llegan las respuestas
  • El nodo AggregateReply

En la tabla siguiente se listan sucesos y lo que le sucede a una excepción emitida en sentido descendente del nodo AggregateReply.

Suceso Mensaje propagado Terminal de salida Excepción detectada en
Una respuesta esperada llega al nodo de entrada y se pasa al terminal de entrada del nodo AggregateReply. Es la última respuesta necesaria para que la agregación sea completa. Mensaje de respuesta agregado que contiene todas las respuestas Terminal de salida Nodo Input
Una respuesta inesperada llega al nodo de entrada y se pasa al nodo AggregateReply. No se reconoce como una respuesta válida y la propiedad Tiempo de espera de mensaje desconocido está establecida en 0. Mensaje recibido Desconocido Nodo Input
Se ha excedido el tiempo de espera porque todavía no han llegado todas las respuestas para una agregación. Mensaje de respuesta agregado que contiene todas las respuestas que han llegado Tiempo de espera Nodo AggregateReply
Se produce un suceso de tiempo de espera excedido desconocido porque un mensaje retenido no se identificó como una respuesta válida. Mensaje retenido Desconocido Nodo AggregateReply
Se determina que una agregación está completa en un momento distinto del momento en que ha llegado la última respuesta. Mensaje de respuesta agregado que contiene todas las respuestas Terminal de salida Nodo AggregateReply

Si desea manejar errores que se producen en flujos de agregación, debe detectar estas excepciones en todas las instancias de cada uno de los nodos del flujo de mensajes. Para ello:

  1. Cambie a la perspectiva Desarrollo de aplicaciones de intermediario.
  2. Abra el flujo de mensajes con el que desea trabajar.
  3. Si desea manejar estas excepciones, conecte el terminal de captación de cada nodo de entrada y AggregateReply a una secuencia de nodos que maneja el error que se ha producido.

    Si desea una método unificado para el manejo de errores, conecte los terminales de captación de todos estos nodos a una sola secuencia de nodos, o cree un subflujo que maneje errores de una forma coherente y conéctelo a cada terminal de captación.

  4. Si desea que el intermediario maneje estas excepciones utilizando el manejo de errores por omisión, no conecte los terminales de captación de estos nodos.
Si conecta el terminal de captación del nodo AggregateReply y desea dirigir el mensaje propagado a través de este terminal a un destino desde el que se pueda recuperar para un posterior proceso, debe incluir un nodo Compute en el flujo de captaciones para proporcionar cualquier proceso específico del transporte. Por ejemplo, debe añadir una cabecera MQMD si desea transferir el mensaje a una cola de WebSphere MQ desde un nodo MQOutput.

El ejemplo ESQL siguiente muestra cómo añadir una cabecera MQMD y pasar las respuestas recibidas por el nodo AggregateReply:

-- Add MQMD
SET OutputRoot.MQMD.Version = 2;
.
-- Include consolidated replies in the output message
SET OutputRoot.XML.Data.Parsed = InputRoot.ComIbmAggregateReplyBody;
.

Si desea propagar la información sobre la excepción en el mensaje de salida, también debe establecer la propiedad Modalidad de cálculo del nodo Compute en un valor que incluyaExcepción.

Cómo manejar los puntos muertos de la base de datos

Los nodos AggregateRequest y AggregateReply acceden a la base de datos del intermediario para grabar y leer información relacionada con el proceso de peticiones agregadas en la tabla BAGGREGATE. Los puntos muertos pueden producirse cuando varios recursos intentan acceder simultáneamente a las tablas de base de datos.

Para evitar que se produzca un punto muerto en la base de datos:

  1. Si crea una base de datos del intermediario con Sybase en un sistema distribuido, o DB2 en z/OS, el valor de bloqueo por omisión es el bloqueo de página. Este valor puede ocasionar puntos muertos dentro de flujos de agregaciones. Al configurar la base de datos de un intermediario que albergará los flujos de mensajes de agregación, al crear la base de datos o más adelante, habilite el bloqueo de filas para impedir que se produzcan puntos muertos potenciales.
  2. Si crea una base de datos del intermediario mediante DB2 en un sistema distribuido, el intermediario puede sufrir puntos muertos si está habilitada la característica de bloqueo de llave siguiente de DB2. El intermediario informará de la situación de punto muerto y grabará el mensaje de anotaciones de sucesos BIP2322 con el estado SQL 40001.

    Si surge este problema, inhabilite el bloqueo de clave siguiente especificando lo siguiente en una ventana de mandatos de DB2:

    db2set DB2_RR_TO_RS=YES

    Cuando este mandato finaliza, reinicie el gestor de base de datos DB2. Este mandato no afecta de ninguna otra forma al funcionamiento de esta base de datos.

Si utiliza otra base de datos, estos puntos muertos no se producen.

Conceptos relacionados
Flujos de mensajes
Agregación de flujos de mensajes

Tareas relacionadas
Configuración de flujos de agregación
Creación del flujo ramificado de agregaciones
Creación de un flujo de abanico de entrada de agregación
Asociación de flujos de agregaciones ramificados y de abanicos de entrada
Configuración de tiempos de espera para la agregación
Utilización de varios nodos AggregateControl
Manejo de errores en flujos de mensajes
Diseño de un flujo de mensajes
Creación de un flujo de mensajes
Definición del contenido del flujo de mensajes

Referencia relacionada
Nodo AggregateControl
Nodo AggregateReply
Nodo AggregateRequest