翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
HelloWorldWorkflowParallel アプリケーション
前述のバージョンの Hello World! 線形ワークフロートポロジーをすべて使用します。ただし、Amazon SWF はリニアトポロジーに制限されません。以下の図のように、HelloWorldWorkflowParallel アプリケーションは、変更されたバージョンの HelloWorldWorkflow であり、並列トポロジーが使用されています。
HelloWorldWorkflowParallel では、getName
と getGreeting
は並列に実行され、それぞれよりあいさつの一部が返ります。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); } }
getName
と getGreeting
はあいさつの文字列の半分を返します。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 は、
name
をgetGreeting
に渡しました。name
はPromise<T>
オブジェクトだったため、getGreeting
はgetName
が完了するまでアクティビティを延期しました。その結果、2 つのアクティビティは順番に実行されました。 -
HelloWorldWorkflowParallel では、入力
getName
とgetGreeting
のいずれも渡されません。どちらのメソッドの実行も延期されず、そのアクティビティメソッドは並行ですぐに実行されます。
say
アクティビティは、greeting
と name
のいずれも、入力パラメータとして取得します。これらは 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
を実行します。