第 9 章 キューおよびメッセージング

複数のキュー・タイプと複数のメッセージング・プロトコルを保守するために、4.2 では新規キュー機能がインプリメントされました。キューは、EAI プラットフォームおよび Web サーバーを含む、外部ソース / 宛先とのインバウンドおよびアウトバウンド・メッセージングを扱うゲートウェイの役目を果たします。

: メッセージング・フレームワークのセットアップに関する情報は、『メッセージング・フレームワークのインプリメント』セクションで扱われています。

参考のため、以下の用語が定義されています。

新規キュー機能を使用すると、ジョブがインポートまたはエクスポートされる際のプロセスの一部としてメッセージを使用でき、状況メッセージをすべての必要なユーザーに送信できます。


キュー・コンソール

キュー・コンソールへのアクセス

メニュー・パス「コラボレーション・マネージャー」>「キュー」>「キュー・コンソール」を使用すると、キュー・コンソールが表示されます。

「キューの詳細 (Queue Details)」の表示

キューの詳細を表示するには、「キュー名」をクリックすると「キューの詳細 (Queue Detail)」画面が表示されます。以下の情報が提供されます。

キュー内のメッセージの表示

キュー・コンソールには「メッセージ」という名前の列があり、この列にはキューが受信したメッセージの番号にハイパーリンクが貼られています。メッセージの番号をクリックすると、メッセージの内容が表示されます。

キュー内のメッセージの検索

1. キュー内のメッセージを検索するには、メニュー・パス「コラボレーション・マネージャー」>「キュー」>「メッセージ・コンソール」を使用します。「キュー・メッセージの検索」画面が表示されます。

2. 以下のフィールドの値を選択します。

3. 「検索」をクリックすると、「キュー・メッセージ」テーブル下部に結果が表示されます。

キューの作成

1. メニュー・パス「コラボレーション・マネージャー」>「キュー」>「新規キュー」を使用します。

2. 必要な情報を入力します。

キュー名: キューの名前を入力します。

説明: キューの説明を入力します。

プロトコル: 外部ソースをキューに、またはキューから結合するのに使用するメッセージング・プロトコルのリストから選択します。

スクリプト: キューへの、またキューからのメッセージの経路指定を実行する、事前に作成されたスクリプトのリストから選択します。宛先 / ソースへの典型的なメッセージには、以下のものが含まれます。


メッセージング・フレームワークのインプリメント

WebSphere Product Center のメッセージング・フレームワークのインプリメンテーションによって、以下のターゲット EAI プラットフォームとの統合が可能になります。

選択したプラットフォームで、信頼性のあるトランスポート・メカニズム、異なるシステムまたはプラットフォームで相互に通信する複数のプログラムでの一貫性のあるインターフェースが提供される必要があります。

WebSphere Product Center のメッセージング・フレームワークは、以下のプロセスをサポートするよう設計されています。

WebSphere Product Center には、XML 文書を解析して作成する機能、およびメッセージを送信する機能、さらには EAI プラットフォーム・キューからメッセージを収集する機能が備えられています。 メッセージは、外部ソースによって提供される XML 文書として定義されます。こうしたすべての機能は、WebSphere Product Center スクリプト・エンジンからアクセスできます。WebSphere Product Center と EAI プラットフォーム・アダプター間の対話を使用可能にするには、この機能を十分に活用するスクリプトをインストールする必要があります。

WebSphere Product Center はキューをサポートしています。キューは、メッセージの受信および送信ポイントとしての機能を果たす 1 つの構造です。WebSphere Product Center のキューは、外部ソース / 宛先とのインバウンドおよびアウトバウンド・メッセージングを扱うゲートウェイの役目を果たします。また各キューは、WebSphere Product Center のスクリプト操作でサポートされています。

キューでは、以下の機能が提供されています。

メッセージ送信プロトコルのセットアップを使用可能にして、キューへの、およびキューからの外部メッセージ・ソースを結合し、以下のメッセージ送信プロトコルを提供します。

スクリプトを実行して、キューへの、またはキューからのメッセージを経路指定します。標準的なメッセージ宛先 / ソースには、以下のものが含まれます。

