Das Beispielprogramm 'Data Warehouse' ist eine Beispielanwendung für einen Nachrichtenfluss zur Darstellung eines Szenarios, in dem ein Nachrichtenfluss zum Archivieren von Daten (z. B. Vertriebszahlen) in einer Datenbank verwendet wird. Die Daten werden für eine spätere Analyse durch einen anderen Nachrichtenfluss oder eine andere Anwendung gespeichert.
Da die Vertriebsdaten zu einem späteren Zeitpunkt analysiert werden, wurde die Speicherung der Nachrichten in einer Weise organisiert, die das Auswählen von Datensätzen für einen festgelegten Zeitraum erleichtert. Das Datum und die Uhrzeit, zu denen die WebSphere MQ-Nachricht mit dem Vertriebsdatensatz geschrieben wurde, werden beim Einfügen der Nachricht in die Datenbank als separate Spaltenwerte gespeichert. Die Datenbanktabelle enthält vier Spalten:
Durch das Speichern der Daten in dieser Weise ist es möglich, Datensätze für bestimmte Zeiträume abzurufen, z. B. den Zeitraum zwischen 09:00 und 12:00 Uhr oder 12:01 und 17:00 Uhr. Dadurch könnte beispielsweise ein Vergleich zwischen den Vertriebszahlen am Vor- und Nachmittag angestellt werden.
Ohne die Verwendung einer zusätzlichen Datums- und Zeitspalte müssten alle Datensätze in der Datenbank von einer Anwendung gelesen und überprüft sowie die relevanten verarbeitet und der Rest verworfen werden. Durch die Möglichkeit zum gezielten und präzisen Abrufen von Datensätzen wird der Verarbeitungsaufwand, er beim Lesen aller Datensätze entstehen würde, erheblich verringert.
Das Beispielprogramm veranschaulicht ein Verfahren zum Archivieren einer Nachricht, bzw. eines Teils davon, in einer Datenbank. Dieses Verarbeitungsverfahren wird normalerweise als Teil eines komplexeren Nachrichtenflusses integriert, wenn die Archivierung von Daten erforderlich ist.
In diesem Beispielprogramm ist die Verarbeitung auf zwei Nachrichtenflüsse aufgeteilt. Folgende Nachrichtenflüsse werden verwendet:
Die Nachrichtenflüsse und die von ihnen ausgeführte Verarbeitung werden nachfolgend näher erläutert.
Der Nachrichtenfluss 'WarehouseData' führt die folgenden Verarbeitungsschritte aus.
Der Nachrichtenfluss 'WarehouseData' besteht aus den folgenden Knoten:
Der MQEmpfangsknoten 'DATAWAREHOUSE_IN_Q' liest die XML-Nachricht. Da die eingehende Nachricht in einem selbstdefinierenden XML-Format ist, ist es nicht erforderlich, eine Nachrichtengruppe oder ein Nachrichtenformat anzugeben, damit sie erfolgreich syntaktisch analysiert werden kann.
Der Rechenknoten 'Warehouse_Input_Message' konvertiert die gesamten Nutzdaten der Nachricht (ROOT.XML) mit Hilfe der Funktion 'ASBITSTREAM' in ein BLOB, fügt die Nachricht in einer Datenbank ein und formatiert schließlich die Bestätigungsnachricht.
Der MQSendeknoten 'DATAWAREHOUSE_OUT_Q' schreibt die Ausgabenachricht als eine WebSphere MQ-Nachricht.
Wenn während der Datenbankverarbeitung ein Fehler auftritt, wird vom Rechenknoten 'Create_Error_Message' eine Nachricht erstellt und formatiert und vom MQSendeknoten 'DATAWAREHOUSE_FAILURE_Q' als WebSphere MQ-Nachricht geschrieben.
Der Nachrichtenfluss 'VerifyDatabaseContents' führt die folgenden Verarbeitungsschritte aus:
Der Nachrichtenfluss 'VerifyDatabaseContents' besteht aus folgenden Knoten:
Der MQEmpfangsknoten 'DATAWAREHOUSE_VERIFY_CONTENTS_IN_Q' liest die XML-Nachricht. Da die eingehende Nachricht ein selbstdefinierendes XML-Format hat, ist es nicht erforderlich, eine Nachrichtengruppe oder ein Nachrichtenformat für die Nachricht anzugeben, die oder das erfolgreich syntaktisch analysiert werden muss.
Der Rechenknoten 'Verify_Contents' führt folgende Aktionen aus:
Der MQSendeknoten 'DATAWAREHOUSE_VERIFY_CONTENTS_OUT_Q' schreibt die WebSphere MQ-Ausgabenachricht.
Wenn während der Datenbankverarbeitung ein Fehler auftritt, wird vom Rechenknoten 'Create_Error_Message' eine Nachricht erstellt und formatiert und vom MQSendeknoten 'DATAWAREHOUSE_FAILURE_Q' als WebSphere MQ-Nachricht geschrieben.
In diesem Beispielprogramm werden zwei Nachrichten verwendet. Die erste Nachricht wird archiviert, während die zweite die Datumsangaben und Uhrzeiten angibt, die vom Nachrichtenfluss 'VerifyDatabaseContent' verwendet werden sollen. Beispiele für beide Nachrichten werden unten angezeigt.
<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>