ヘッダーをスキップ
Oracle Containers for J2EEジョブ・スケジューラ開発者ガイド
10g(10.1.3.1.0)
B31853-01
  目次
目次
索引
索引

戻る
戻る
次へ
次へ
 

6 ジョブの取消し

この章では、ジョブを取り消す意味とジョブの取消し方法について説明します。次のトピックについて説明します。

6.1 ジョブの取消しの意味

実行中のジョブを停止するには、ジョブを取り消すしかありません。ジョブを取り消すと、現在実行中のジョブは停止しますが、そのジョブがその後も実行されなくなるわけではありません。システムからジョブを完全に排除するには、ジョブを削除する必要があります。ジョブの削除の詳細は、2.3項を参照してください。

ジョブを取り消した場合、再試行を使用してもう一度実行することができます。再試行の詳細は、3.2項を参照してください。

6.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);
            }
        }
    }
}

少なくとも、ジョブの取消しでは次のことが必要です。

6.3 FAQ

取り消されたジョブを再実行する方法はありますか。

いいえ。取り消された実行を再試行するメカニズムはありません。再試行できるのは、失敗したジョブのみです。詳細は、3.2項を参照してください。