以下のリストは、メッセージング機能のフレームワークを描写しています。

このプロセスが正しく機能するためには、メッセージング・フレームワークが構築されている必要があります。

メッセージング・フレームワークの構築

以下のプロセスは、EAI プラットフォーム・フレームワークを統合するための提案されているメソッドについて略述しています。このプロセスは、特定の要件に応じてカスタマイズできます。

メッセージの受信

このセクションは、受信における確認通知メッセージの提供を含む、アイテム・セットが含まれるメッセージの受信プロセスについて説明しています。2 つのプロセス、セットアップとランタイムが、メッセージの受信プロセスをサポートしています。 このプロセスは汎用でありほとんどの目的に応用できます。

セットアップ

1. テクニカル・ビジネス・プロセス・アナリストが以下のものを作成します。

 2. テクニカル・ビジネス・プロセス・アナリストは、スクリプトが含まれるインバウンド・キューを作成します。このスクリプトは 3 つの機能 (メッセージ受信、メッセージ本体の解析、およびルーティング) をサポートしています。

メッセージ受信

スクリプトのメッセージ受信セクションは、以下の機能をサポートしてます。

メッセージ本体の解析

スクリプトのメッセージ本体の解析セクションは、以下の機能をサポートしています。

メッセージ・ルーティング

スクリプトのルーティング・セクションは、以下の機能をサポートしています。

ターゲット・カタログから、アイテム・セット内のアイテムを追加 / 変更 / 削除します。

  • テクニカル・ビジネス・プロセス・アナリストは、受信確認通知メッセージの送信のために、確認通知ワークフローをセットアップします。 このワークフローには、以下の機能があります。
  • メッセージ・カタログからの新規レコードを、確認通知ワークフローのステップ内のコラボレーション・エリアにチェックアウトします。
  • 確認通知ワークフロー内の次のステップでは、メッセージ ID、送信者 ID、日時、およびメッセージ・ソースで必要とされる任意のコマンド (たとえば、Received) が含まれるメッセージ・ソースに、メッセージを送信します。
  • 確認通知ワークフローの次のステップでは、メッセージ・カタログ・レコードにチェックインします。

ランタイム

セットアップが正しく構成されたら、以下のランタイム・イベントが生じる必要があります。

1. キュー・スクリプトのメッセージ受信セクションによって、キューがメッセージを受信します。

2. キュー・スクリプトのメッセージ受信セクションがメッセージ本体を解析して、メッセージ・タイプ、メッセージ ID、および送信者 ID を取得します。

3. キュー・スクリプトのメッセージ受信セクションが、メッセージ・タイプ、メッセージ ID、差出人 ID、および日時を含むレコードをメッセージ・カタログに作成します。

4. キュー・スクリプトのメッセージ受信セクションが、メッセージ・カタログからの新規レコードを、確認通知ワークフローのステップ内のコラボレーション・エリアにチェックアウトします。

5. 確認通知ワークフロー内の次のステップでは、メッセージ ID、送信者 ID、日時、およびメッセージ・ソースで必要とされる任意のコマンド (たとえば、Received) が含まれるメッセージ・ソースに、メッセージを送信します。

6. 確認通知ワークフローの次のステップでは、メッセージ・カタログ・レコードにチェックインします。

7. キュー・スクリプトのメッセージ本体の解析セクションが、アイテム・セットにレンダリングする、マップ名とターゲット・カタログ名ごとにメッセージ本体を解析します (後ほど言及する新規スクリプト操作を使用します)。

8. キュー・スクリプトのルーティング・セクションが、カタログの追加 / 変更 / 削除のための既存のスクリプト操作を使用して、ターゲット・カタログからアイテム・セット内のアイテムを追加 / 変更 / 削除します。

WebSphere Product Center インバウンド/アウトバウンド・キューの作成

WebSphere Product Center インバウンドおよびアウトバウンド・キューは、キュー・コンソールを使用して作成されます。キューを作成する前に、スクリプト・コンソールからターゲット・スクリプトを作成する必要があります。「新規キュー」画面の「トリガー・スクリプト・パス (Trigger Script Path)」ドロップダウン・フィールドにトリガー・スクリプトが表示されます。

