ビジネス・プロセスのライフ・サイクル
プロダクションが起動するたびに、InterSystems IRIS によってそのプロダクションのパブリック・アクター・プールが作成されます。ActorPoolSize 設定の値によって、プール内のジョブ数が決定されます。
アクター・プールの各ジョブ内には、Ens.ActorOpens in a new tab オブジェクトのインスタンスがあり、このインスタンスによって、ビジネス・プロセスによるジョブの使用が管理されます。この Ens.ActorOpens in a new tab インスタンスは、アクターと呼ばれます。
プロダクションのビジネス・プロセスは、Ens.Actor と呼ばれるパブリック・メッセージ・キューを共有できます。このパブリック・キューは、独自の専用キューを持たないプロダクション内の任意のビジネス・プロセスに送信されるすべてのメッセージのターゲットになります。アクターは、ビジネス・プロセスのホスティングから解放されているときは、いつでも Ens.Actor キューをリッスンしています。Ens.Actor キューに要求が着信すると、解放されている任意のアクターが、その要求で指定されているビジネス・プロセスをホスティングするためのジョブを割り当てることがあります。Ens.Actor キューに着信した要求は、着信した順番で処理されます。連続した要求がある場合は、次に空いているアクターによって、次々に処理されていきます。
プールの詳細は、"プロダクションの構成" の "プール・サイズとアクター・プール・サイズ" を参照してください。
ビジネス・サービスやビジネス・オペレーションのライフサイクルとは異なり、ビジネス・プロセスの OnInit メソッドおよび OnTearDown メソッドは、ビジネス・プロセスの開始時または停止時に呼び出されません。これらのメソッドは、要求がビジネス・プロセス (InProc または Queued) によって処理されるたびに実行されます。ビジネス・プロセス・クラスの OnProductionStart メソッドを実装すると、プロダクションの開始時またはビジネス・プロセスの再起動時にカスタム・コードを実行できます。このクラスの OnProductionStop メソッドは、プロダクションの停止時に呼び出されます。
パブリック・キュー内のライフ・サイクル
パブリック・キューを使用するビジネス・プロセスのライフ・サイクルを以下に示します。
-
ビジネス・プロセスに対する最初の要求が送信されます。要求メッセージが Ens.Actor キューに着信します。
-
いずれかのアクターが空き状態になると、そのアクターは直ちに Ens.Actor キューから要求メッセージを取り出します。
-
そのアクターは、適切なビジネス・プロセス・クラスの新しいインスタンスを作成します。ビジネス・プロセスの OnInit() メソッドが呼び出されます。アクターは、ビジネス・プロセスの設定に最新の値を入力し、そのインスタンスの OnRequest() メソッドを呼び出します。これで、ビジネス・プロセス・インスタンスが継続します。
-
ビジネス・プロセス・インスタンスが継続中でも、アクティブでない場合 (例えば、入力やフィードバックを待っている場合) は、通常、インスタンス化を行ったアクターに制御が戻されます。この場合、アクターは以下の処理を行います。
-
アクターがビジネス・プロセス・インスタンスを中断します。
-
アクターがインスタンスの現在の状態をディスクに保存します。
-
アクターがそのジョブをアクター・プールに返します。
-
継続中のビジネス・プロセスにアクターが割り当てられておらず、そのビジネス・プロセスに対して下位要求または応答が着信した場合は (例えば、予測している入力またはフィードバックが着信した場合は)、常に以下のシーケンスが発生します。
-
いずれかのアクターが空き状態になると、そのアクターが Ens.Actor キューから新しい要求メッセージまたは応答メッセージを取り出します。
-
アクターは、対応するビジネス・プロセス・オブジェクトをディスクからリストアし、そのすべてのステータス情報を復元します。
-
アクターは、状況に応じて、OnRequest() または OnResponse() というインスタンス・メソッドを呼び出します。
-
ビジネス・プロセス・インスタンスが実行を完了したら、その現在のアクターがその OnComplete() メソッドを呼び出し、そのインスタンスを [完了したか] ステータスでマーキングします。また、アクターはそのジョブをアクター・プールに返します。これで、このビジネス・プロセス・インスタンスにイベントが送信されなくなります。ビジネス・プロセスの OnTearDown メソッドが呼び出されます。
プライベート・キュー内のライフ・サイクル
または、ビジネス・プロセスに専用キューを割り当てて、パブリック Ens.Actor キューを迂回するように構成できます。専用キューを持つビジネス・プロセスのライフ・サイクルは、パブリック・キューの説明にあるもの同様に実行されますが、以下の点が異なります。