メッセージ・マッピングのマイグレーションに関する制約事項

.mfmap ファイルのマイグレーションがサポートされないシナリオがいくつかあります。このトピックでは、こうした状況でマイグレーションが自動で行われない理由について説明し、マイグレーションを支障なく完了させる方法の説明をしています。

バージョン 5.0 (ファイル・フォーマットは .mfmap) と バージョン 6.0 (ファイル・フォーマットは .msgmap) の間では、メッセージ・マップのプログラミング・モデルが 異なっています。バージョン 5.0 メッセージ・マップは、プロシージャー型プログラミング・モデルに従います。これは要するに代替 ESQL であり、変換を実行するために必要なステップをすべて記述しなければなりません。バージョン 6.0 は、宣言型プログラミング・モデルを使用します。この場合、記述するのは変換の結果であり、その結果を実現する方法はツールが決定します。

ほとんどの場合、マイグレーションの失敗の原因は、メッセージ・マップに入っている、変換の実行ステップに関する情報が多すぎるのに対して、希望する結果についての情報が十分でない、ということにあります。このようなメッセージ・マップでは、.mfmap ファイルを変更して特定の「方法」のセクションを切り離し、メッセージ・マップから呼び出し可能な ESQL 関数またはプロシージャーにする、という方法でマイグレーションを使用可能にできます。.mfmap ファイルは、ESQL を式として収容する代わりに、それを呼び出します。その後、mqsimigratemfmaps コマンドで .mfmap ファイルをマイグレーションしますが、このコマンドはマイグレーション・エラーをログに記録する代わりに ESQL を呼び出します。

1 つの制限として、 ESQL (.mfmap および .msgmap ファイルのランタイム) は複合エレメント (または REFERENCE) の値を戻す関数を定義できないと いうものがあります。以下の手順では、この複合エレメント・ターゲットの制限を回避する方法を説明しています。多くの場合、マップを ESQL として書き換える必要があります。マップから ESQL を呼び出すための詳しい実例および情報については、「ヘルプ」 > 「サンプル・ギャラリー」 > 「テクノロジー・サンプル」 > 「Message Brokers」 > 「メッセージ・マップ」にある WebSphere Message Brokers マッピング・サンプルを参照してください。

  1. .mfmap ファイルに ESQL 関数を定義できるかどうかを判別します。
    1. ターゲット値が複合エレメント (ESQL 用語で言えば REFERENCE) である場合、個々のマッピングを .msgmap ファイルで書き直す必要があります。マッピングを .mfmap ファイルから削除し、ステップ 4 に進みます。
    2. 他のすべての場合 (CHAR ストリング、数値、日時) には関数を使用します。ステップ 2 に進みます。
  2. 関数のソース・パラメーターと戻りのタイプを判別します。
    1. マッピングのソース・パスごとに、関数またはプロシージャーに 1 つのパラメーターがなければなりません。関数では、パラメーターはすべて変更不能です。パラメーターのタイプは、ソース・データ・タイプと一致している必要があります。
    2. 関数の戻りタイプは、上記の ESQL データ・タイプです。
  3. .mfmap ファイルを更新してマイグレーションを使用可能にします。マッピング内の関数を起動するよう、.mfmap ファイルを変更します。その際、ステップ 2a でリストされている順序でソース・パラメーターを関数に渡します。
  4. mqsimigratemfmaps コマンドを再実行して、変更された .mfmap ファイルをマイグレーションします。
  5. マイグレーション・ログにエラーがなくなるまで、ステップ 1 から 4 を繰り返します。
  6. バージョン 6.0 Message Brokers Toolkit を開始し、マイグレーションされた .msgmap ファイルを開きます。
    1. 関数としてマイグレーションされた ESQL の場合、エラーはないはずです。
    2. 複合エレメント・ターゲットの場合、バージョン 6.0 の機能を使用してマッピングを書き換えます。