1. キュー・コンソールで、「新規」をクリックします。

2. 「キューの詳細 (Queue Detail)」画面で、キュー名、説明を入力して、プロトコルおよびトリガー・スクリプト・パスを選択します。 トリガー・スクリプトは、「メッセージ・キュー・プロセッサー」タイプのスクリプト・コンソールで作成されます。

3.「保管」をクリックします。


メッセージング・スクリプト操作

WebSphere Product Center のスクリプト操作により、WebSphere Product Center スクリプト・アプリケーションを書く際に、各スクリプト操作の引き数に能力を定義できるようになり、柔軟性が増します。このセクションで示されている以下のスクリプト操作は、MQ または JMS を使用する WebSphere Product Center でサポートされているメッセージング機能をサポートするために使用します。こうした方式を使用すると、外部キューからメッセージのインポートおよびエクスポートが可能になります。

: このセクションにリストされているスクリプト操作は変更されることがあります。 最新のスクリプト操作については、「スクリプト・サンドボックス」を参照してください。

MQ スクリプト操作

スクリプト・アプリケーションを作成する際に、スクリプト操作 mqGetQueueMgr はハンドルと共にハンドラーを MQQueueManager に戻します。ハンドルを解放するために mqDisconnect を呼び出す前に、そのハンドルを使って複数の MQ 操作を行うことができます。

mqGetQueueMgr

mqDisconnect

mqSendTextMsg

: mqSendReply を使用して指定されたメッセージへの返信を送信しようとする場合、mqSendTextMsg を使用するとエラーが戻ります。これを防ぐには、mqSendTextMsgWithReply を使用します。

mqSendTextMsgWithReply

mqGetTextFromMsg

mqGetReceivedMsg

: メッセージが検索されると、キューから除去されます。メッセージ ID を指定しない場合、キューの最初のメッセージが取得されます。

 mqSendReply

mqSendReplyWithStatus

: 使用できるのは 1 つの状況値だけです。  

mqGetXMLMessageContent

: 着信メッセージを解析するためにこのメソッドを使用します。

 mqGetResponseToMsg

mqGetMessageDiagnostics

mqGetMessageId

mqGetReceivedMsgByMessageID

JMS スクリプト操作

スクリプト・アプリケーションを作成すると、スクリプト操作 jmsGetConnectionFactory はハンドルと共にハンドラーを QueueConnectionFactory に戻します。ハンドルを解放するために jmsDisconnect を呼び出す前に、そのハンドルを使って複数の JMS 操作を行うことができます。

jmsGetContext

jmsGetConnectionFactory

jmsGetMQConnectionFactory

jmsGetQueueByName

jmsGetQueueConnection

jmsGetQueueSession

jmsDisconnect

jmsCreateTextMsg

jmsSendMsg

jmsReceiveMsgFromQueue

jmsGetTextFromMsg

jmsGetMessageID

jmsGetMessageCorrelationID

jmsGetMessageProperties

jmsSendMsgToQueue

jmsSetMessageText


Web サービス

新規 Web サービスの作成

メニュー・パス「コラボレーション・マネージャー」>「Web サービス」>「新規 Web サービス」を使用します。 「Web サービスの詳細」画面が表示されます。

適切な情報を以下のフィールドに入力します。

Web サービス名 Web サービスの名前を入力します。 この名前は SOAP サービスの URL の一部になります。 空白を含んではいけません。 たとえば、以下のようにします。
Web サービスの説明 Web サービスの説明を入力します。
プロトコル Web サービスで使用されるプロトコル。 現在は、SOAP over HTTP のみがサポートされたプロトコルです。 デフォルト値は“SOAP_HTTP”です。
URL

このサービスにアクセスするための URL です。 Web サービスを保管した後、このフィールドに自動的にデータが取り込まれます。

 

