3.15.9 メッセージ制御機能に関する注意事項
- 〈この項の構成〉
(1) メッセージの出力条件
メッセージをJP1/IM - Managerへ送付するのにメッセージ制御機能を利用するには,バッチジョブ実行システムのジョブステップとして実行されている必要がある。ジョブステップとして実行されていない場合,COBOL2002で作成したアプリケーションのメッセージの入出力では,従来どおりstdin/stdoutを使用する。また,bjexm_messageコマンドまたはメッセージ出力用カタログドプロシジャでは,メッセージの出力に失敗する。
-
COBOL2002で作成したアプリケーションプログラムの場合
日本語メッセージを表示したい場合は,シフトJISで作成する必要がある。このため,EUC言語環境ではASCIIの範囲だけで利用する必要がある。ACCEPT文およびCBLTYPEサービスルーチンで受け取ることができる文字コードは,ASCII文字コード(制御文字を除く)の範囲だけである。
DISPLAY文およびCBLTYPEサービスルーチンを使用してメッセージを出力する場合には,JP1/IM - View側に出力されるメッセージにIDは付与されないため,JP1/IM - Managerの運用時にメッセージが識別できるように十分に検討して,プログラミングする必要がある。
-
bjexm_messageコマンドまたはメッセージ出力用カタログドプロシジャの場合
日本語メッセージを表示したい場合,LANG環境変数に対応するエンコードでメッセージを指定する。LANG環境変数に対応するエンコードでない場合,メッセージは正しく表示されない。応答として受け取れる文字コードはASCII文字列だけである。
また,出力するメッセージにはメッセージIDが付与されないため,JP1/IM - Managerの運用時にメッセージが識別できるように十分に配慮する必要がある。
メッセージを出力する条件を次に示す。
プログラム,コマンドまたはカタログドプロシジャ |
出力数 |
種別 |
---|---|---|
DISPLAY UPON CONSOLE文 |
2件/秒より少ない。 |
通常メッセージ |
bjexm_message -mコマンド |
||
bjex_WRITEカタログドプロシジャ |
||
ACCEPT FROM CONSOLE文 |
1件/分より少ない。 |
応答要求メッセージ |
STOP文(定数指定) |
||
CBLTYPEサービスルーチン |
||
bjexm_message -pコマンド bjexm_message -rコマンド bjexm_message -cコマンド |
||
bjex_PAUSEカタログドプロシジャ bjex_WRITERカタログドプロシジャ bjex_WRITERXカタログドプロシジャ |
(2) エラー情報
メッセージ制御機能でエラーが発生した場合,COBOL2002ではKCCC2060R-Sメッセージが出力される。また,bjexm_messageコマンドまたはメッセージ出力用カタログドプロシジャではKAKC5205-Eメッセージが出力される。KCCC2060R-SメッセージまたはKAKC5205-Eメッセージに表示される戻り値と意味を次の表に示す。戻り値とともに表示されるエラー番号の意味については,「付録D メッセージ制御機能のエラー情報」を参照のこと。
戻り値 |
意味 |
考えられる主な原因 |
対処 |
---|---|---|---|
1 |
環境が不正である。 |
JP1/AJS,またはバッチジョブ実行システムを利用して呼び出していない可能性がある。 |
該当するプログラムをJP1/AJSからバッチジョブ実行システムを通して呼び出すように変更して再実行する。 |
2 |
共有メモリまたは実行ログの操作でエラーが発生した。 |
|
スプールジョブ転送デーモンが起動していることを確認する。 |
3 |
システムコールでエラーが発生した。 |
スプールディレクトリにアクセス権がないため,ジョブログに出力できない。 |
スプールディレクトリに,実行ユーザの書き込み権限を与える。 |
4 |
JP1イベント送信時に通信エラーが発生した。 |
JP1/IM - Managerが稼働するホストに接続できない。 |
ネットワークの問題を解決する。 |
5 |
JP1イベント送信時に通信以外のエラーが発生した。 |
JP1/Baseのライブラリが見つからない。 |
JP1/Baseをインストールする。 |
(3) 運用について
-
メッセージを作成する場合,メッセージテキストによって運用側で判断ができるように設計すること。
-
JP1IM_MANAGER_HOSTパラメータで指定したJP1/IM - Managerに接続したJP1/IM - View以外から応答はできない(バッチジョブ実行システムが提供するbjexlsmsgおよびbjexchmsgコマンドでの応答はできる)。
-
JP1/IM - Managerが滞留できる応答待ちイベント数には上限があるため,これを超えない運用を設計すること。
-
応答入力ができる文字コードは,ASCII文字コード(制御文字を除く)の範囲だけである。この範囲以外の文字コードを入力した場合は,エラーメッセージが表示されるので,範囲内の文字コードで再入力すること。
-
JP1イベントの送信処理で,一時的な通信エラーまたはリソース不足などの時間を空ければ回復の見込みのあるエラーが発生した場合は,3秒間隔でリトライを繰り返す。そのため,回復の見込みのあるエラーが発生し続ける場合は,エラーを回復しないかぎり,メッセージ制御機能が終了しなくなる。
また,リトライする場合は,JP1IM_MANAGER_HOSTパラメータで指定したホストに対して,JP1/BaseがTCP/IPのコネクションの切断と新たなポートでの接続を繰り返す。コネクションが使用していたポートは,OSのMSL(Maximum Segment Lifetime)×2(秒)の間使用できなくなるため,MSLの値が大きいまたはポート数が少ない場合には,リトライによってポートが枯渇する可能性がある。そのため,MSL×2(秒)の間にメッセージ制御機能によって出力するメッセージ数,MSL,およびポート数は,次に示す条件を満たすようにすること。
n×MSL×2/3<ポート数
n:MSL×2(秒)の間にメッセージ制御機能によって出力するメッセージ数
-
メッセージ制御機能を使用してメッセージを出力するCOBOLアプリケーションは,SJISまたはASCII文字を前提としており,EUC環境では日本語メッセージが文字化けすることがある。
-
作成するメッセージ中に'\0'など画面に表示できない文字が含まれていると,COBOLアプリケーションの実行時にエラーとなる場合があるため,表示不可能文字をメッセージに含めないこと。
bjexm_messageコマンドまたはメッセージ出力用カタログドプロシジャの場合も同様にエラーとなるため,表示不可能文字を含めてはならない。