第 5 章 リモート実行機能を利用する
5.7 プロセス型プログラムからスレッド型プログラムへの
スレッド型プログラムへの移行方法
既存のプロセス型プログラムからスレッド型プログラムへの移行は、容易に行 えます。ただし、翻訳、リンク方法や実行環境の変更が必要となります。ま た、場合によっては、若干のプログラム修正が必要です。以下に、移行の際の 注意点などについて説明します。なお、スレッド型プログラムとして使用でき るプログラムは、COBOL プログラムだけです。
5.7.1 プログラム修正
以下の機能を使用している既存のプロセス型プログラムをスレッド型プログラ ムに移行する場合は、プログラム修正が必要です。
• 環境変数操作
スレッド型プログラムでは1つのプロセスで複数のスレッドが動作しま す。そのため、環境変数の内容を変更すると、他のアプリケーションに 影響を及ぼす場合があります。また、環境変数の内容を参照する場合 も、内容そのものが不変であることが一切保証されないので、アプリ ケーションの動作が意図したものと異なる場合があります。
• 引数の受け渡し方法
プロセス型プログラムの場合、プログラム起動時に指定された引数
(MeFt/Webクライアントのargument プロパティ(キーワード)に指定 された文字列)を受け取るには、コマンド行引数の操作機能を使用しま す。一方、スレッド型プログラムは、副プログラムとして C 呼び出し 規約に従って呼び出されます。そのため、プログラム起動時に指定され た引数を受け取るには、手続き部の見出しのUSING 指定にデータ名を 記述する必要があります。
なお、スレッド型プログラムで受け取れる引数の数は、1個だけです。
• プログラムの終了
プロセス型プログラムでは、EXIT PROGRAM またはSTOP RUN を使用 しますが、スレッド型プログラムでは、EXIT PROGRAM を使用してく ださい。スレッド型プログラムでは、STOP RUN は使用しないでくださ い。
詳細については、「NetCOBOL 使用手引書」の「10.1.2 各種 呼出し規約の違い」および「10.3.2 C プログラムから
COBOL プログラムを呼び出す方法」を参照してください。
5.7.2 翻訳、リンク方法について
既存のプロセス型プログラムをスレッド型プログラムに移行するには、再翻訳 および再リンクが必要です。
• 翻訳
スレッド型プログラムの翻訳では、プロセス型プログラムと異なり、翻 訳オプションTHREAD(MULTI) を指定してください。
プロセス型プログラムの主プログラムには翻訳オプションMAIN を指 定しなければなりませんが、スレッド型プログラムに移行する際には、
DLL を作成するため、翻訳オプションMAIN を指定しないでください。
以下に翻訳コマンドを使用して翻訳するときの例を示します。
• リンク
スレッド型プログラムは、オブジェクトをリンクしてDLL を作成しな ければなりません。
以下にリンクコマンドを使用してリンクするときの例を示します。
リンク時にはF3BICBDM.obj をリンクし、/ENTRY:COBDMAIN を指定 してください。
5.7.3 実行
• 実行用初期化ファイルの設定
スレッド型プログラムでは、実行用の初期化ファイルの内容は、共通部 だけで構成されます。セクションに記述された情報は無視されます。こ のため、既存のプロセス型プログラムをスレッド型プログラムに移行す る場合は、セクションに記述された情報を共通部に指定してください。
以下にファイル識別名を環境変数情報名として、ウィンドウ情報ファイ ル名およびプリンタ情報ファイルを設定する例を示します。
COBOL32 -WC,"THREAD(MULTI)" COB.cob
LINK /DLL COB.obj F3BICBDM.obj F3BICIMP.lib KERNEL32.LIB /ENTRY:COBDMAIN /OUT:COB.dll
翻訳オプション、リンク方法の詳細については、「NetCOBOL 使用手引書」を参照してください。
実行用の初期化ファイルの設定については、「NetCOBOL 使 用手引書」を参照してください。
[A]
DSPFILEA=MEFWRCA PRTFILEA=MEFPRCA [B]
DSPFILEB=MEFWRCB PRTFILEB=MEFPRCB
例)COBOL85.CBR COBOL85.CBR DSPFILEA=MEFWRCA PRTFILEA=MEFPRCA DSPFILEB=MEFWRCB PRTFILEB=MEFPRCB
また、プログラムを起動したあとに、実行用の初期化ファイルの内容を 変更した場合は、MeFt/Web サービスプログラム(MeFt/Web Service)を 再起動してください。サービスプログラムを再起動するには、コント ロールパネルの[管理ツール]の中にある[サービス]アイコンを使っ て停止してから開始します。
サービスプログラムを再起動しないと、変更した実行用の初期化ファイ ルの内容は有効になりません。
• 環境変数の設定
スレッド型プログラムでは、MEFTWEBDIR などの環境変数を
environment プロパティやバッチコマンドに指定できません。そのため、
環境変数は、実行用の初期化ファイル(COBOL85.cbr)またはシステム の環境変数に指定してください。なお、システムの環境変数に設定した 場合は、設定後、システムを再起動してください。
COBOL85.cbr とシステム環境変数の両方に同一の環境変数が設定され
ている場合は、COBOL85.cbr の方が有効になります。
• その他の注意事項
- スレッド型プログラムを起動したあとに、スレッド型プログラム を入れ替えるために、MeFt/Web サービスプログラム(MeFt/Web Service)を再起動してください。
- COBOL 診断機能の診断レポートファイルは、MeFt/Web のインス
トールディレクトリに出力されます。ファイル名は、アプリケー ションの名前を「アプリケーション名_ エラー発生時間」に変更 し、拡張子を「LOG」に置き換えた名前になります。
サービスの起動/停止は、コントロールパネルからの操作 以外に、以下のコマンドでコマンドプロンプトやバッチ ファイルから実行することが可能です。
停止 > net stop MeFtWebService 起動 > net start MeFtWebService