Das Beispielprogramm 'Coordinated Request Reply' ist eine Beispielanwendung eines Nachrichtenflusses, die durch die Verwendung von WebSphere MQ-Nachrichten in einem Request/Reply-Verarbeitungsmuster auf dem Szenario einer modernen und etablierten Anwendungskommunikation basiert. Die moderne Anwendung verwendet selbstdefinierende XML-Nachrichten und gibt eine Anforderungsnachricht aus. Die etablierte Anwendung verwendet Nachrichten im CW-Format. Sie empfängt eine Anforderungsnachricht, verarbeitet diese und liefert eine Antwortnachricht. Damit die Anwendungen erfolgreich kommunizieren können, müssen die Nachrichtenformate sowohl für die Anforderungs- als auch für die Antwortnachrichten umgewandelt werden.
Das Beispielprogramm zeigt, wie die Umwandlung von selbstdefinierenden XML-Nachrichten in selbstdefinierende CWF-Nachrichten und umgekehrt durchgeführt werden kann. Außerdem wird gezeigt, wie Informationen in einem Nachrichtenfluss gespeichert und von einem anderen abgerufen werden können. In dem Beispielprogramm ist es nötig, ReplyToQ und ReplyToQMgr von der ersten Anforderungsnachricht für die Verwendung zu bewahren, wenn die entsprechende Anforderungsnachricht empfangen wird. Im Szenario wird eine WebSphere MQ-Nachricht verwendet, um die Details zu speichern.
Die Verarbeitung im Beispielprogramm besteht aus drei Nachrichtenflüssen und einer Nachrichtengruppe. Die Nachrichtenflüsse lauten:
Dieser liest eine Anforderungsnachricht von einer Anwendung, die in der Lage ist, die Testnachricht für dieses Beispielprogramm zu schreiben, wandelt die Nutzdaten von XML in CWF um und schreibt eine Ausgabenachricht, die Nutzdaten im CW-Format enthält. Diese Nachricht wird vom Back-End-Antwortnachrichtenfluss, der eine etablierte Anwendung simuliert, gelesen und verarbeitet.
Dieser simuliert eine etablierte Anwendung, die eine WebSphere-Nachricht empfängt, die Nutzdaten im CW-Format enthalten, führt mehrere Verarbeitungen des Inhalts durch und schreibt eine WebSphere MQ-Antwortnachricht, die Nutzdaten im CW-Format enthalten.
Er liest die Antwortnachricht des Back-End-Antwortnachrichtenflusses, wandelt die Nutzdaten von CWF in XML um und schreibt eine Ausgabenachricht, die Nutzdaten im XML-Format enthält. Diese Nachricht wird von der ursprünglichen Anwendung gelesen und verarbeitet.
Das Beispielprogramm 'Message Set' MSET mit der Nachrichtendefinition 'SaleListMessage' wird bei der Konvertierung der Nachricht vom XML- in das CW-Format im Anforderungsabschnitt der Verarbeitung verwendet. Bei der Konvertierung der Nachricht vom CW- in das XML-Format wird es im Antwortabschnitt der Verarbeitung verwendet.
Details zu den Nachrichtenflüssen und der Verarbeitung, die durch sie ausgeführt wird, werden unten aufgeführt.
Der Anforderungsnachrichtenfluss führt folgende Verarbeitung aus:
Der Anforderungsnachrichtenfluss besteht aus den folgenden Knoten:
Der MQEmpfangsknoten 'GetRequestMsg' 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 untergeordnete Nachrichtenfluss 'StoreOriginalMQMD_Sub' bindet das Speichern der ReplyToQ- und ReplyToQMgr-Werte in eine WebSphere MQ-Nachricht ein. Dies geschieht aus zweierlei Gründen: Erstens, damit die Verarbeitungslogik leicht in anderen Nachrichtenflüssen wiederverwendet werden kann und zweitens, damit alternative Implementierungen eingesetzt werden können. Es könnte beispielsweise eine alternative Implementierung erstellt werden, die einen Datenbankknoten verwendet.
Der Rechenknoten 'TransformAndSetReplyTo' führt folgende Aktionen aus:
Der MQSendeknoten 'OutputRequestMsg' schreibt die WebSphere MQ-Ausgabenachricht.
Der Back-End-Antwortnachrichtenfluss führt folgende Verarbeitung aus:
Der Back-End-Antwortnachrichtenfluss besteht aus den folgenden Knoten:
Der MQEmpfangsknoten 'GetRequestMsg' liest die CWF-Nachricht. Die Nachrichtengruppe, das Format, und die Domäne, die zur syntaktischen Analyse der eingehenden Nachricht benötigt werden, werden auf dem MQEmpfangsknoten angegeben.
Der Rechenknoten 'Backend_Computation' führt folgende Aktionen aus:
Der MQSendeknoten 'PutReplyMsg' schreibt die WebSphere MQ-Ausgabenachricht.
Der Antwortnachrichtenfluss führt folgende Verarbeitung aus:
Der Antwortnachrichtenfluss besteht aus den folgenden Knoten:
Der MQEmpfangsknoten 'GetBackendReply' liest die CWF-Nachricht. Die Nachrichtengruppe, das Format, und die Domäne, die zur syntaktischen Analyse der eingehenden Nachricht benötigt werden, werden auf dem MQEmpfangsknoten angegeben.
Der Rechenknoten 'MapToRequestor' führt folgende Aktionen aus:
Der untergeordneter Nachrichtenfluss 'RestoreOriginalMQMD_Sub' bindet die Abfrage der ReplyToQ- und ReplyToQMgr-Werte ein. Er liest die WebSphere MQ-Nachricht, die die ReplyToQ- und ReplyToQMgr-Werte enthält, die in der ursprünglichen Anforderungsnachricht angegeben wurden, und kopiert diese in die Antwortnachricht. Der Lesevorgang geschieht mit Hilfe des MQAbrufknotens. Der MQAbrufknoten ist konfiguriert, um die entsprechende Nachricht über die CorrelId auszuwählen und um die ursprüngliche Anforderungs-MQMD in die MQMD der Nachricht zu kopieren, die verarbeitet wird. Dies dient der Übertragung der Antwortnachricht von der etablierten Anwendung auf die korrekte Anforderungsanwendung. Der MQAbrufknoten ruft außerdem die Nutzdaten der WebSphere MQ-Nachricht ab, die zum Speichern der ursprünglichen Werte von ReplyToQ und ReplyToQMgr verwendet wurde.
Der MQSendeknoten 'PutOriginalReply' schreibt die WebSphere MQ-Ausgabenachricht.
Bei der Testnachricht, die im Beispielprogramm 'Coordinated Request Reply' verwendet wird, handelt es sich um eine einfache XML-Nachricht, die Rechnungsdetails für einen Kunden enthält. Während der Ausführung des Beispielprogramms wird diese XML-Nachricht in das CW-Format umgewandelt. Der Feldwert für CompletionTime ist der einzige Wert, der sich während der Ausführung des Beispielprogramms ändert. Die Nachricht ist unten dargestellt.
<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>