この Web サービス・シナリオでは、ブローカーが既存の非 Web サービス・アプリケーションに Web サービス・インターフェースを提供します。
記号を理解する手掛かり:
このシナリオは、Web サービス・ファサードと呼ばれることもあります。 Web サービス・インターフェースの設計は、通常いくらかの再グループ化や既存のインターフェースの制限または強化が含まれ、既存の WSDL 定義には制約されません。
メッセージ・フローは Web サービス要求を受け取り、それを既存のアプリケーションが予期する形式に変換して、既存のアプリケーションを呼び出します。既存のアプリケーションからの応答は、有効な Web サービス応答に変換されます。
既存の CICS® アプリケーションには、COBOL コピーブック・インターフェースがあります。
入力または出力用に現在 WebSphere MQ を使用している ほとんどのメッセージ・フローは、置換または追加のプロトコルとして HTTP を使用するのに適しています。
MRM ドメイン内で入力メッセージをモデル化し、モデルから WSDL を生成することができます。または汎用 XMLNS ドメイン・メッセージを処理することもできます。 MRM ドメイン内でメッセージを定義した場合、HTTPInput ノードを構成して入力メッセージを検証することができます。 メッセージがモデルに準拠しない場合、ノードは例外を生成します。
HTTPReply ノードを構成して、クライアントに送信する応答メッセージ用のデフォルトの HTTP ヘッダーのセットを生成することができます。 デフォルトの HTTP ヘッダー・セットを生成すれば、メッセージ・フローを WebSphere MQ メッセージの処理用から、HTTP メッセージの処理用のフローに変換するために行う必要のある変更数が減ります。
最初のメッセージ・フローは、HTTPInput ノードの Web サービス・クライアントから、インバウンド要求を受け取ります。 それには、何らかの方法で要求を変換するための Compute ノード、および変更後の要求を WebSphere MQ アプリケーションに送る MQOutput ノードが組み込まれています。
2 番目のメッセージ・フローは、MQInput ノード内でそのアプリケーションから応答を受け取ります。 メッセージは、Compute ノードに渡されます。このノードは、メッセージを変換し、元の Web サービス・クライアントへの返信としてそれを送る HTTPReply ノードにメッセージを伝搬します。
各 Compute ノードで行われる変換は些細 (ささい) なものですが、WebSphere MQ アプリケーションからの応答が、元の要求を送信したクライアントに必ず返送されるようにするには、最初の Compute ノードの ESQL コードは、2 番目の Compute ノードによって検索される 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 を追加される必要があります。 また、WebSphere MQ を介して到達するすべてのメッセージは、HTTPReply または HTTPRequest ノードへの送信の前に、MQMD を除去される必要があります (HTTP ストリームへの MQMD の組み込みが望ましいのでない限り)。
Compute1 ノードの ESQL モジュールに、以下のステートメントのようなコード・ステートメントを組み入れます。
SET OutputRoot.XMLNS.A.MessageID = CAST(InputLocalEnvironment.Destination.HTTP.RequestIdentifier AS CHARACTER);
Compute2 ノードの ESQL モジュールに、以下のステートメントのようなコード・ステートメントを組み入れます。
SET OutputLocalEnvironment.Destination.HTTP.RequestIdentifier = CAST(InputRoot.XMLNS.A.MessageID AS BLOB);