WSDL URL この Web サービスの WSDL にアクセスするための URL。 Web サービスを保管した後、このフィールドに自動的にデータが取り込まれます。
WSDL このサービスの WSDL を入力します。WSDL 文書は、このサービスのインターフェース、URL、およびプロトコルについて説明した XML 形式の文書です。この文書を手動で入力する必要があります。WSDL 文書のサンプルについては以下をご覧ください。 正しく保管するには、Web サービスに有効な XML を入力する必要があります。
インプリメンテーション・スクリプト このサービスをインプリメントする Trigo スクリプトを入力します。サービスの着信パラメーターは、配列変数 "soapParams" で使用できます。 サービスの戻り値はストリングでなければならず、"out" 書き出し変数に書き出されます。 SOAP フォールトを戻すには、フォールト・コードを "soapFaultCode" 書き出し変数に書き出し、フォールト・メッセージを "soapFaultMsg" 書き出し変数に書き出します。 インプリメンテーション・スクリプトのサンプルについては、以下 をご覧ください。
要求を保管しますか? これにチェック・マークを付けると、Trigo はすべての着信要求のパラメーターを文書ストアに保管します。これはトランザクション・コンソールから使用できます。
応答を保管しますか? これにチェック・マークを付けると、Trigo はすべての応答の内容を文書ストアに保管します。これはトランザクション・コンソールから使用できます。
デプロイ済み これにチェック・マークを付けると、サービスがデプロイされます。チェック・マークを付けない場合、このサービスを利用できません。

インプリメンテーション・スクリプトおよび WSDL 文書のサンプル

以下のサンプル・インプリメンテーション・スクリプトと WSDL 文書の設計は、着信 SOAP 要求のパラメーターの数をチェックします。 パラメーター数が 4 つの場合は、そのパラメーターをリストしたストリングを戻します。 パラメーター数が 4 つではない場合は、SOAP フォールトをスローします。

インプリメンテーション・スクリプト

nParams = soapParams.size();
if (nParams != 4)
  {
    soapFaultCode.writeln("WRONG_NUM_PARAMS");
    soapFaultMsg.writeln("Wrong number of parameters.  This service requires 4.  You have " + nParams + " parameters.");
  }
else
  {
    out.writeln("Success.");
    for (i = 0; i < nParams; i++)
    {
      out.writeln("Parameter " + (i + 1) + " is " + soapParams[i]);
    }
  }

WSDL

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions targetNamespace="http://my.trigo-instance.com/soap/services/CheckParams"
                  xmlns="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:apachesoap="http://xml.apache.org/xml-soap"
                  xmlns:impl="http://my.trigo-instance.com/soap/services/CheckParams"
                  xmlns:intf="http://my.trigo-instance.com/soap/services/CheckParams"
                  xmlns:soapenc="http://schemas.xmlsoap.org/soap/encoding/"
                  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
                  xmlns:wsdlsoap="http://schemas.xmlsoap.org/wsdl/soap/"
                  xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <wsdl:message name="invokeRequest">
    <wsdl:part name="param1" type="xsd:string"/>
    <wsdl:part name="param2" type="xsd:string"/>
    <wsdl:part name="param3" type="xsd:string"/>
    <wsdl:part name="param4" type="xsd:string"/>
  </wsdl:message>
  <wsdl:message name="invokeResponse">
    <wsdl:part name="invokeReturn" type="xsd:string"/>
  </wsdl:message>
  <wsdl:portType name="CheckParams">
    <wsdl:operation name="invoke" parameterOrder="param1 param2 param3 param4">
      <wsdl:input message="intf:invokeRequest" name="invokeRequest"/>
      <wsdl:output message="intf:invokeResponse" name="invokeResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="CheckParamsSoapBinding" type="intf:CheckParams">
    <wsdlsoap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="invoke">
      <wsdlsoap:operation soapAction=""/>
      <wsdl:input name="invokeRequest">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                       namespace="http://DefaultNamespace"
                       use="encoded"/>
      </wsdl:input>
      <wsdl:output name="invokeResponse">
        <wsdlsoap:body encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"
                       namespace="http://my.trigo-instance.com/soap/services/CheckParams"
                       use="encoded"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="CheckParamsService">
    <wsdl:port binding="intf:CheckParamsSoapBinding"
               name="CheckParams">
      <wsdlsoap:address location="http://my.trigo-instance.com/soap/services/CheckParams"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>