すべてのプロダクト
Search
ドキュメントセンター

SchedulerX:アップストリームジョブからワークフロー内のダウンストリームジョブへのデータの受け渡し

最終更新日:Jan 14, 2025

SchedulerX を使用すると、複数のジョブを調整するワークフローを作成できます。 ワークフロー内のアップストリームジョブからダウンストリームジョブにデータを渡すこともできます。 これにより、ビジネスロジックの複雑さが軽減されます。 このトピックでは、3 つのジョブを例として使用して、ワークフロー内のアップストリームジョブからダウンストリームジョブにデータを渡す方法について説明します。

背景情報

シンプルな Java ジョブ間でのみデータを渡すことができます。 分散 Java ジョブ間でデータを渡すには、MapReduce モデルを使用します。 詳細については、「MapReduce」をご参照ください。

手順

  1. 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));
      }
      }                            
  2. Enterprise Distributed Application Service(EDAS)にアプリケーションをデプロイします。
  3. アプリケーションごとにグループを作成し、jobA、jobB、および jobC を作成します。 詳細については、「アプリケーション管理」および「ジョブの作成」をご参照ください。
  4. ワークフローを作成し、ジョブをワークフローにインポートします。 詳細については、「ワークフローの作成」をご参照ください。
  5. 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