この章では、スケジュールに基づくジョブを作成する方法について説明します。次のトピックについて説明します。
ここでは、スケジュールベースのジョブについて説明し、ジョブの実装例を示します。
スケジュールベース(スケジュールドリブン)のジョブは、スケジュールと関連付けられます。つまり、ジョブは時間に基づいて実行されます。反対に、トリガーと関連付けられたジョブはイベントベースで、通常はアプリケーションが開始したイベントによって起動されます。スケジュールの有効期限が過ぎると、タイムアウトが生成されます。これが、ジョブの実行のトリガーとして使用されます。
スケジュールベースのジョブには、次の2つのタイプがあります。
単一アクション・スケジュール
このタイプのスケジュールには単一の有効期限があり、ジョブを一度だけ実行する場合に使用します。
繰返しスケジュール
このタイプのスケジュールには複数の有効期限があり、ジョブを繰り返し実行する場合に使用します。
単一アクション・スケジュールは、oracle.ias.scheduler.Schedule
クラスを使用して実装されます。このタイプのスケジュールには、expiration
と呼ばれる属性が1つあります。この属性はスケジュールの最初の有効期限です。
例3-1 特定の時間にジョブを発行
例2-1からの例を引き続き使用し、開発者と管理者は、必要に応じてバックアップ・ジョブを実行する必要があるとします。それには、単一アクション・スケジュールを使用します。次のコード例は、ジョブに単一アクション・スケジュールを設定して発行する方法を示しています。
// set up the properties java.util.Properties properties = new Properties(); properties.put("SourceDirectory","/mnt/data"); properties.put("DestinationDirectory","/mnt/backup"); // set up the schedule, single-action at midnight Schedule schedule = new Schedule(); Calendar midnight = Calendar.getInstance(); midnight.set(Calendar.HOUR_OF_DAY,24); midnight.set(Calendar.MINUTE,0); midnight.set(Calendar.SECOND,0); schedule.setExpiration(midnight); // submit the job scheduler.add("file backup job, runs at midnight", new BackupJob().getClass().getName(), schedule, properties);
固定間隔スケジュール
このタイプのスケジュールではoracle.ias.scheduler.IntervalSchedule
クラスを使用して、ジョブを固定間隔で繰り返します(一週間に1度、毎週金曜日の午前0時に実行されるジョブなど)。
固定遅延スケジュール
このタイプのスケジュールではoracle.ias.scheduler.IntervalSchedule
クラスを使用して、2つのジョブの実行の間に固定間隔を設定してジョブを繰り返します(1つのジョブの実行終了と次のジョブの実行開始までの間隔が1週間のジョブなど)。
iCalendar繰返しスケジュール
このタイプのスケジュールではoracle.ias.scheduler.RecurSchedule
クラスを使用して、定期的な間隔では繰り返されないスケジュールでジョブを繰り返します(毎月1日など。各月の日数は異なるため、固定間隔ではありません)。
属性 | 説明 |
---|---|
expiration
|
最初の有効期限 |
interval
|
有効期限間の間隔(ミリ秒で指定) |
end date
|
スケジュールの終了日時 |
例3-2 固定間隔スケジュールの繰返しジョブの発行
例3-1を発展させて、開発者と管理者が週に1度バックアップ・ジョブを実行する必要があるとします。この場合、次のコード例に示すように、固定間隔の繰返しスケジュールを使用します。
// set up the properties java.util.Properties properties = new Properties(); properties.put("SourceDirectory","/mnt/data"); properties.put("DestinationDirectory","/mnt/backup"); // set up the schedule, repeats every week IntervalSchedule schedule = new IntervalSchedule(); schedule.setInterval(IntervalSchedule.EVERY_WEEK); // submit the job scheduler.add("file backup job, runs at midnight", new BackupJob().getClass().getName(), schedule, properties);
例3-1を発展させて、開発者と管理者がより定期的に(一週間間隔など)バックアップ・ジョブを実行する必要があるとします。この場合、次のコード例に示すように、固定遅延の繰返しスケジュールを使用します。
例3-3 固定遅延スケジュールの繰返しジョブの発行
// set up the properties java.util.Properties properties = new Properties(); properties.put("SourceDirectory","/mnt/data"); properties.put("DestinationDirectory","/mnt/backup"); // set up the schedule, repeats every week IntervalSchedule schedule = new IntervalSchedule(); schedule.setInterval(IntervalSchedule.EVERY_WEEK); schedule.setFixedDelay(true); // submit the job scheduler.add("file backup job, runs at midnight", new BackupJob().getClass().getName(), schedule, properties);
iCalendar繰返しスケジュールの属性は、RFC2445「Internet Calendaring and Scheduling Core Object Specification (iCalendar)」に基づきます。詳細は、付録Aを参照してください。
例3-4 iCalendar繰返しスケジュールの繰返しジョブの発行
例3-1を発展させて、開発者と管理者が月に1度、毎月1日にバックアップ・ジョブを実行する必要があるとします。この場合、次のコード例に示すように、iCalendar繰返しスケジュールを使用します。
// set up the properties java.util.Properties properties = new Properties(); properties.put("SourceDirectory","/mnt/data"); properties.put("DestinationDirectory","/mnt/backup"); // set up the schedule, repeats on the first day of every month RecurSchedule schedule = new RecurSchedule("freq=monthly;bymonthday=1;"); // submit the job scheduler.add("file backup job, runs at midnight", new BackupJob().getClass().getName(), schedule, properties);
ここでは、再試行期間と実行しきい値について説明し、スケジュールされたジョブとの関係をそれぞれ例に示します。
実行に失敗したジョブは一定期間後に再試行できます。この期間を再試行期間と呼び、ミリ秒で指定します。ジョブ定義でこの期間が設定されていない場合、ジョブは再試行されません。図3-1に例を示します。
この図は、ジョブが毎日午前0時に実行される繰返しスケジュールを表しています。再試行期間は3時間です。つまり、最初のジョブの実行に失敗した場合、ジョブは3時間後の午前3時に再試行されます。午前3時の再試行も失敗した場合、このインスタンスのジョブの実行は破棄され、次にスケジュールされている実行時間(この場合は次の午前0時)までジョブは実行されません。
スケジュールされたジョブの実行が指定された時間のしきい値より遅れた場合、実行は破棄されます。このしきい値を実行しきい値と呼び、ミリ秒で指定します。ジョブ定義で実行しきい値が指定されていない場合、ジョブの実行は実行しきい値の制約を受けません。図3-2に例を示します。
ジョブは月曜日の午前0時に実行されるようにスケジュールされ、実行しきい値は6時間です。ジョブが月曜日の午前6時までに実行されない場合、この実行は破棄されます。
例3-1をさらに発展させて、例3-5では再試行期間と実行しきい値が追加されています。この例では、ジョブスケジュールされた時間の30秒以内(実行しきい値)に実行されない場合、実行は破棄されます。実行されたとしても失敗した場合には、3秒後に再試行されます(再試行期間)。
例3-5 再試行期間と実行しきい値を設定したジョブの発行
// set up the properties java.util.Properties properties = new Properties(); properties.put("SourceDirectory","/mnt/data"); properties.put("DestinationDirectory","/mnt/backup"); // set up the schedule, repeats every week IntervalSchedule schedule = new IntervalSchedule(); schedule.setInterval(IntervalSchedule.EVERY_WEEK); // submit the job scheduler.add("file backup job, runs at midnight", new BackupJob().getClass().getName(), schedule, properties, 3000, 30000);
ジョブ・トリガーがタイムアウトとは異なる場合、ジョブ・スケジューラは実行しきい値をチェックしますか。
いいえ。実行しきい値は時間に基づくため、タイムアウト以外の通知では、ジョブ・スケジューラは実行しきい値をチェックしません。
ジョブの実行しきい値や再試行期間は更新できますか。
現在は更新できません。ジョブが、作成時にこれらのパラメータを使用して構成されるためです。
ジョブ定義で、固定遅延スケジュールをトリガーと組み合せて発行できますか。
いいえ。固定遅延スケジュールの期間は、前のジョブの実行完了に基づいて設定されます。トリガーを使用する場合、この期間は、トリガーで指定された1つまたは複数の通知の受信がベースとなるため特定できません。