

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

# HelloWorldWorkflowParallel アプリケーション
<a name="getting-started-example-helloworldworkflowparallel"></a>

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

![\[HelloWorldWorkflowParallel ワークフロートポロジー\]](http://docs.aws.amazon.com/ja_jp/amazonswf/latest/awsflowguide/images/helloworld_parallel_topology.png)


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

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

## HelloWorldWorkflowParallel アクティビティワーカー
<a name="getting-started-example-helloworldworkflowparallel.activities"></a>

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 ワークフローワーカー
<a name="getting-started-example-helloworldworkflowparallel-worker"></a>

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 アプリケーションは、`Promise<T>`オブジェクトを従来の Java コントロールフロー構造と組み合わせて使用するだけで、複雑なトポロジーも実装できます。

## HelloWorldWorkflowParallel ワークフローおよびアクティビティのホストおよびスターター
<a name="HelloWorldWorkflowParallel-workflow-activities-host-starter"></a>

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

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

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