記事
· 2020年7月26日 6m read

Interoperability機能を使った常駐プロセスの作り方

はじめに

システム開発では、集計作業や他システムとの連携など、数十秒ごとにバックグラウンドで処理を実行する、常駐プロセスが必要になるケースが多々あるかと思います。

Cachéでは、Jobコマンドを使って常駐プロセスを作成しますが、実際にシステムを安定稼働させるには、以下の監視の仕組みが必要でした。

  • 常駐プロセスの監視 常駐プロセス起動時にロックをかけ、二重起動を防止したり、プロセスが起動しているかどうかを監視する
  • ログ 常駐プロセスの処理状況や発生したエラーを記録し、処理が行われているどうかを監視する

IRISの場合、Interoperabilityにはこれらの機能が装備されています。したがって、Interoperabilityの機能を使えば、簡単に常駐プロセスを起動、監視することができます。

常駐プロセスの作り方

常駐プロセスの作成には以下の作業を行います。

  1. ビジネスサービスの作成 定期的に処理を行うビジネスサービスと呼ばれるクラスの作成
  2. 常駐プロセスの処理の記述 作成したビジネスサービスに、実施したい処理を記述
  3. プロダクションの作成 起動したい常駐プロセスを設定、監視するプロダクションの作成

1.ビジネスサービスの作成

スタジオを起動、常駐プロセスを実行するネームスペースに接続し、「ファイル」メニューの「新規作成...」をクリックします。

以下のダイアログが表示されますので、「カテゴリ」欄の「プロダクション」をクリックし、「テンプレート」欄の「ビジネスサービス」をクリックし、「OK」ボタンをクリックします。

以下のウィザードが表示されますので、クラス作成時と同様に、「パッケージ名」「クラス名」を入力し、「次へ」ボタンをクリックします。

以下のようにインバウンドアダプタを選択する画面が表示されますので、「Ens.InboundAdapter」を選択し、「完了」ボタンをクリックします。

以上で、クラスを作成することができました。

2.常駐プロセスの処理の記述

1で作成されたクラスは以下のようになっています。ここで、OnProcessInput()メソッドに、定期的に実行する処理を記述します。

Class JobTest.TestJob Extends Ens.BusinessService [ Language = objectscript ]
{ 
  Parameter ADAPTER = "Ens.InboundAdapter"; 
  Method OnProcessInput(pInput As %RegisteredObject, Output pOutput As %RegisteredObject) As %Status
  {     
     return 0          <== この部分に実行する処理を記述します。
  } 
}

注意:戻り値が%Status形式になっていますので、以下の作成例を参考に戻り値を設定してください。また、テンプレートでは return 命令を使用していますが、使い慣れた quit 命令でも構いません。

作成例

  Method OnProcessInput(pInput As %RegisteredObject, Output pOutput As %RegisteredObject) As %Status
  {
    set ret=0
    set $ztrap="ERR"
    set key="" for {
        set key=$order(^OrderData(key),1,data)
        quit:key=""
        set ret=$$Job1^TestJobRtn(data)
        quit:ret'=0
    }
    quit:ret'=0 $$$ERROR(5001,"エラーが発生しました 戻り値="_ret) // 一般エラー(=5001)とエラーメッセージを返す
    quit $$$OK             // 正常終了を返す
  ERR
    quit $$$ERROR(5002,$zerror)    // Cacheエラーが発生した場合、Cacheエラー(=5002)とエラー値$zerrorを返す
  } 

3.プロダクションの作成

管理ポータルを起動し、画面上方の「ネームスペース」欄の右にある「変更」をクリックし、常駐プロセスを実行するネームスペースを選択します。

「Interoperablility」メニューの「Configure」「Production」(バージョンによっては「Interoperablility」メニューの「構成」「プロダクション」となります)をクリックします。以下のプロダクション画面が表示されます。

ここで、「New」ボタンをクリックします。

以下のウィザードが表示されますので「Package」にパッケージ名、「Production Name」にプロダクション名を入力し、「OK」ボタンをクリックします。

プロダクション画面に戻りますので、「Services」の右にある「+」ボタンをクリックします。すると以下の画面が表示されますので、「Service Class」欄に1で作成したクラスを選択します。(この例ではJobTest.TestJob)
「Enable now」をチェックし、「OK」ボタンをクリックします。

プロダクション画面に戻ると、以下のように設定したビジネスサービスが追加されていますので、そのサービスをクリックします。

クリックしますと、画面右側の設定画面が以下のように表示されますので、必要に応じて「Call Interval」欄を変更し、OnProcessInput()メソッドを呼び出す間隔(秒)を設定し、「Apply」ボタンをクリックします。

最後にプロダクション画面の「Start」ボタンをクリックし、プロダクションを起動し、常駐プロセスを起動します。

常駐プロセスの管理

常駐プロセスの管理はプロダクション画面にて行います。

プロセスの状態監視

プロダクションが起動すると、ビジネスサービスの左のインジケーターはうす緑から緑に変わり、常駐プロセスが起動されます。処理中にエラーが発生するとインジケーターは赤となります。

ログの確認方法

ビジネスサービスをクリックし、画面右の「Log」タブをクリックすると、そのビジネスサービスで発生したログが確認できます。

こんなときは?

IRISが起動したときに自動的に起動してほしい

管理ポータルから「Interoperability」メニューの「Manage」「Auto-Start Production」(バージョンによっては「管理」「プロダクション自動開始」)をクリックします。
以下の画面が表示されますので、プロダクションを作成する際に指定したプロダクション名を選択し、「Apply」ボタンをクリックします。

特定の常駐プロセス(ビジネスサービス)のみ停止、起動したい

プロダクション画面にて、停止、再起動したいビジネスサービスをダブルクリックしますと以下のダイアログが表示されます。

ここで、「Restart(再起動)」をクリックしますと、プロセスは再起動します。また、「Disable(停止)」をクリックしますとプロセスは停止します。

ご意見、ご質問をお寄せください。

記事に関して、「こんな時はどうしたらいいの?」といったご質問や「こっちのやり方の方がもっと簡単!」などご意見がございましたら、どしどしコメントをお寄せください。この記事の下にある「返信する」ボタンをクリックいただき、コメント頂ければと思います。

ディスカッション (0)1
続けるにはログインするか新規登録を行ってください