この章では、ジョブを一時停止する意味とその方法について説明します。次のトピックについて説明します。
ジョブを一時停止すると、スケジュールされていたジョブがスキップされます。現在実行中のジョブは停止されません(停止するには、ジョブを取り消す必要があります)。ジョブを一時停止してもシステムからジョブ定義は削除されないため、ジョブが実行されなくなることはありません(今後実行されないようにするには、ジョブを削除する必要があります)。ジョブを一時停止するには、oracle.ias.scheduler.Scheduler.pause()
メソッドを使用します。
ジョブの取消しの詳細は、第6章を参照してください。ジョブの削除の詳細は、第2章を参照してください。
pause()
の詳細は、『Oracle Containers for J2EE Job Scheduler API Reference』を参照してください。
一時停止によってスキップされたジョブは、再実行パラメータをtrueに設定してジョブを再開することで、もう一度実行できます。ジョブを再開するには、oracle.ias.scheduler.Scheduler.resume()
メソッドを使用します。
図5-1のタイムラインは、ジョブの一時停止と再開をわかりやすく説明しています。
あるジョブが午後10時30分頃一時停止し、午前2時に再開するようにスケジュールされています。しかし、このジョブは午前0時に実行するようにスケジュールされています。このジョブは実行されるでしょうか。
午後10時30分の一時停止によって、午前0時にスケジュールされていたジョブはスキップされます。しかし、再実行をtrueに設定されているジョブが午前2時に再開する場合、午前0時にスケジュールされていたジョブは午前2時に実行されます。再実行がfalseに設定されている場合、午前0時にスケジュールされていたジョブは実行されません。
一方、図5-2は、繰返しスケジュールのジョブを一時停止し再開した場合どうなるかを示しています。
このシナリオでは、一時停止と再開の間に繰返しスケジュールのジョブ(複数のジョブの実行がスケジュールされている)が入っています。再実行をtrueに設定されているジョブが午前2時に再開した場合、最初のジョブ(午後11時のジョブ)のみが実行されます。午前0時と午前1時のジョブはスキップされます。
ここでは、ジョブを一時停止して再開するコード例を示します。
例5-1 ジョブの一時停止
次の例は、oracle.ias.scheduler.Scheduler.pause()
メソッドを使用して、BackupJob
と呼ばれるジョブを一時停止する方法を示しています。
//pause the "BackupJob" job scheduler.pause(jobHandle)
現在実行中のジョブを一時停止するとどうなりますか。
現在実行中のジョブを一時停止しても、ジョブは中断されません。ただし、ジョブを停止すると、再開するまでその後のジョブは実行されません。
実行時、ブラックアウト・ウィンドウと一時停止されたジョブにはどのような違いがありますか。
ブラックアウト・ウィンドウでは、すべてのジョブの実行が抑止されますが、ジョブの一時停止では、トリガーの起動によって発生したジョブの実行のみが抑止されます。たとえば、ジョブを一時停止しても、再実行または再試行されたジョブは抑止されませんが、ブラックアウト・ウィンドウでジョブを実行すると抑止されます。
ジョブを一時停止したときに再試行するとどうなりますか。
トリガー式がtrueと評価されたために発生したジョブが、一時停止されたジョブによって抑止されます。再試行中はトリガー式が評価されないため、ジョブを実行できます。