以下の例は、.mfmap ファイルから .msgmap ファイルへのマイグレーションを示しています。
  • 次のような反復するソース式への複数の参照をマイグレーションするとします。
    src_msg.e[1] + src_msg.e[2]  
    次のように、ESQL 関数の結果を計算します。
    CREATE FUNCTION addOneAndTwo(IN src_msg)
    BEGIN
    	RETURN src_msg.e[1] + src_msg.e[2]; 	
    END;  
    .msgmap ファイルで、親エレメント src_msg をパラメーターとして使用して ESQL 関数 addOneAndTwo を呼び出します。

  • エレメント名を使用しない式
    src_msg.* 
    または
    src_msg.*[]  	
    は、以下のように、反復フィールドの親を取る関数を使用して処理できます。
    CREATE FUNCTION processAny(IN src_msg)  	
    BEGIN 		
    DECLARE nodeRef REFERENCE TO src_msg.e.*;
    DECLARE result <dataType> <initialValue>;
    	WHILE LASTMOVE nodeRef DO 			
    		--expression goes here 			
    		SET result = result; 		
    END WHILE;
    	RETURN RESULT; 	
    END;  
    .msgmap ファイルで、親エレメント src_msg をパラメーターとして使用して ESQL 関数を呼び出します。

  • エレメント名を動的に計算する式
    src_msg.{'a' || 'b'}  
    は、以下のように、反復フィールドの親を処理する ESQL 関数により処理できます。
    CREATE FUNCTION processDynamicName(IN src_msg)  	
    BEGIN 		
    	RETURN src_msg.{'a' || 'b'}; 	
    END;  
    .msgmap ファイルで、親エレメント src_msg をパラメーターとして使用して ESQL 関数を呼び出します。

  • SELECT MIN、MAX、および COUNT 関数を使用する式
    	SELECT MAX("#T".FIRSTNAME) 				
    FROM Database.CUSTOMER AS "#T"
    		WHERE "#T".CUSTOMERID = custId 	
    は、以下のように、反復フィールドの親を処理する ESQL 関数により処理できます。
    CREATE FUNCTION processMAX(IN custId)  	
    BEGIN 		
    	RETURN  			
    	SELECT MAX("#T".FIRSTNAME) 				
    FROM Database.CUSTOMER AS "#T"
    		WHERE "#T".CUSTOMERID = custId 	
    END;  
    .msgmap ファイルで、エレメント custId をパラメーターとして使用して ESQL 関数を呼び出します。

  • e || "#I"  
    で mfmap インデックス変数を使用する .mfmap ファイルは、ESQL で完全に書き換える必要があります。 定義によれば複合反復親エレメントがなければならず、これは ESQL 関数によりサポートされません。

  • 値を計算するためにソース式を使用する式
    src_msg.e[src_msg.a]  
    は、以下のように if 行、msgmap:occurrence() 関数、および ESQL 関数を使用して書き換える必要があります。
    for src_msg.e 		
    	if 			
    		condition msgmap:occurrence(src_msg/e) = src_msg/a 

  • 値を計算するためにインデックス式を使用する式
    src_msg.e["#I" +5]
    src_msg.e[< 3]  
    の場合、.msgmap ファイルは反復フィールドへの索引アクセスをまだサポートしていないため、.mfmap ファイル全体を ESQL で書き換える必要があります。

  • .mfmap ファイルが値を計算するために ROW 式
    src_msg.e IN (1, 2, 3)  
    を使用する場合、.msgmap ファイルは ESQL ROW 式をサポートしていないため、ESQL で書き換える必要があります。
関連タスク
ESQL の開発
関連資料
mqsimigratemfmaps コマンド
バージョン 5.0 からのメッセージ・マッピングのマイグレーション
特記事項 | 商標 | ダウンロード | ライブラリー | サポート | フィードバック
Copyright IBM Corporation 1999, 2006 最終更新: 08/21/2006
ar25255_