ジョブを作成して定期実行する

このCookBookでは、以下の開発モデルでジョブを作成する方法と、作成したジョブを指定した時刻に定期実行する方法を紹介します。
・スクリプト開発モデル
・JavaEE開発モデル

いずれのモデルでもジョブ処理で取得可能な以下の2つを使ったプログラムを作成します。
・アカウントコンテキスト
・ジョブスケジューラコンテキスト

完成イメージ

null
null

完成サンプル

以下の完成サンプルをダウンロードしてご活用ください。

e builder プロジェクト : im_cookbook_111849_create_job.zip
imm ファイル : im_cookbook_111849_create_job-1.0.0.imm

ローカル環境で実行させる場合は、以下のURLにアクセスしてください。
http://localhost:8080/imart/tenant/job_scheduler/job_maintenance
なおベースURLである以下の部分は、環境に合わせて適宜変更してください。
http://localhost:8080/imart

レシピ

  1. プログラムを作成する
    ・スクリプト開発モデル編
    ・JavaEE開発モデル編
  2. 依存関係を設定する
  3. プログラムをジョブとして登録する
  4. ジョブを定刻実行する
  5. ジョブの実行結果を確認する
  6. ジョブネットモニタでジョブの実行結果を確認する

1. プログラムを作成する

はじめに e Builder のモジュールプロジェクト内に実行するプログラムを作成します。
モジュールの作成方法については「アプリケーション開発ガイド - モジュール・プロジェクト作成」を参照してください。

以下の4つをコンソールに表示するサンプルプログラムを作成します。

アカウントコンテキストから以下の値を取得して表示します。
・テナントID
・ユーザコード

ジョブスケジューラコンテキストから以下の値を取得して表示します。
・ジョブID
・ジョブネットID

スクリプト開発モデル編

スクリプト開発向けim-BizAPI - AccountContextオブジェクト
スクリプト開発向けim-BizAPI - JobSchedulerContextオブジェクト
スクリプト開発向けim-BizAPI - JobDetailオブジェクト

  1. 「scriptjob.js」を以下の場所に作成してください。
    src/main/jssp/src/im_cookbook_111849/scriptjob.js
  2. プログラムを記述します。
    ジョブを実行するためのexecute関数を記述します。
    スクリプト開発モデル プログラミングガイド - ジョブスケジューラ
function execute() {

  // AccountContext
  let accountContext = Contexts.getAccountContext();
  // JobSchedulerContext
  let jobSchedulerContext = Contexts.getJobSchedulerContext();


  // From the accountContext
  // To get the tenantID
  let tenantid = accountContext.tenantId;
  // To get the userCode
  let usercd = accountContext.userCd;


  // From the jobSchedulerContext
  // To get the jobID
  let jobid = jobSchedulerContext.jobDetail.id;
  // To get the jobnetID
  let jobnetid = jobSchedulerContext.jobnet.id;


  // To view the acquired value
  Debug.console(tenantid);
  Debug.console(usercd);
  Debug.console(jobid);
  Debug.console(jobnetid);
  return {
     status : 'success' ,
     message : 'The job was executed successfully.'
  };
}

JavaEE開発モデル編

JavaEE開発向けim-BizAPI - インターフェースAccountContext
JavaEE開発向けim-BizAPI - インターフェースJobSchedulerContext
JavaEE開発向けim-BizAPI - クラスJobDetail

  1. 「JavaJob.java」を以下の場所に作成してください。
    src/main/java/jp/co/intra_mart/cookbook/im_cookbook_111849/JavaJob.java
  2. プログラムを記述します。
    ジョブの実行処理を記述するためのexecuteメソッドを記述します。
    TERASOLUNA Server Framework for java (5.x) プログラミングガイド - ジョブスケジューラ
package jp.co.intra_mart.cookbook.im_cookbook_111849;

import jp.co.intra_mart.foundation.context.Contexts;
import jp.co.intra_mart.foundation.context.model.AccountContext;
import jp.co.intra_mart.foundation.job_scheduler.Job;
import jp.co.intra_mart.foundation.job_scheduler.JobResult;
import jp.co.intra_mart.foundation.job_scheduler.JobSchedulerContext;
import jp.co.intra_mart.foundation.job_scheduler.exception.JobExecuteException;

public class JavaJob implements Job {

    public JavaJob() {
    }

