Informationen zum Mustercode 'Coordinated Request Reply Global Cache'

Der Mustercode 'Coordinated Request Reply Global Cache' enthält die Anwendung 'Coordinated Request Global Cache' sowie die Anwendung 'Coordinated Request Reply Backend'. Beide Anwendungen enthalten eine Bibliotheksreferenz auf die Bibliothek 'Coordinated Request Reply'.

Der Mustercode 'Coordinated Request Reply Global Cache' veranschaulicht die Verwendung eines globalen Caches zum Speichern von Informationen, damit diese von zwei Nachrichtenflüssen (einem Anforderungsnachrichtenfluss (Request) und einem Antwortnachrichtenfluss (Reply)) verwendet werden können, die in der Anwendung 'Coordinated Request Reply Global Cache' ausgeführt werden. In diesem Mustercode simuliert ein 'BackendReplyApp'-Nachrichtenfluss, der in der Anwendung 'Coordinated Request Reply Backend' ausgeführt wird, eine etablierte Anwendung. Im folgenden Abschnitt werden die Nachrichtenflüsse sowie die von ihnen vorgenommenen Verarbeitungsschritte näher erläutert.

Anforderungsnachrichtenfluss (Request)

Der Anforderungsnachrichtenfluss führt Folgendes aus:

  1. Er liest eine WebSphere MQ-Nachricht, die XML-Nutzdaten enthält.
  2. Der Verarbeitungsablauf wird vom FlowOrder-Knoten gesteuert.
  3. Folgende Schritte werden vom Nachrichtenfluss zuerst ausgeführt:

    Anschließend führt der Nachrichtenfluss den folgenden Schritt aus:

Der Anforderungsnachrichtenfluss (Request) enthält die folgenden Knoten:

Der Anforderungsnachrichtenfluss enthält einen MQInput-Knoten, einen FlowOrder-Knoten, einen JavaCompute-Knoten, einen untergeordneten Nachrichtenflussknoten, einen Rechenknoten sowie einen MQOutput-Knoten.

Der MQInput-Knoten 'GetRequestMsg' liest die XML-Nachricht. Da die eingehende Nachricht ein selbstdefinierendes XML-Format hat, muss keine Nachrichtengruppe und auch kein Format angegeben werden, um sie erfolgreich analysieren zu können.

Der FlowOrder-Knoten 'UpdateCacheAtFlowEnd' steuert den Verarbeitungsablauf.

Zuerst kopiert der untergeordnete Nachrichtenfluss 'TransformXMLtoMRM_Sub' die Nachrichtenheader aus der Eingabe- in die Ausgabenachrichtenstruktur; anschließend wandelt er die Eingabenachricht vom XML-Format in das CWF-Format um, indem er für die Ausgabenachricht die Nachrichtengruppe, den Typ und das Format setzt.

Der Rechenknoten 'SetReplyTo' führt Folgendes aus:

  1. Er kopiert die Nachrichtenheader von der Eingabenachricht in die Baumstruktur der Ausgabenachricht.
  2. Er kopiert den Nachrichtenhauptteil von der Eingabenachricht in die Baumstruktur der Ausgabenachricht.
  3. Er legt die ReplyToQ für die neue Nachricht als jene der Eingabewarteschlange für den Antwortnachrichtenfluss fest.

Der MQReply-Knoten 'OutputRequestMsg' schreibt die WebSphere MQ-Ausgabenachricht.

In einem nächsten Schritt speichert der JavaCompute-Knoten 'StoreOriginalMQMD' den MQMD im globalen Cache, wobei 'ReplyToQ' und 'ReplyToQMgr' für eine spätere Verwendung durch den Antwortnachrichtenfluss (Reply) beibehalten werden. Die Nachrichtenkennung (MsgId) wird als Schlüssel verwendet, mit dem die Daten im globalen Cache gespeichert werden, um sie später wieder abrufen zu können. Die Daten werden erst im Cache gespeichert, nachdem der Hauptnachrichtenfluss die Verarbeitung erfolgreich abgeschlossen hat.

Nachrichtenfluss 'Backend Reply'

Der Nachrichtenfluss 'Backend Reply' führt Folgendes aus:

  1. Er liest eine WebSphere MQ-Nachricht.
  2. Er fügt die Änderungszeit der Nachricht zu den Nutzdaten der Nachricht hinzu.
  3. Schreibt eine WebSphere MQ-Nachricht.

Der Nachrichtenfluss 'Backend Reply' enthält die folgenden Knoten:

Der Nachrichtenfluss 'Backend Reply' enthält einen MQInput-Knoten, einen Rechenknoten und einen MQReply-Knoten.

