HelloWorldWorkflowParallel アプリケーション - AWS Flow Framework Java 用

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

HelloWorldWorkflowParallel アプリケーション

前述のバージョンの Hello World! 線形ワークフロートポロジーをすべて使用します。ただし、Amazon SWF はリニアトポロジーに制限されません。以下の図のように、HelloWorldWorkflowParallel アプリケーションは、変更されたバージョンの HelloWorldWorkflow であり、並列トポロジーが使用されています。

HelloWorldWorkflowParallel ワークフロートポロジー

HelloWorldWorkflowParallel では、getNamegetGreeting は並列に実行され、それぞれよりあいさつの一部が返ります。say はその後、2 つの文字列をグリーティングにマージし、コンソールに出力します。

アプリケーションを実装するには、helloWorld.HelloWorldWorkflow パッケージのコピーをプロジェクトディレクトリに作成し、helloWorld.HelloWorldWorkflowParallel という名前を付けます。以下のセクションでは、元の HelloWorldWorkflow コードを変更して、getName および getGreeting を並列に実行する方法について説明します。

HelloWorldWorkflowParallel アクティビティワーカー

HelloWorldWorkflowParallel アクティビティのインターフェイスは、以下の例に示すように、GreeterActivities で実装されます。

import com.amazonaws.services.simpleworkflow.flow.annotations.Activities; import com.amazonaws.services.simpleworkflow.flow.annotations.ActivityRegistrationOptions; @Activities(version="5.0") @ActivityRegistrationOptions(defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 10) public interface GreeterActivities { public String getName(); public String getGreeting(); public void say(String greeting, String name); }

このインターフェイスは、次の点を除き、HelloWorldWorkflow で使用するものと似ています。

  • getGreeting は入力を一切受け付けません。あいさつの文字列のみ帰ります。

  • say は、2 つの入力文字列 (あいさつと名前) を受け付けます。

  • インターフェイスには新しいバージョン番号があります。登録済みのインターフェイスを変更する場合に必要です。

HelloWorldWorkflowParallel は、次のように GreeterActivitiesImpl でアクティビティを実装します。

public class GreeterActivitiesImpl implements GreeterActivities { @Override public String getName() { return "World!"; } @Override public String getGreeting() { return "Hello "; } @Override public void say(String greeting, String name) { System.out.println(greeting + name); } }

getNamegetGreeting はあいさつの文字列の半分を返します。say は、その 2 つの部分を連結して完全なフレーズを生成し、コンソールに出力します。

HelloWorldWorkflowParallel ワークフローワーカー

HelloWorldWorkflowParallel ワークフローインターフェイスは、次のように GreeterWorkflow で実装されます。

import com.amazonaws.services.simpleworkflow.flow.annotations.Execute; import com.amazonaws.services.simpleworkflow.flow.annotations.Workflow; import com.amazonaws.services.simpleworkflow.flow.annotations.WorkflowRegistrationOptions; @Workflow @WorkflowRegistrationOptions(defaultExecutionStartToCloseTimeoutSeconds = 3600) public interface GreeterWorkflow { @Execute(version = "5.0") public void greet(); }

このクラスは、アクティビティワーカーに一致させるようにバージョン番号が変更されている点を除き、HelloWorldWorkflow バージョンと同じものです。

このワークフローは、次のように GreeterWorkflowImpl で実装されます。

import com.amazonaws.services.simpleworkflow.flow.core.Promise; public class GreeterWorkflowImpl implements GreeterWorkflow { private GreeterActivitiesClient operations = new GreeterActivitiesClientImpl(); public void greet() { Promise<String> name = operations.getName(); Promise<String> greeting = operations.getGreeting(); operations.say(greeting, name); } }

ひと目で分かるように、この実装は、HelloWorldWorkflow にとてもよく似ています。3 つのアクティビティクライアントメソッドは順番に実行されます。ただし、アクティビティは実行されません。

  • HelloWorldWorkflow は、namegetGreeting に渡しました。namePromise<T> オブジェクトだったため、getGreetinggetName が完了するまでアクティビティを延期しました。その結果、2 つのアクティビティは順番に実行されました。

  • HelloWorldWorkflowParallel では、入力 getNamegetGreeting のいずれも渡されません。どちらのメソッドの実行も延期されず、そのアクティビティメソッドは並行ですぐに実行されます。

say アクティビティは、greetingname のいずれも、入力パラメータとして取得します。これらは Promise<T> オブジェクトであるため、両方のアクティビティが完了するまで say で実行は延期されます。その後、あいさつが作成、出力されます。

HelloWorldWorkflowParallel では、ワークフロートポロジーの定義に特殊なモデル化コードは一切使用しません。これを暗黙的に行うために、標準の Java フロー制御を使用し、Promise<T> オブジェクトのプロパティを活用します。AWS Flow Framework for Java のアプリケーションでは、従来の Java 制御フロー構成と組み合わせて Promise<T> オブジェクトを使用するだけで、複雑なトポロジーを実装することもできます。

HelloWorldWorkflowParallel ワークフローおよびアクティビティのホストおよびスターター

HelloWorldWorkflowParallel は、ワークフローとアクティビティ実装のホストクラスとして GreeterWorker を実装します。このメソッドでは、taskListToPoll という名前を除き、HelloWorldWorkflow と同様に実装されます。名前は「HelloWorldParallelList」に設定されます。

HelloWorldWorkflowParallel では、GreeterMain でワークフロースターターを実装します。この実装は、HelloWorldWorkflow と同様に行われます。

ワークフローを実行するには、HelloWorldWorkflow の場合と同様に GreeterWorker および GreeterMain を実行します。