V7.0 マイグレーション・ツールでは行われない変更

EGL バージョン 7.0 へのマイグレーションの際に、必要な変更の一部がマイグレーション・ツールによって実行されないことがあります。

コードを V7.0 にマイグレーションした後で、以下のセクションに記述されている変更が必要な場合があります。

プロジェクト・ビルダーの更新

マイグレーション済みのプロジェクトを V7.0 ワークスペースにインポートすると、デフォルトのビルド記述子を設定していた場合でも、デフォルトのビルド記述子が欠落しているためにパーツを生成できないと、「生成結果」ビューに表示されることがあります。

この問題を解決するには、プロジェクトのビルダーを更新して、EGL Advanced Builder が EGL Build Parts Model Builder および EGL Validation Builder の後にリストされるようにします。

このようにビルド順序を編集するには、次の手順に従います。
  1. 「プロジェクト・エクスプローラー」ビューで、プロジェクトを右クリックし、「プロパティー」をクリックする。
  2. 「プロパティー」ウィンドウで、「ビルダー」をクリックする。
  3. 「ビルダー」ページで、「EGL Advanced Builder」 を選択する。
  4. 下矢印ボタンを使用して、「EGL Advanced Builder」「EGL Build Parts Model Builder」および「EGL Validation Builder」の下に移動する。
  5. 「OK」をクリックします。

プロパティー解決での変更

EGL プロパティーと同じ名前を持つパーツを定義すると、EGL は、その名前への参照を、EGL プロパティーではなく、ユーザー定義パーツによって解決する場合があります。

DECIMAL 型への長さの追加

stringAsDecimal 関数をマイグレーションすると、マイグレーション・ツールは、古いコードの動作を維持するために DECIMAL 型へのキャストを追加することがあります。 この場合は、長さを手動で追加する必要があります。

例えば、次のような古いコードがあるとします。
myStringNumber string = "5";
myResult decimal(7,2);
myResult = stringAsDecimal(myStringNumber) + 5;
ツールを使用して、このコードを次のようにマイグレーションします。
myStringNumber string = "5";
myResult decimal(7,2);
myResult = myStringNumber as decimal() + 5;
DECIMAL 型に長さを追加します
myStringNumber string = "5";
myResult decimal(7,2);
myResult = myStringNumber as decimal(7,2) + 5;

変数または関数の名前変更

1 つの論理パーツ内で、変数と関数が同じ名前を持つことはできません。 変数または関数の名前を変更してください。

呼び出し先プログラムへの括弧の追加

call ステートメントのターゲットであるプログラムには、パラメーター・リストがなければなりません。このパラメーター・リストは空であっても構いませんが、パラメーター・リストであることを示すための括弧が必要になりました。

古くなったサービス参照の削除

マイグレーション・ツールは古くなったサービス参照を、マイグレーションするプロジェクトのメタデータ・ファイルから削除しようとします。 ただし、以下の状況のいずれかに該当する場合は、その参照を削除できません。
  • IBM® WebSphere® Application Server 開発ツールのオプションのコンポーネントをインストールしていなかったか、使用しているバージョンに IBM WebSphere Application Server および関連する開発ツールが含まれていなかった。
  • Java™ コードを、マイグレーション・ツールが実行されなかったプロジェクトに生成中である。
上記のいずれの場合も、以下のように、古くなったサービス参照をメタデータ・ファイルから手動で削除する必要があります。
  • EGL Web プロジェクトの場合、サービス参照を Web デプロイメント記述子ファイルに手動で追加した場合は、そのファイルから EGL で生成したサービス参照を削除し、手動で追加した参照を保存してください。 サービス参照を手動でファイルに追加していない場合は、そのファイルを削除する必要があります。 J2EE のほとんどのバージョンで、Web デプロイメント記述子は web.xml という名前であり、プロジェクトの WebContent/WEB-INF フォルダーにあります。J2EE 1.3 では、ファイルは webservicesclient.xml という名前で、同じ場所にあります。
  • 同様に、EGL で生成したすべてのサービス参照を、ibm-webservicesclient-ext.xmi ファイルおよび ibm-webservicesclient-bnd.xmi ファイルから削除します。これらのファイルは、WebContent/WEB-INF にあります。 これらのファイルへの参照を手動で追加していない場合は、ファイルを削除できますが、必須ではありません。

JSF ハンドラー内の変数型の変更

JSF ハンドラー内の変数で、selectType プロパティーが index に設定されている場合、その変数は INT 型でなければなりません。

selectFromListItem プロパティーの使用

変数が selectFromListItem プロパティーを持つ場合、そのプロパティーの値は、レコード配列やレコード内のプリミティブ変数の配列にはできません。 有効な型は、データ・テーブル列か、レコード内ではないプリミティブ変数の配列です。 レコード配列またはレコード内のプリミティブ変数の配列を選択オプションのリストとして使用するには、 selectedRowItem プロパティーまたは selectedValueItem プロパティーを使用してください。

属性の取得または設定における一貫性のあるレコードまたは配列型の 使用

以下の j2eeLib GET 関数が返す値を受け取るために使用するレコードまたは配列の型は、対応する SET 関数でその属性を設定するために使用された引数と同じ型でなければなりません。
  • getRequestAttr()
  • getSessionAttr()
  • getApplicationAttr()

ランタイム・エラーにならないためには、getRequestAttr() が返す値は、setRequestAttr() で使用した引数と同じ型でなければ なりません。

EGL V7.0 では、ヒープ・ストレージ要件を下げるために、 オブジェクトからビジネス・データのみを保存します。

下線付きの生成された名前の変更

