この章では、ジョブを取り消す意味とジョブの取消し方法について説明します。次のトピックについて説明します。
実行中のジョブを停止するには、ジョブを取り消すしかありません。ジョブを取り消すと、現在実行中のジョブは停止しますが、そのジョブがその後も実行されなくなるわけではありません。システムからジョブを完全に排除するには、ジョブを削除する必要があります。ジョブの削除の詳細は、2.3項を参照してください。
ジョブを取り消した場合、再試行を使用してもう一度実行することができます。再試行の詳細は、3.2項を参照してください。
ジョブを取り消すには、oracle.ias.scheduler.Cancellable
インタフェースを使用し、取消しリクエストに応答し、必要な例外JobCancelledException
を作成して、ジョブの取消しを指定する必要があります。
ジョブ・スケジューラに発行されたJavaのジョブ・クラスは、oracle.ias.scheduler.Cancellable
インタフェースの実装を提供できます。(ジョブ・スケジューラのcancel()
メソッドを呼び出して)ジョブを取り消すたびに、実装クラスのcancel()
メソッドがすべてのジョブ・インスタンスで呼び出されます。
oracle.ias.scheduler.Cancellable
インタフェースまたはcancel()
メソッドの詳細は、『Oracle Containers for J2EE Job Scheduler API Reference』を参照してください。
例6-1は、oracle.ias.scheduler.Cancellable
インタフェースを使用してジョブを取り消す方法を示しています。
例6-1 取消しオプションを使用したデータの定期的なバックアップ
例2-1で説明したアプリケーションのテスト中に、ジョブが長時間実行される可能性があります。そのため、実行中のジョブの取消しが必要になる場合があります。
次のコード例は、oracle.ias.scheduler.Executable
インタフェースとoracle.ias.scheduler.Cancellable
インタフェースの両方を提供するように実装を修正したものです。
import java.io.File; import java.io.IOException; import oracle.ias.scheduler.Job; import oracle.ias.scheduler.Executable; import oracle.ias.scheduler.Cancellable; import oracle.ias.scheduler.JobContext; import oracle.ias.scheduler.JobCancelledException; import oracle.ias.scheduler.JobExecutionException; public class CancellableBackupJob implements Executable, Cancellable { boolean m_cancelled = false; public void cancel() { m_cancelled = true; } public void execute(JobContext context) throws JobExecutionException, JobCancelledException { // retrieve the source and destination directories Job job = context.getJob(); String source = job.getProperties().getProperty("SourceDirectory"); String destination = job.getProperties().getProperty("DestinationDirectory"); // get the list of files to copy File directory = new File(source); File[] files = directory.listFiles(); // copy the files Runtime runtime = Runtime.getRuntime(); Process process; for (int x = 0; x < files.length; x++) { // cancelled? if (m_cancelled) { throw new JobCancelledException(); } try { process = runtime.exec("/bin/cp " + files[x].toString() + " " + destination); process.waitFor(); } catch(IOException e) { throw new RuntimeException("copy failed: "+files[x],e); } catch(InterruptedException e) { throw new RuntimeException("copy failed: "+files[x],e); } } } }
少なくとも、ジョブの取消しでは次のことが必要です。
実装にoracle.ias.scheduler.Cancellable
インタフェースを使用する必要があります。
ジョブの実行を取り消すには、cancel()
メソッドを呼び出す必要があります。このメソッドによって、ジョブの実行を停止するoracle.ias.scheduler.JobCancelledException
例外が発生します。
cancel()
メソッドを即座に呼び出せない場合があるので、プログラムでこの点を考慮する必要があります。
取り消されたジョブを再実行する方法はありますか。
いいえ。取り消された実行を再試行するメカニズムはありません。再試行できるのは、失敗したジョブのみです。詳細は、3.2項を参照してください。