SchedulerX を使用すると、複数のジョブを調整するワークフローを作成できます。 ワークフロー内のアップストリームジョブからダウンストリームジョブにデータを渡すこともできます。 これにより、ビジネスロジックの複雑さが軽減されます。 このトピックでは、3 つのジョブを例として使用して、ワークフロー内のアップストリームジョブからダウンストリームジョブにデータを渡す方法について説明します。
背景情報
シンプルな Java ジョブ間でのみデータを渡すことができます。 分散 Java ジョブ間でデータを渡すには、MapReduce モデルを使用します。 詳細については、「MapReduce」をご参照ください。手順
- 3 つのアプリケーションに対して、ジョブスケジューリングクラス JobProcessor A、JobProcessor B、および JobProcessor C をそれぞれ実装します。
JobProcessor A
@Component public class TestSimpleJobA extends JavaProcessor { @Override public ProcessResult process(JobContext context) throws Exception { System.out.println("TestSimpleJobA " + DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); return new ProcessResult(true, String.valueOf(1)); } }JobProcessor B
@Component public class TestSimpleJobB extends JavaProcessor { @Override public ProcessResult process(JobContext context) throws Exception { System.out.println("TestSimpleJobB " + DateTime.now().toString("yyyy-MM-dd HH:mm:ss")); return new ProcessResult(true, String.valueOf(2)); } }JobProcessor C
@Component public class TestSimpleJobC extends JavaProcessor { @Override public ProcessResult process(JobContext context) throws Exception { List<JobInstanceData> upstreamDatas = context.getUpstreamData(); int sum = 0; for (JobInstanceData jobInstanceData : upstreamDatas) { System.out.println("jobName=" + jobInstanceData.getJobName() + ", data=" + jobInstanceData.getData()); // アップストリームジョブ名とデータを出力します sum += Integer.valueOf(jobInstanceData.getData()); } System.out.println("TestSimpleJobC sum=" + sum); // 合計値を出力します return new ProcessResult(true, String.valueOf(sum)); } }
- Enterprise Distributed Application Service(EDAS)にアプリケーションをデプロイします。
- アプリケーションごとにグループを作成し、jobA、jobB、および jobC を作成します。 詳細については、「アプリケーション管理」および「ジョブの作成」をご参照ください。
- ワークフローを作成し、ジョブをワークフローにインポートします。 詳細については、「ワークフローの作成」をご参照ください。
- Process Management ページで、ワークフローの 詳細[操作] 列の 一度だけ実行 をクリックし、 を選択します。
結果
[ワークフローの詳細] ページに戻り、jobA を右クリックして [詳細] を選択し、jobA のジョブインスタンスの詳細を表示します。 この手順を繰り返して、jobB および jobC のジョブインスタンスの詳細を表示します。jobA の [結果またはエラー] フィールドには 1 が表示されます。これは JobProcessor A の値と同じです。
jobB の実行結果は 2 で、JobProcessor B の値と同じです。 jobC の実行結果は 3(1 + 2)で、JobProcessor C の値と同じです。 これは、jobA と jobB の実行結果が job C に渡されたことを示しています。
コンソールで次の情報を確認できます。
jobName=jobB, data=2
jobName=jobA, data=1
TestSimpleJobC sum=3