Java 名では無効な文字が EGL 名に含まれる場合に固有の名前を保持するためのアルゴリズムが変更されました。下線文字 (「_」) が無効文字の 16 進値の前に配置されるようになりました。 下線文字を含む EGL 名から生成される Java 名は、16 進値 005 を含む ようになりました。

EGL では、例えば、EGL 名 under_score_test に対して 次の Java 名を生成します。
  • バージョン 6: under_score_test
  • バージョン 7: under_005fscore_005ftest

すべてのプログラムをバージョン 7 で再生成すれば、EGL プログラム間でこれが問題を引き起こすことはありません。一方、EGL プログラムを起動するすべての非 EGL プログラムは、下線を含むすべての名前で新しい形式を使用するように変更する必要があります。これには、EGL サービスや Jasper レポートの非 EGL クライアントを含みます。

構造化レコード・パラメーター用に生成される WSDL への変更

バージョン 7 では、サービス・パラメーターの WSDL 定義を生成するアルゴリズムにより、 構造化レコードについてこれまでと異なるコードが生成されます。 そのサービスを呼び出すすべてのクライアントは、新しいパラメーター名でサービスを呼び出すように変更しなければなりません。

「in」関数パラメーターにおける配列の動作の解決

配列のパラメーター定義で in 修飾子を 使用する場合、引数要素の型は、パラメーター要素の型と同じである 必要があります。

例えば、 次のシーケンスは EGL バージョン 6 では有効でしたが、バージョン 7 では、 無効であるとタグ付けされます。
function main();
  arrayArg CHAR(50)[ ] = ["A", "B", "C"];
  showArray (arrayArg);  // invalid statement in Version 7
end

function showArray (arrrayParm CHAR(100) [ ] in)
  i, iEnd INT;
  iEnd = size (arrayParm);
  for (i from 1 to iEnd)
    writeStdOut (arrayParm[i]);
  end
end

arrayParmin 修飾子は、 関数が呼び出されたときにそのパラメーター用の一時的なローカル変数が割り振られ、関数に入る際にその 一時的な変数に引数が代入されることを意味します。バージョン 6 では、この代入の結果、 引数配列のコピーが行われていました。バージョン 7 では、この代入は、 配列の参照になっています。バージョン 7 での配列の代入は、同じ要素型の配列間で実行される必要があるため、main() での showArray() の呼び出しは、バージョン 7 ではエラーであるとフラグが立てられます。

この状態は、以下の 2 つの方法で解決できます。
  1. move ステートメントを使用して、パラメーター宣言と互換性のある、引数の一時コピーを作成する。
    function main() ;
      arrayArg CHAR(50)[ ] = ["A", "B", "C"];
      	tempArrayArg CHAR(100) [ ];
    	  move arrayArg to tempArrayArg;
    	  showArray (tempArrayArg);
    	end
  2. 配列要素の型を変更して統一することにより、関数呼び出しごとに新しい配列が 作成されないようにする。次の例では、カスタマー・アプリケーションを Java で生成 するため、要素の型を STRING に変更してあります。Java では、STRING 型のほうが CHAR 型 よりパフォーマンスに優れています。
    function main();
      arrayArg STRING[ ] = ["A", "B", "C"];
      showArray (arrayArg);  // invalid statement in Version 7
    end
    
    function showArray (arrrayParm STRING[ ] in)
      i, iEnd INT;
      iEnd = size (arrayParm);
      for (i from 1 to iEnd)
        writeStdOut (arrayParm[i]);
      end
    end

リンクの拡張子の変更

JSF ページへのリンクは、 forward to url ステートメントや、displayUse = hyperlink を指定して定義されている変数の action プロパティーに指定されます。EGL バージョン 7 マイグレーション・ツールでは、その URL またはアクションが .jsp で終わるリテラル値として指定されている場合、リンクの拡張子を .jsp から .faces に自動で変更します。 リンクの値が .jsp で終了されていないか、リテラルではなく変数によって指定されている値の場合は、この変更を手動で行う必要があります。

defaultDateFormat ビルド記述子オプションの変更

バージョン 7 でのストリングから日付への変換では、ストリングにおける日、月、および年の順序は、defaultDateFormat ビルド記述子オプションにおける日、月、および年の順序と同じである必要があります。このビルド記述子オプションが指定されていないときのデフォルト値については、defaultDateFormat (ビルド記述子オプション)を参照してください。

バージョン 6 では、変換アルゴリズムは yyyyMMdd 形式を想定しています。その結果、明示的に defaultDateFormat ビルド記述子オプションを yyyyMMdd に設定しない限り、「20050810」などの日付値はバージョン 7 でエラーを引き起こす可能性があります。

印刷書式のビルド記述子の定義

VisualAge® Generator および EGL バージョン 6 では、印刷書式のデフォルトの小数点文字と区切り文字は、ランタイム・インストール済み環境に対して指定された言語依存のオプション・モジュールから取得されました。バージョン 7 以降、decimalSymbol ビルド記述子オプションおよび separatorSymbol ビルド記述子オプションがそれらの文字を決定します。バージョン 7 以降では、decimalSymbol オプションのデフォルト値はピリオド、separatorSymbol オプションのデフォルト値はコンマです。これらの値がその場所に適していない場合は、これらのビルド記述子オプションを明示的に設定する必要があります。

他のビルド記述子オプションの検討

最近のバージョンの EGL では、時間とともに変化する動作に影響を及ぼすいくつかのビルド記述子オプションが導入されています。マイグレーション元の EGL バージョンの観点から、これらを検討してください。

フィードバック