RPG

61. 活動化グループとは?

ILE のコンパイルにおいて活動化グループ(ACTGRP) というパラメータがある。
活動化グループとはそのオブジェクトの生存期間を指す。
ACTGRP=*NEW の場合はオブジェクト(プログラム)は呼び出される都度、初期化される。
ACTGRP=*CALLER の場合は呼び出し元の親プログラムが存続しているあいだは、
そのままメモリーに留まり続ける。

例えば親PGM Aから *CALLER で定義されている*PGM または *SRVPGM である
Bが呼び出されるものとする。
Aから初めてBが呼び出されたときはBは初期化されて *INZSR なども実行される。
Bから RETURN命令によってAに戻り、やがて再びBが呼び出されたとする。
このとき呼び出されたBは初期化されずに保存されていたメモリーからロードされるので
Bの中で使用していた変数値の前に使用したままである。
このように2回目の呼び出しはメモリーから行われるので呼び出しにかかるオーバー・ヘッドは
ほとんど無い。
しかし*INZSRなどの初期化ルーチンは実行されないので,このことをあらかじめ考慮した
処理を組んでおく必要がある。
また *CALLER 以外にもユーザー定義の任意の名前で活動化グループを定義することもできる。

活動化グループとはこのような性質を持つところから、CRTPGM の活動化グループの初期値は
*NEW となっているし、CRTSRVPGM の活動化グループは *CALLER となっているのも当然のことである。

このように活動化グループは ILEによって複数のモジュールをバインドする構造に対して
生存期間の制御の役目を成す。
このことを利用して *CALLER としてコンパイルされた CGI のことを パーシスタントCGI と呼ぶ。
パーシスタントCGI の親PGM は HTTPサーバーである。
*CALLER として CGI を作成すると2回目以降の呼び出しはかなり迅速なものとなり、原理的にはこれは
JSP や Servlet と同じことになる。
しかしパーシスタントCGI の呼び出し元は HTTPサーバーであるからパーシンタントCGI を再コンパイルすると
HTTPサーバーを一旦、停止させてから再起動する必要が出てくる。
HTTPサーバーはその性格上、停止は簡単に行うものではない。
また予期できないような挙動も発生するのでかなり慎重な事前の検証が必要である。
パーシスタントCGI の使用には十分な検証を行うことをお勧めする。