El ejemplo del depósito 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 venta se analizan en una fecha posterior, el almacenamiento de los mensajes se organizado de forma que sea fácil seleccionar registros para horas especificadas. 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 columnas separados cuando se inserta el mensaje en la base de datos. La tabla de la base de datos contiene cuatro columnas:
Almacenando los datos de esta forma es posible recuperar registros entre periodos de tiempo determinados, por ejemplo, entre las horas de 9:00 a.m. a 12:00 p.m. o de 12:01 p.m. a 5:00 p.m., que permitiría realizar una comparación entre las ventas de la mañana y de la tarde.
Si utilizar las columnas de fecha y hora adicionales, una aplicación tendría que leer todos los registros de la base de datos, examinarlos todos, procesar los que resulten interesantes y desechar el resto. La posibilidad de recuperar registros de forma controlada y precisa impide potencialmente malgastar la gran cantidad de proceso que significaría la lectura de 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 es el tipo de proceso que se incluye normalmente como parte de un flujo de mensajes más complejo cuando ha habido la necesidad de archivar datos.
El proceso del ejemplo consta de dos flujos de mensajes. Los flujos de mensajes son:
Los detalles de los flujos de mensajes y del proceso que realizan son los siguientes:
El flujo de mensajes WarehouseData (de datos de almacén) realiza el siguiente proceso:
El flujo de mensajes WarehouseData consta de los siguientes nodos:
El nodo MQInput DATAWAREHOUSE_IN_Q lee el mensaje XML. Como 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 de cálculo Warehouse_Input_Message convierte toda la carga útil del mensaje (ROOT.XML) en un BLOB usando la función ASBITSTREAM, inserta el mensaje en una base de datos y, finalmente, da formato al mensaje de confirmación.
El nodo MQOutput DATAWAREHOUSE_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_FAILURE_Q como mensaje de WebSphere MQ.
El flujo de mensajes VerifyDatabaseContents realiza el siguiente proceso:
El flujo de mensajes VerifyDatabaseContents consta de los siguientes nodos:
El nodo MQInput DATAWAREHOUSE_VERIFY_CONTENTS_IN_Q lee el mensaje XML. Como 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 de cálculo Verify_Contents realiza las siguientes operaciones:
El nodo MQOutput DATAWAREHOUSE_VERIFY_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_FAILURE_Q como mensaje de WebSphere MQ.
En este ejemplo se usan dos mensajes. El primero es un mensaje que se archivará y el segundo es un mensaje para especificar la fecha y las horas que ha de utilizar el flujo de mensajes Verify Database Content. A continuación pueden verse ejemplos de estos dos mensajes.
<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>
<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>