この Web サービス・シナリオでは、ブローカーが既存の非 Web サービス・アプリケーションに Web サービス・インターフェースを提供します。
記号を理解する手掛かり:
これはときどき、Web サービス・ファサードと呼ばれます。Web サービス・インターフェースの設計は、通常いくらかの再グループ化や既存のインターフェースの制限または強化が含まれ、既存の WSDL 定義には制約されません。
ブローカーは既存のアプリケーションに Web サービス・インターフェースを提供し、行われた要求の監査などの他の混合機能をオプションで提供します。
時間の経過と共に、Web サービス・クライアントに提示されるインターフェースには影響を与えないで、インプリメンテーションを変更することができます。
メッセージ・フローは Web サービス要求を受け取り、それを既存のアプリケーションが予期する形式に変換して、既存のアプリケーションを呼び出します。既存のアプリケーションからの応答は、有効な Web サービス応答に変換されます。
既存の CICS アプリケーションには、COBOL コピーブック・インターフェースがあります。
入力または出力用に現在 WebSphere MQ を使用している ほとんどのメッセージ・フローは、置換または追加のプロトコルとして HTTP を使用するのに適しています。
MRM ドメインにある入力メッセージをモデル化し、モデルから WSDL を生成することができます。 または汎用 XML または XMLNS ドメイン・メッセージを処理することができます。 MRM ドメインにあるメッセージを定義した場合、 HTTPInput ノードを構成して入力メッセージを妥当性検査することができます。 メッセージがモデルに準拠しない場合、ノードは例外を生成します。
HTTPReply ノードを構成して、クライアントに送信する応答メッセージ用の デフォルトの HTTP ヘッダーのセットを生成することができます。 これは、メッセージ・フローを WebSphere MQ メッセージを処理するものから HTTP を処理するフローに変換するために行わなければならない変更を削減します。
最初のメッセージ・フローは、HTTPInput ノードの Web サービス・クライアントから、インバウンド要求を受け取ります。 それには、ある方法で要求を変換するための Compute ノード、および変更された要求を WebSphere MQ アプリケーションに送る MQOutput ノードが含まれています。
2番目のメッセージ・フローは、MQInput ノード内のそのアプリケーションから応答を受け取ります。 メッセージは、メッセージを変換し、元の Web サービス・クライアントへの返信としてそれを送る HTTPReply ノードに メッセージを伝搬する Compute ノードに渡されます。
各 Compute ノードによって完了した変換は単純な場合がありますが、 最初の ESQL コードは、WebSphere MQ アプリケーションからの返信が元の要求を送った クライアントに戻ることを保証するために、2番目によって検索された HTTP の状態についての情報を保管する必要があります。
最初のメッセージ・フローはメッセージを受け取り、何であれ必要な変換を行い、 アウトバウンド・メッセージにある HTTP 要求 ID をエンコードします。 (望むなら、要求 ID をデータベースに保管することもできます。) HTTPInput ノードは、Destination.HTTP.RequestIdentifier と呼ばれる LocalEnvironment ツリーにある フィールドとして、要求 ID を提供し、Compute1 はこの値を読み取り、保管することができます。
2 番目のメッセージ・フローは応答メッセージを受け取り、 クライアント・メッセージ形式にそれを変換します。 Compute2 は、メッセージから HTTP 要求 IDを読み取り、 この値を使用して LocalEnvironment.Destination.HTTP.RequestIdentifier を設定します。 HTTPReply ノードは、要求 ID を使用して、メッセージが適切な HTTP クライアントに到達するよう保証します。
このシナリオのインプリメンテーションは、MQMD の適切な処理を必要とします。 HTTP を介するメッセージ・フローになるメッセージは、MQOutput ノードに送られる前に、MQMD を追加する必要があります。また、HTTPReply または HTTPRequest ノードに送られる前に、WebSphere MQ を介するようになるいかなるメッセージも、MQMD を除去する必要があります (HTTP ストリームに MQMD を含むことが望まれていない場合)。
Compute1 のための ESQL モジュールには、このようなステートメントが含まれています。
SET OutputRoot.XML.A.MessageID = CAST(InputLocalEnvironment.Destination.HTTP.RequestIdentifier AS CHARACTER);
Compute2 のための ESQL モジュールには、このようなステートメントがコーディングされています。
SET OutputLocalEnvironment.Destination.HTTP.RequestIdentifier = CAST(InputRoot.XML.A.MessageID AS BLOB);