Der Mustercode 'Data Warehouse' ist eine Musteranwendung 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, wird 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. Auf diese Weise kann 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 Datensätze verarbeitet und der Rest verworfen werden. Durch die Möglichkeit zum gezielten und präzisen Abrufen von Datensätzen wird der Verarbeitungsaufwand, der beim Lesen aller Datensätze entsteht, erheblich verringert.
Der Mustercode 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 Mustercode ist die Verarbeitung auf zwei Nachrichtenflüsse aufgeteilt:
Die Nachrichtenflüsse und die von ihnen ausgeführte Verarbeitung werden in den folgenden Abschnitten näher erläutert:
Der Nachrichtenfluss 'WarehouseData' führt die folgenden Verarbeitungsschritte aus:
Der Nachrichtenfluss 'WarehouseData' besteht aus den folgenden Knoten:
Der MQInput-Knoten 'Data_Warehouse_In_Q MQInput' liest die XML-Nachricht. Da die eingehende Nachricht ein selbstdefinierendes XML-Format aufweist, muss für die Nachricht kein Nachrichtensatz und kein Nachrichtenformat angegeben werden, mit deren Hilfe sie erfolgreich syntaktisch analysiert werden kann.
Der Rechenknoten 'Warehouse_Input_Message' konvertiert die gesamten Nutzdaten der Nachricht (ROOT.XMLNSC) mithilfe der Funktion 'ASBITSTREAM' in ein BLOB, fügt die Nachricht in einer Datenbank ein und formatiert schließlich die Bestätigungsnachricht.
Der MQOutput-Knoten 'Data_Warehouse_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 MQOutput-Knoten 'Data_Warehouse_Failure_Q' als WebSphere MQ-Nachricht geschrieben.
Der Nachrichtenfluss 'VerifyDatabaseContents' führt die folgenden Verarbeitungsschritte aus:
Der Nachrichtenfluss 'VerifyDatabaseContents' besteht aus folgenden Knoten:
Der MQInput-Knoten 'Data_Warehouse_Verify_Contents_In_Q' liest die XML-Nachricht. Da die eingehende Nachricht ein selbstdefinierendes XML-Format aufweist, muss für die Nachricht kein Nachrichtensatz und kein Nachrichtenformat angegeben werden, mit deren Hilfe sie erfolgreich syntaktisch analysiert werden kann.
Der Rechenknoten 'Verify_Contents' führt folgende Aktionen aus:
Der MQOutput-Knoten 'Data_Warehouse_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 MQOutput-Knoten 'Data_Warehouse_Failure_Q' als WebSphere MQ-Nachricht geschrieben.
In diesem Mustercode werden zwei Nachrichten verwendet:
In den folgenden Beispielen werden die beiden Nachrichtentypen veranschaulicht.
<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>