ジョブ間同期・通信マクロ実行
ジョブ間同期・通信管理機能とは
-
複数のプログラム(ジョブ)の間で同期を取らなければならなかったり、情報を送受する必要があります。
一般的にはプログラム間で情報を送受するときにはファイルを介して行います。
A−VXではジョブ間同期・通信管理機能というものがあり、この機能をCOBOLプログラム上から使って、プログラム(ジョブ)間の同期を取ったり、情報を送受したりすることができます。
そしてこの機能をCOBOLプログラム上から利用するためのものが、ジョブ間同期・通信マクロ実行というものです。
ジョブ間同期・通信管理機能の詳細は「システム管理説明書」の「3.7 ジョブ間同期・通信管理機能」を参照していただくとして、ここではジョブ間同期・通信マクロ実行を理解するための簡単な説明に留めます。
A−VXのジョブ間同期・通信管理機能には、大きく分けて2つの機能があります。
- 信号通信(信号の送受信)
-
複数のプログラム間で、信号を送ったり、受けたりできます。具体的にはプログラム間で同期を取ることができます。簡単に言うならセマフォです。
仕組みを簡単に説明します。
日曜祝日に人気の観光施設に出掛けるとたまに入場制限が行われていたりしますが、これを考えてみます。
ある施設内には100人まで入れるとして、ボールを100個用意します。そして施設内にはボールを持っていないと入れないことにします。
施設の入り口で入場者1人につき1個ずつボールを渡せば、101人目には渡すボールが無いので入ることはできません。この人は施設外で待ってもらうことになります。施設から出る人からボールを返してもらって、入口で待っている人に渡せば、その人はようやく施設に入れることになります。
このようにすれば施設内には100人までしか入ることができません。
このボールに当たるのが信号となります。
信号(ボール)を1個にすれば、何かの処理をしている間は常に1個のプログラム(ジョブ)しか動かなくなるようにできます。
たくさんのプログラム(ジョブ)が同時に動いていて、それらのジョブを連携させ細かく同期を取りながら動かしたいというようなときに役に立つような機能です。
- メッセージ通信(メッセージの送受信)
-
複数のプログラム間で、データを送ったり、受けたりできます。(このデータのことをメッセージというらしい)
例えば、プログラムAから「こんにちは!」というデータを送って、プログラムBでそのデータを受け取るということができます。
なおメッセージと言っても別に文字データしか送れないという訳ではありません。英数字項目や数字項目を送ることができます。
プログラムAがハードディスク上からひたすら読み込み、プログラムBがひたすら計算、プログラムCがデータベースにひたすら書き込み、というようなシステムを作って、プログラム間でデータを渡すのにジョブ間同期・通信機能を使ったりします。
-
A−VXでこのジョブ間同期・通信管理機能を使用するには前提条件があります。システム生成でこの機能が使用できるように設定されていないといけないのです。
システム生成で使用できるように設定されていないと、実際にプログラムを実行して機能を使用した時にエラーになります。
もし使えない状態になっていたら、設定の変更が必要となります。 設定されているかどうかは、#SGLSTで確認できます。
変更の方法は今回の説明の主題ではないので省略します。NECのマニュアル「システム導入・変更の手引き」を参照してください。
- IJCC
-
メッセージや信号といった情報を保管しておく場所をジョブ間同期・通信チャネル(Inter Job Communication Channel:IJCC)と言います。
送りたいメッセージがあればその人はIJCCにメッセージを置く、受け取りたい人はIJCCにメッセージを取りに行くというイメージです。
あるいはボールを置いておいて、何かしたい人はIJCCへ行ってボールを1個取り、作業が終わったらボールを戻しに行く、というイメージです。