Data Warehouse サンプルは、メッセージ・フローを使用して売上データなどのデータをデータベースにアーカイブするシナリオを例示する、メッセージ・フロー・サンプル・アプリケーションです。データは、後で別のメッセージ・フローまたはアプリケーションがこれを分析できるよう、保管されます。
売上データは後日分析されるので、メッセージの保管は、指定された時間のレコードを容易に選択できるような方法でまとめられます。売上レコードの入った WebSphere MQ メッセージが書き込まれた日時は、そのメッセージがデータベースに挿入される時点で、独立した列値として保管されます。データベース表には以下の 4 つの列が含まれています。
この方法でデータを保管すると、特定の期間のレコードを取り出せます。例えば午前 9:00 から午後 12:00 までの間、および午後 12:01 から午後 5:00 の間を指定して、午前と午後の売上を比較できます。
付加的な日時列を使わないとすれば、アプリケーションはデータベースからレコードを全部読み取って全部調べ、関係のあるレコードだけを処理して、残りは廃棄しなければならなくなってしまうでしょう。レコードを全部読まなければならないとすれば大量の処理を無駄にすることになりますが、制御された綿密な方法でレコードを取り出すことができるなら、その無駄を省ける可能性があります。
このサンプルは、メッセージまたはその一部をデータベースにアーカイブする手法の一例を示します。これは、通常なら、データをアーカイブする必要があるときに、より複雑なメッセージ・フローの一部として組み込まれる種類の処理です。
サンプルの処理は、2 つのメッセージ・フローで構成されています。メッセージ・フローは、以下のとおりです。
メッセージ・フローの詳細と、メッセージ・フローが実行する処理を以下に示します。
WarehouseData メッセージ・フローは、以下の処理を実行します。
WarehouseData メッセージ・フローは、以下のノードから構成されています。
MQInput ノード DATAWAREHOUSE_IN_Q は XML メッセージを読み取ります。着信メッセージは自己定義型 XML 形式なので、メッセージが正常に解析されるようにメッセージ・セットやメッセージ・フォーマットを指定する必要はありません。
Compute ノード Warehouse_Input_Message は、ASBITSTREAM 関数を使用してメッセージ・ペイロード (ROOT.XML) 全体を BLOB に変換し、メッセージをデータベースに挿入し、最後に確認メッセージをフォーマット設定します。
MQOutput ノード DATAWAREHOUSE_OUT_Q は、出力メッセージを WebSphere MQ メッセージとして書き込みます。
データベースの処理中にエラーが起きた場合、メッセージが Compute ノード Create_Error_Message でフォーマット設定されて、MQOutput ノード DATAWAREHOUSE_FAILURE_Q でWebSphere MQ メッセージとして書き出されます。
VerifyDatabaseContents メッセージ・フローは、以下の処理を実行します。
VerifyDatabaseContents メッセージ・フローは、以下のノードから構成されています。
MQInput ノード DATAWAREHOUSE_VERIFY_CONTENTS_IN_Q は XML メッセージを読み取ります。着信メッセージは自己定義型 XML 形式なので、メッセージが正常に解析されるようにメッセージ・セットやメッセージ・フォーマットを指定する必要はありません。
Compute ノード Verify_Contents の実行するアクションは、次のとおりです。
MQOutput ノード DATAWAREHOUSE_VERIFY_CONTENTS_OUT_Q は、WebSphere MQ 出力メッセージを書き出します。
データベースの処理中にエラーが起きた場合、メッセージが Compute ノード Create_Error_Message でフォーマット設定されて、MQOutput ノード DATAWAREHOUSE_FAILURE_Q でWebSphere MQ メッセージとして書き出されます。
このサンプルでは、2 つのメッセージが使用されます。1 つ目はアーカイブされるメッセージで、2 つ目は Verify Database Content メッセージ・フローが使用される日時を指定するメッセージです。以下に両方のメッセージの例を示します。
<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>