    public JobResult execute() throws JobExecuteException {


            // AccountContext
            final AccountContext accountContext = Contexts.get(AccountContext.class);

            // To get the tenantID
            final String tenantid = accountContext.getTenantId();
            // To view the tenantID
            System.err.println(tenantid);

            // To get the userCode
            final String userCd = accountContext.getUserCd();
            // To view the userCode
            System.err.println(userCd);


            // JobSchedulerContext
            final JobSchedulerContext jobSchedulerContext = Contexts.get(JobSchedulerContext.class);

            // To get the jobID
            final String jobid = jobSchedulerContext.getJobDetail().getId();
            // To view the jobID
            System.err.println(jobid);

            // To get the jobnetID
            final String jobnetid = jobSchedulerContext.getJobnet().getId();
            // To view the jobnetID
            System.err.println(jobnetid);


            // Processing result:success
            return JobResult.success("The job was executed successfully.");
    }
}

2. 依存関係を設定する

  1. モジュールの依存関係に、「im_tenant」を設定してください。
    依存関係の設定方法は、「アプリケーション開発ガイド - module.xml」を参照してください。

3. ジョブを新規作成する

以下の内容でジョブを作成してください。ジョブの作成方法は「テナント管理者操作ガイド - ジョブを設定する」を参照してください。

  1. 「カテゴリ新規作成」を行ってください。
    項目 設定値(スクリプト) 設定値(JavaEE)
    カテゴリID script_jobcategory java_jobcategory
    カテゴリ名 ScriptSample JavaSample
  2. 「ジョブ新規作成」を行ってください。以下の内容を入力してください。
    項目 設定値(スクリプト) 設定値(JavaEE)
    ジョブID script_job java_job
    ジョブ名 ScriptJob JavaJob
    実行言語 JavaScript Java
  3. 実行プログラムを入力してください。
    開発モデル 設定値
    スクリプト im_cookbook_111849/scriptjob
    JavaEE jp.co.intra_mart.cookbook.im_cookbook_111849.JavaJob
  4. 「新規作成」クリックしてください。

4. ジョブを定刻実行する

スクリプト開発モデルで作成したジョブとJavaEE開発モデルで作成したジョブを同時に実行するジョブネットを作成します。以下の内容でジョブネットを作成してください。ジョブネットの作成方法は「テナント管理者操作ガイド - ジョブネットを設定する」を参照ください。

  1. 「カテゴリ新規作成」を行ってください。
    項目 設定値
    カテゴリID sample_jobnetcategory
    カテゴリ名 SampleJobnet
  2. 「ジョブネット新規作成」を行ってください。
    項目 設定値
    ジョブネットID sample_jobnet_execute
    ジョブネット名 SampleJobExecute
  3. 実行ジョブに「ScriptJob」と「JavaJob」を追加してください。
  4. 祝日や会社の予定を設定したカレンダーを作成するで作成したサンプルカレンダーを使用し、トリガを設定します。営業日指定を選択し、「新規登録」をクリックしてください。
  5. サンプルカレンダーを選択してください。
  6. 現在時刻から3分後にジョブが実行されるよう、時と分を設定してください。
    例:現在時刻がAM9:07の場合

    項目 設定値
    9
    10

※注意
ジョブを実行する日時がカレンダー上で休日の場合、ジョブは実行されません。

  1. 「決定」をクリックしてください。
  2. 営業日指定の有効チェックボックスにチェックを入れてください。
  3. 「新規作成」をクリックしてください。

--------------3分お待ちください----------------

5. ジョブの実行結果を確認する

--------------3分後----------------

  1. コンソールにジョブ実行結果が以下の通り出力されていれば成功です。

スクリプト開発モデルのジョブ実行結果

表示項目 表示内容 備考
テナントID (default) ジョブを実行したテナントのテナントID
ユーザコード im_job ※「im_job」はジョブ実行時の固定値です
ジョブID script_job -
ジョブネットID sample_jobnet_execute -

JavaEE開発モデルのジョブ実行結果

表示項目 表示内容 備考
テナントID (default) ジョブを実行したテナントのテナントID
ユーザコード im_job ※「im_job」はジョブ実行時の固定値です
ジョブID java_job -
ジョブネットID sample_jobnet_execute -

null
null

6. ジョブネットモニタでジョブの実行結果を確認する

  1. 「ジョブネットモニタ一覧」からジョブネットモニタ一覧画面を表示してください。
  2. 該当行をクリックしてください。

複数のジョブが設定した時刻に実行されたことが確認できました。
null