XML_FlightQueryIn メッセージ・フローの作成

XML_FlightQueryIn メッセージ・フローを作成するには、次のようにします。 詳細な指示については、各ステップの終わりにあるリンクをクリックしてください。

XML_FlightQueryReply メッセージ・フローを作成するためには、まず、XML_FlightQueryOut メッセージ・フローと XML_FlightQueryReply メッセージ・フローを作成する必要があります。 その方法については、XML_FlightQueryOut メッセージ・フローの作成、および XML_FlightQueryReply メッセージ・フローの作成を参照してください。

XML_FlightQueryIn メッセージ・フローを作成および構成するには、次のようにします。

  1. XML_FlightQueryIn という新規のメッセージ・フローを作成します。
    手順については、WebSphere Message Broker 資料の メッセージ・フローの作成を参照してください。
  2. メッセージ・フロー・エディターで、次の表にリストされているノードを追加して名前変更します。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの追加を参照してください。
    パレット・ドロワー ノードのタイプ ノード名
    WebSphere MQ MQInput XML_FLIGHTQUERY_REPLIES
    WebSphere MQ MQOutput XML_FLIGHTQUERY_OUT
    WebSphere MQ MQOutput XML_FLIGHTQUERY_TIMEOUT
    WebSphere MQ MQOutput XML_FLIGHTQUERY_FAIL
    Transformation Compute BuildOutputMessage
    Transformation Compute ProcessTimeout
    Routing AggregateReply AggregateReplies
  3. 次の表に示されているように、ノードを接続します。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの接続を参照してください。
    ノードが正しく接続されたかどうかを確認する には、『XML_FlightQueryIn メッセージ・フローについて』の図を参照してください。
    ノード名 ターミナル 接続先
    XML_FLIGHTQUERY_REPLIES Out AggregateReplies (In ターミナル)
    Catch XML_FLIGHTQUERY_FAIL
    AggregateReplies Out BuildOutputMessage
    Timeout ProcessTimeout
    BuildOutputMessage Out XML_FLIGHTQUERY_OUT
    ProcessTimeout Out XML_FLIGHTQUERY_TIMEOUT
  4. 次の表に示されているように、ノードのプロパティーを構成します。 この表に代替値が示されていなければ、すべてのプロパティーに関してデフォルト値を受け入れます。
    手順については、WebSphere Message Broker 資料の メッセージ・フロー・ノードの構成を参照してください。
    ノード名 ページ プロパティー
    XML_FLIGHTQUERY_REPLIES 基本 キュー名 XML_FLIGHTQUERY_REPLIES
    (この値は、XML_FlightQueryOut によって制御メッセージが書き込まれたキューです。)
    入力メッセージ構文解析 メッセージ・ドメイン XMLNSC : XML メッセージの場合 (ネームスペースが有効、妥当性検査、メモリー使用量が少ない)
    (この値は、汎用 XML パーサーを使用するようにブローカーに指示します。)
    AggregateReplies 基本 集約名 FLIGHTDETAILSAGG
    (この名前は、FlightQuery_Out メッセージ・フローの Request Details ノードの「集合名」プロパティーと一致していなければなりません。)
    基本 不明なメッセージ・タイムアウト 60
    (この値は応答として識別できないメッセージが、Unknown ターミナルに伝搬されるまでに保持される時間の長さです。)
    Buildoutputmessage 基本 ESQL モジュール BuildOutputMessage
    (この値は、処理中にこのノードによって使用される ESQL モジュールの名前です。この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    XML_FLIGHTQUERY_OUT 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_FLIGHTQUERY_OUT
    (この値は、メッセージ・フローがメッセージを書き込むローカル・キューです。)
    Processtimeout 基本 ESQL モジュール ProcessTimeout
    (この値は、処理中にこのノードによって使用される ESQL モジュールの名前です。この名前は、ESQL ファイル中の CREATE COMPUTE MODULE ステートメント中の名前と一致していなければなりません。)
    XML_FLIGHTQUERY_TIMEOUT 基本

    キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)

    XML_FLIGHTQUERY_TIMEOUT
    (この値は、XML_FlightQueryOut メッセージ・フロー中の Request Details ノード中に指定されたタイムアウトの前に、Aggregate Replies ノードに達しない応答メッセージがある場合に、メッセージ・フローが未完成の集約メッセージを書き込むローカル・キューです。)
    XML_FLIGHTQUERY_FAIL 基本 キュー名
    (キューはブローカーと同じキュー・マネージャーで定義されるので、キュー・マネージャーの名前を指定する必要はありません。)
    XML_FLIGHTQUERY_FAIL
    (この値は、処理が失敗した場合にメッセージ・フローがメッセージを書き込む場所です。)
  5. XML Airline Message Flows プロジェクトで、ESQL ファイルをダブルクリックして、ESQL エディターで開きます。以下の ESQL コード・モジュールを ESQL ファイルにコピー、および貼り付けし、ファイルを保存します。詳しくは、WebSphere Message Broker 資料の ESQL の開発を参照してください。
    -- *********************************************************************************
    -- * ESQL for the XML_FlightQueryIn message flow - BuildOutputMessage/ProcessTimeout
    -- *********************************************************************************
    
    CREATE COMPUTE MODULE BuildOutputMessage
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		-- fix the aggregate reply message for output to a queue
    		SET OutputRoot.Properties = InputRoot.Properties;
    		CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
    		SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    
    		DECLARE inflight REFERENCE TO InputRoot.ComIbmAggregateReplyBody.FlightDetails.XMLNSC.Flight;
    		DECLARE inpass REFERENCE TO InputRoot.ComIbmAggregateReplyBody.PassengerDetails.XMLNSC.ListOfPassengers;
    		CREATE FIELD OutputRoot.XMLNSC.FlightDetailsInfoResponse;
    		DECLARE outresp REFERENCE TO OutputRoot.XMLNSC.FlightDetailsInfoResponse;
    
    		-- populate the output message with flight info from the aggregate reply
    --		CREATE FIRSTCHILD OF outresp.Flight TYPE NameValue NAME 'number' VALUE inflight.FLIGHTNO;
    		SET outresp.Flight.(XMLNSC.Attribute)number VALUE = inflight.FLIGHTNO;
    		SET outresp.Flight.(XMLNSC.Attribute)Flightdate VALUE = inflight.FLIGHTDATE;
    		SET outresp.Flight.FirstClass.Capacity = inflight.TOTALFIRST;
    		SET outresp.Flight.FirstClass.Used = inflight.FIRSTCLASS;
    		SET outresp.Flight.FirstClass.Price = inflight.FIRSTPRICE;
    		SET outresp.Flight.EconomyClass.Capacity = inflight.TOTALECONOMIC;
    		SET outresp.Flight.EconomyClass.Used = inflight.ECONOMICCLASS;
    		SET outresp.Flight.EconomyClass.Price = inflight.ECONOMICPRICE;
    		SET outresp.Flight.Origin = inflight.STARTPOINT;
    		SET outresp.Flight.Destination = inflight.ENDPOINT;
    
    		-- populate the output message with passenger info from the aggregate reply		
    		DECLARE I INTEGER 1;
    		DECLARE J INTEGER CARDINALITY(inpass.*[]);
    		WHILE I <= J DO
    			SET outresp.ListOfPassengers.Passenger[I].ReservationNumber = inpass.PassengerDetails[I].RESERVATIONNO;
    			SET outresp.ListOfPassengers.Passenger[I].FirstName = inpass.PassengerDetails[I].FIRSTNAME;
    			SET outresp.ListOfPassengers.Passenger[I].LastName = inpass.PassengerDetails[I].LASTNAME;
    			SET outresp.ListOfPassengers.Passenger[I].Class = inpass.PassengerDetails[I].CLASSTYPE;
    			SET I = I + 1;
    		END WHILE;
    	RETURN TRUE;
    	END;
    END MODULE;
    
    
    CREATE COMPUTE MODULE ProcessTimeout
    	CREATE FUNCTION Main() RETURNS BOOLEAN
    	BEGIN
    		SET OutputRoot.Properties = InputRoot.Properties;
    		CREATE NEXTSIBLING OF OutputRoot.Properties DOMAIN 'MQMD';
    		SET OutputRoot.MQMD.Version = MQMD_CURRENT_VERSION;
    		CREATE FIELD OutputRoot.XMLNSC.ComIbmAggregateReplyBody;
    		DECLARE timedout REFERENCE TO OutputRoot.XMLNSC.ComIbmAggregateReplyBody;
    		DECLARE reps REFERENCE TO InputRoot.ComIbmAggregateReplyBody;
    		MOVE reps FIRSTCHILD;
    		IF LASTMOVE(reps) THEN -- there will either be one reply, or none
    			SET timedout.TimedOut = reps.XMLNSC;
    		END IF;
    		RETURN TRUE;
    	END;
    END MODULE;
    
  6. メッセージ・フローを保存します。
これで、XML_FlightQueryIn メッセージ・フローの作成が終わりました。このメッセージ・フローは、XML_FlightQuery メッセージ・フローの集約ファンイン部分です。 XML_FlightQueryIn メッセージ・フローは、XML_FlightQueryOut および XML_FlightQueryReply メッセージ・フローと連動して、特定のフライトおよびそのフライトの座席を予約した乗客に関する情報を要求します。

Airline Reservations サンプルの作成に戻る