Acerca del ejemplo Almacén de datos

El ejemplo Almacén de datos es una aplicación de ejemplo de flujo de mensajes que muestra un caso en el que se utiliza un flujo de mensajes para archivar datos como, por ejemplo, datos de venta, en una base de datos. Los datos se almacenan para que los analice posteriormente otro flujo de mensajes u otra aplicación.

Como los datos de ventas se analizan en una fecha posterior, el almacenamiento de los mensajes se ha organizado de forma que sea fácil seleccionar registros para horas especificadas. Cuando se inserta el mensaje en la base de datos, la fecha y la hora en que se grabó el mensaje de WebSphere MQ que contenía el registro de ventas se almacenan como valores de columna separados. La tabla de base de datos contiene cuatro columnas:

Al almacenar los datos de esta forma, es posible recuperar registros entre periodos de tiempo determinados, por ejemplo, de 9:00 a.m. a 12:00 p.m. o de 12:01 p.m. a 5:00 p.m., lo que permite realizar una comparación entre las ventas de la mañana y de la tarde.

Sin el uso de la columna de fecha y hora adicionales, una aplicación tiene que leer todos los registros de la base de datos, examinarlos todos, procesar los que resulten de interés y desechar el resto. La posibilidad de recuperar registros de forma controlada y precisa evita potencialmente el tener que consumir una gran cantidad de procesos, lo que ocurre si se han de leer todos los registros.

El ejemplo ilustra una técnica para el archivado de un mensaje, o parte de él, en una base de datos. Este tipo de proceso que se incluye normalmente como parte de un flujo de mensajes más complejo cuando existe la necesidad de archivar datos.

El proceso del ejemplo consta de dos flujos de mensajes:

Los detalles del flujo de mensajes y el proceso que realiza aparecen en la siguiente sección:

Flujo de mensajes WarehouseData

El flujo de mensajes WarehouseData realiza el siguiente proceso:

  1. Lee un mensaje de WebSphere MQ que contiene una carga útil XML. La carga útil contiene los datos que se han de archivar.
  2. Convierte una parte del árbol de mensaje en un BLOB listo para su inserción en la base de datos.
  3. Inserta el mensaje BLOB y la fecha y hora en la que se graban los mensajes de WebSphere MQ en una base de datos.
  4. Envía un mensaje de confirmación de WebSphere MQ para indicar la inserción correcta del mensaje en la base de datos.

El flujo de mensajes WarehouseData consta de los siguientes nodos:

Una captura de pantalla del flujo de mensajes WarehouseData.

El nodo Data_Warehouse_In_Q MQInput lee el mensaje XML. Dado que el mensaje entrante tiene un formato XML autodefinido, no es necesario especificar ningún conjunto de mensajes o formato para que se analice correctamente.

El nodo Compute Warehouse_Input_Message convierte toda la carga útil del mensaje (ROOT.XMLNSC) en un BLOB utilizando la función ASBITSTREAM, inserta el mensaje en una base de datos y, finalmente, da formato al mensaje de confirmación.

El nodo MQOutput Data Warehouse_Out_Q graba el mensaje de salida como mensaje de WebSphere MQ.

Si se produce un error durante el proceso de la base de datos, se formatea un mensaje en el nodo Compute Create_Error_Message y se graba en el nodo MQOutput DATAWAREHOUSE_Warehouse_Q como mensaje de WebSphere MQ.

Flujo de mensajes VerifyDatabaseContents

El flujo de mensajes VerifyDatabaseContents realiza el proceso siguiente:

  1. Lee un mensaje WebSphere MQ que contiene una carga útil XML que especifica el intervalo (hora de inicio y finalización) del cual ha de obtenerse una cuenta de registros
  2. Consulta la base de datos para determinar cuántos registros hay para las horas especificadas
  3. Da formato al mensaje de respuesta
  4. Graba un mensaje de WebSphere MQ

El flujo de mensajes VerifyDatabaseContents consta de los siguientes nodos:

Una captura de pantalla del flujo de mensajes VerifyDatabaseContents.

El nodo MQOIntput Data_Warehouse_Verify_Contents_In_Q lee el mensaje XML. Dado que el mensaje entrante tiene un formato XML autodefinido, no es necesario especificar ningún conjunto de mensajes o formato para que se analice correctamente.

El nodo Compute Verify_Contents realiza las siguientes acciones:

  1. Extrae la fecha y hora de inicio y finalización que se utilizan en la consulta de bases de datos del mensaje entrante
  2. Emite una sentencia SELECT de SQL para la tabla de base de datos de archivado, a fin de determinar el número de registros existente en el rango de horas especificado
  3. Da formato a un mensaje de respuesta.

El nodo MQOutput Data_Warehouse_Contents_Out_Q graba el mensaje de salida de WebSphere MQ.

Si se produce un error durante el proceso de la base de datos, se formatea un mensaje en el nodo Compute Create_Error_Message y se graba en el nodo MQOutput DATAWAREHOUSE_Warehouse_Q como mensaje de WebSphere MQ.

Mensajes de prueba

En este ejemplo se utilizan dos mensajes

Los ejemplos siguientes muestran los dos tipos de flujos.

Mensaje a archivar

<SaleEnvelope>
<Header>
<SaleListCount>1</SaleListCount>
</Header>
<SaleList>
<Invoice>
<Initial>K</Initial>
<Initial>A</Initial>
<Surname>Braithwaite</Surname>
<Item>
<Code>00</Code>
<Code>01</Code>
<Code>02</Code>
<Description>Twister</Description>
<Category>Games</Category>
<Price>00.30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>The Times Newspaper</Description>
<Category>Books and Media</Category>
<Price>00.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00.50</Balance>
<Currency>Sterling</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<Code>05</Code>
<Code>01</Code>
<Description>The Origin of Species</Description>
<Category>Books and Media</Category>
<Price>22.34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36.20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81.84</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

Mensaje para especificar la fecha y hora de la búsqueda

<Archive_Query>
<Start_Time>
<Day>mm/dd/yyyy</Day>
<Time>hh:mm:ss</Time>
</Start_Time>
<End_Time>
<Day>mm/dd/yyyy</Day>
<Time>hh:mm:ss</Time>
</End_Time>
</Archive_Query>

Volver a la página inicial del ejemplo