Der MQInput-Knoten 'GetRequestMsg' liest die CWF-Nachricht. Der Nachrichtensatz, das Format und die Domäne, die zur syntaktischen Analyse der eingehenden Nachricht benötigt werden, sind im MQInput-Knoten angegeben.

Der Rechenknoten 'Modify_CompletionTime' führt Folgendes aus:

  1. Er kopiert die vollständige Eingabenachricht in die Baumstruktur der Ausgabenachricht.
  2. Er ruft die aktuelle Zeit aus WebSphere Message Broker ab und formatiert sie neu.
  3. Er fügt die neu formatierte Zeit der Baumstruktur der Ausgabenachricht hinzu.

Der MQReply-Knoten 'PutReplyMsg' schreibt die WebSphere MQ-Ausgabenachricht, indem er die MsgID aus der Anforderungsnachricht in das Feld 'CorrelId' der Antwort kopiert.

Antwortnachrichtenfluss (Request)

Der Antwortnachrichtenfluss führt Folgendes aus:

  1. Er liest eine WebSphere MQ-Nachricht, die eine Nachricht im CWF-Format enthält.
  2. Er wandelt die Nachricht in das entsprechende XML-Format um.
  3. Ein JavaCompute-Knoten erhält die Werte von 'ReplyToQ' und 'ReplyToQMgr' der ursprünglichen Anforderungsnachricht, indem er den MQMD des Anforderungsnachrichtenflusses aus dem globalen Cache abruft.
  4. Er erstellt eine WebSphere MQ-Nachricht, die die umgewandelte Nachricht und die abgerufenen Werte für 'ReplyToQ' und 'ReplyToQMgr' enthält.
  5. Er entfernt die MQMD-Daten aus dem globalen Cache.

Der Antwortnachrichtenfluss (Reply) enthält die folgenden Knoten:

Der Antwortnachrichtenfluss (Reply) enthält einen MQInput-Knoten, einen untergeordneten Knoten, zwei JavaCompute- und einen MQReply-Knoten.

Der MQInput-Knoten 'GetBackendReply' liest die CWF-Nachricht. Der Nachrichtensatz, das Format und die Domäne, die zur syntaktischen Analyse der eingehenden Nachricht benötigt werden, sind im MQInput-Knoten angegeben.

Der untergeordnete Nachrichtenfluss 'TransformMRMtoXML_Sub' kopiert die Nachrichtenheader von der Eingabenachricht in die Baumstruktur der Ausgabenachricht und konvertiert die Eingabenachricht vom CWF-Format in XML.

Der JavaCompute-Knoten 'RestoreOriginalMQMD' ruft aus dem globalen Cache den ursprünglichen MQMD der Anforderungsnachricht ab, der die Werte für 'ReplyToQ' und 'ReplyToQMgr' enthält. Dabei verwendet der Knoten die 'CorrelId' (die die MsgID der ursprünglichen Anforderungsnachricht enthält) als Schlüssel. Der in der Nachricht enthaltene MQMD wird durch den MQMD der ursprünglichen Anforderung ersetzt.

Der MQReply-Knoten 'PutOriginalReply' schreibt die WebSphere MQ-Ausgabenachricht.

'RemoveMQMDFromCache' entfernt die MQMD-Daten aus dem globalen Cache. Der Cache wird erst gelöscht, nachdem der Nachrichtenfluss die Verarbeitung erfolgreich abgeschlossen hat.

Testnachricht

Bei der im Mustercode 'Coordinated Request Reply with Global Cache' verwendeten Testnachricht handelt es sich um eine einfache XML-Nachricht, die Rechnungsdetails für einen Kunden enthält. Dieser Mustercode konvertiert die XML-Nachricht in das CWF-Format. Der Feldwert für CompletionTime (Beendigungszeit) ist der einzige Wert, der vom Mustercode geändert wird. Im folgenden Beispiel ist die Nachricht 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>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>20</Price>
<Quantity>01</Quantity>
</Item>
<Balance>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</Price>
<Quantity>02</Quantity>
</Item>
<Item>
<Code>06</Code>
<Code>07</Code>
<Code>01</Code>
<Description>Microscope</Description>
<Category>Miscellaneous</Category>
<Price>36</Price>
<Quantity>01</Quantity>
</Item>
<Balance>80</Balance>
<Currency>Euros</Currency>
</Invoice>
</SaleList>
<Trailer>
<CompletionTime>12.00.00</CompletionTime>
</Trailer>
</SaleEnvelope>

Zurück zum Beginn des Mustercodes