L'esempio di Data Warehouse è un'applicazione di esempio flusso di messaggi che mostra uno scenario in cui un flusso di messaggi viene utilizzato per eseguire l'archiviazione di dati, quali ad esempio dati sulle vendite, in un database. I dati vengono memorizzati per una successiva analisi da parte di un altro flusso di messaggi o di un'altra applicazione.
Poiché i dati sulle vendite verranno analizzati in una data successiva, la memorizzazione dei messaggi è stata organizzata in modo che sia semplice selezionare record per periodi specificati. La data e l'ora in cui è stato scritto il messaggio WebSphere MQ contenente il record sulle vendite vengono memorizzate come valori di colonna separati quando il messaggio viene inserito nel database. La tabella database contiene quattro colonne:
Memorizzando i dati in questo modo è possibile richiamare record compresi entro specifici periodi di tempo, diciamo tra le 9:00 e le 12:00 oppure tra le 12:01 e le 17:00, il che consentirebbe un confronto tra le vendite della mattina e quelle del pomeriggio.
Senza l'utilizzo delle colonne supplementari relative a data e ora, un'applicazione dovrebbe leggere tutti i record dal database, esaminarli tutti, elaborare quelli che rivestono particolare interesse ed eliminare gli altri. La capacità di recuperare record in maniera controllata e precisa evita potenziali sprechi di una grande quantità di elaborazione che sarebbe necessaria in caso di lettura di tutti i record.
L'esempio illustra una tecnica di archiviazione di un messaggio o di parte di esso, in un database. Si tratta del tipo di elaborazione che di solito sarebbe inclusa come parte di un flusso di messaggi più complesso in caso di necessità di archiviare dati.
L'elaborazione nell'esempio consiste di due flussi di messaggi. I flussi di messaggi sono:
I dettagli dei flussi di messaggi e l'elaborazione da essi eseguita sono descritti nella sezione sottostante.
Il flusso di messaggi WarehouseData attua la seguente elaborazione.
Il flusso di messaggi WarehouseData è composto dai seguenti nodi:
Il nodo MQInput denominato DATAWAREHOUSE_IN_Q legge il messaggio XML. Poiché il messaggio in entrata è in formato XML a definizione automatica, non è necessario specificare una serie di messaggi o un formato per poter analizzare correttamente questo messaggio.
Il nodo Compute denominato Warehouse_Input_Message converte l'intero payload del messaggio (ROOT.XML) in un BLOB utilizzando la funzione ASBITSTREAM, inserisce il messaggio in un database ed infine formatta il messaggio di conferma.
Il nodo MQOutput denominato DATAWAREHOUSE_OUT_Q scrive il messaggio di output come messaggio WebSphere MQ.
Se si dovesse presentare un errore durante l'elaborazione del database, verrà formattato un messaggio nel nodo Compute denominato Create_Error_Message e verrà scritto nel nodo MQOutput denominato DATAWAREHOUSE_FAILURE_Q come messaggio WebSphere MQ.
Il flusso di messaggi VerifyDatabaseContents attua la seguente elaborazione:
Il flusso di messaggi VerifyDatabaseContents è composto dai seguenti nodi:
Il nodo MQInput denominato DATAWAREHOUSE_VERIFY_CONTENTS_IN_Q legge il messaggio XML. Poiché il messaggio in entrata è in formato XML a definizione automatica, non è necessario specificare una serie di messaggi o un formato per poter analizzare correttamente questo messaggio.
Il nodo Compute denominato Verify_Contents esegue queste azioni:
Il nodo MQOutput denominato DATAWAREHOUSE_VERIFY_CONTENTS_OUT_Q scrive il messaggio di output WebSphere MQ.
Se si dovesse presentare un errore durante l'elaborazione del database, verrà formattato un messaggio nel nodo Compute denominato Create_Error_Message e verrà scritto nel nodo MQOutput denominato DATAWAREHOUSE_FAILURE_Q come messaggio WebSphere MQ.
In questo esempio vengono utilizzati due messaggi. Il primo è un messaggio che verrà archiviato ed il secondo è un messaggio per specificare la data e gli orari che il flusso di messaggi Verify Database Content dovrà utilizzare. Esempi di entrambi i messaggi vengono riportati di seguito.
<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>Giochi</Category>
<Price>00,30</Price>
<Quantity>01</Quantity>
</Item>
<Item>
<Code>02</Code>
<Code>03</Code>
<Code>01</Code>
<Description>Il quotidiano The Times</Description>
<Category>Libri e Media</Category>
<Price>00,20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>00,50</Balance>
<Currency>Sterlina</Currency>
</Invoice>
<Invoice>
<Initial>T</Initial>
<Initial>J</Initial>
<Surname>Dunnwin</Surname>
<Item>
<Code>04</Code>
<Code>05</Code>
<Code>01</Code>
<Description>L'origine delle specie</Description>
<Category>Libri e Media</Category>
<Price>22,34</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscopio</Description>
<Category>Varie</Category>
<Price>36,20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>81,84</Balance>
<Currency>Euro</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>
<Archive_Query>
<Start_Time>
<Day>gg/mm/aaaa</Day>
<Time>hh:mm:ss</Time>
</Start_Time>
<End_Time>
<Day>gg/mm/aaaa</Day>
<Time>hh:mm:ss</Time>
</End_Time>
</Archive_Query>