Coordinated Request Reply JMS サンプルについて

Coordinated Request Reply JMS サンプルには Coordinated Request Reply JMS アプリケーションが含まれています。 このアプリケーションには、Coordinated Request Reply ライブラリーへのライブラリー参照が含まれています。

Coordinated Request Reply JMS サンプルでは、JMSReceive ノードの使用方法を示します。 以下のセクションでは、メッセージ・フローと、メッセージ・フローが実行する処理を示します。

Request メッセージ・フロー

Request メッセージ・フローでは、以下の処理を実行します。

  1. XML ペイロードが入った JMS メッセージを読み取る
  2. 元の ReplyToQ の詳細を別の JMS メッセージに保管し、後で Reply メッセージ・フローが 取り出せるようにする
  3. メッセージを等価の CWF 形式に変換する
  4. 変換されたメッセージの入った JMS メッセージを作成する
  5. ReplyToQ の詳細を Reply メッセージ・フローの入力に設定する
  6. Backend Reply メッセージ・フローにメッセージを送信する

Request メッセージ・フローには、以下のノードが含まれています。

Request メッセージ・フローには 1 つの JMSInput ノード、2 つのサブフロー・ノード、1 つの Compute ノード、および 1 つの JMSOutput ノードが含まれています。

GetRequestMsg JMSInput ノードは XML メッセージを読み取ります。 着信メッセージは自己定義型 XML 形式であるため、メッセージが正常に解析されるようにメッセージ・セットやメッセージ・フォーマットを指定する必要はありません。

StoreOriginalJMSHeader_Sub サブフローは、JMS メッセージへの ReplyToQ 値と相関 ID 値の保管をカプセル化します。 メッセージ ID が相関 ID の中にコピーされます。 カプセル化する理由は 2 つあります。 まず、処理ロジックを他のメッセージ・フローで簡単に再利用できるようにするためです。 さらに、代替インプリメンテーションに置き換えることができるようにするためです。 例えば、データベース・ノードを使用する代替インプリメンテーションを作成できます。

TransformXMLtoMRM_Sub サブフローは、入力メッセージから出力メッセージ・ツリーにメッセージ・ヘッダーをコピーして、出力メッセージのメッセージ・セット、タイプ、および形式を設定することにより入力メッセージを XML 形式から CWF に変換します。

SetReplyTo_CorrelID Compute ノードは、以下のアクションを実行します。

  1. 入力メッセージから出力メッセージ・ツリーにメッセージ・ヘッダーをコピーします。
  2. 入力メッセージから出力メッセージ・ツリーにメッセージ本体をコピーします。
  3. 相関 ID をメッセージ ID として設定します。
  4. 新しいメッセージの ReplyToQ が、Reply メッセージ・フローの入力キューのものになるように設定します。

OutputRequestMsg JMSOutput ノードは、JMS 出力メッセージを書き出します。

Backend Reply メッセージ・フロー

Backend Reply メッセージ・フローでは、以下の処理を実行します。

  1. JMS メッセージを読み取ります。
  2. メッセージが変更された時刻を、メッセージのペイロードに追加します。
  3. JMS メッセージを書き出します。

Backend Reply メッセージ・フローには、以下のノードが含まれています。

Backend Reply メッセージ・フローには 1 つの JMSInput ノード、Compute ノード、および JMSReply ノードが含まれています。

GetRequestMsg JMSInput ノードは CWF メッセージを読み取ります。 着信メッセージを解析するために必要なメッセージ・セット、フォーマット、およびドメインは、JMSInput ノードで指定されます。

Modify_CompletionTime Compute ノードは、以下のアクションを実行します。

  1. 入力メッセージ全体を出力メッセージ・ツリーにコピーします。
  2. WebSphere Message Broker から現在時刻を入手して、再フォーマットします。
  3. 出力メッセージ・ツリーに再フォーマットの時間を追加します。

PutReplyMsg JMSReply ノードは、JMS 出力メッセージを書き出します。

Reply メッセージ・フロー

Reply メッセージ・フローでは、以下の処理を実行します。

  1. CWF 形式のメッセージが入った JMS メッセージを読み取ります。
  2. メッセージを等価の XML 形式に変換します。
  3. 元の要求メッセージの ReplyToQ の詳細を入手します。 それを行うために、この情報を Request メッセージ・フローに保管するのに使われた JMS メッセージを読み取ります。 このアクションは JMSReceive ノードによって実行されます。
  4. 変換されたメッセージと、取り出された ReplyToQ 値とが入った JMS メッセージを作成します。

Reply メッセージ・フローは、以下のノードから構成されています。

Reply メッセージ・フローには 1 つの JMSInput ノード、2 つのサブフロー・ノード、および 1 つの JMSReply ノードが含まれています。

GetBackendReply JMSInput ノードは CWF メッセージを読み取ります。 着信メッセージを解析するために必要なメッセージ・セット、フォーマット、およびドメインは、JMSInput ノードで指定されます。

TransformMRMtoXML_Sub サブフローは、入力メッセージから出力メッセージ・ツリーにメッセージ・ヘッダーをコピーして、入力メッセージを CWF 形式から XML に変換します。

RestoreOriginalJMSHeader_sub フローには JMSReceive ノードが含まれています。

RestoreOriginalJMSHeader_Sub サブフローは、ReplyToQ 値と 相関 ID 値の取り出しをカプセル化します。 このサブフローは、JMSReceive ノードを使用して、元の要求メッセージで指定された ReplyToQ と相関 ID の値が入った JMS メッセージを読み取り、これらの値を応答メッセージにコピーします。フロー内で JMSReceive ノードの前に Compute ノードがあります。 Compute ノード内で、JMSReceive ノードの相関 ID プロパティーは、環境変数で応答メッセージの相関 ID によってオーバーライドされます。 JMSReceive ノードは、従来のアプリケーションから適切なリクエスター・アプリケーションに応答メッセージを送信するために、その相関 ID によって対応するメッセージを選択し、処理されるメッセージの JMSHeader に元の要求 JMSHeader をコピーするように構成されています。 また、JMSReceive ノードは、ReplyToQ の元の値を保管するために使用された JMS メッセージのペイロードの取り出しも行います。

JMSReceive ノードの詳細については、WebSphere Message Broker の資料にある『JMSReceive ノード』を参照してください。

PutOriginalReply JMSReply ノードは、JMS 出力メッセージを書き出します。

テスト・メッセージ

Coordinated Request Reply サンプルで使用されるテスト・メッセージは、顧客の送り状明細が入った単純な XML メッセージです。 このサンプルは XML メッセージを CWF 形式に変換します。 サンプルによって変更される値は、CompletionTime フィールド値だけです。 以下の例は、メッセージを示しています。

<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>

サンプルのホームに戻る