

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

# AWS Flow Framework for Java の再生動作
<a name="programming-replay"></a>

このトピックでは、「[AWS Flow Framework for Java とは](welcome.md)」セクションの例を使用して、再生動作の例を説明します。[同期](#programming-replay-synchronous)シナリオと[非同期](#programming-replay-asynchronous)シナリオの両方について説明します。

## 例 1: 同期再生
<a name="programming-replay-synchronous"></a>

同期ワークフローでの再生動作の例では、[HelloWorldWorkflow](getting-started-example-helloworldworkflow.md) ワークフローおよびアクティビティ実装を変更します。そのために、各実装内に次のような `println` 呼び出しを追加します。

```
public class GreeterWorkflowImpl implements GreeterWorkflow {
...
   public void greet() {
      System.out.println("greet executes");
      Promise<String> name = operations.getName();
      System.out.println("client.getName returns");
      Promise<String> greeting = operations.getGreeting(name);
      System.out.println("client.greeting returns");
      operations.say(greeting);
      System.out.println("client.say returns");
   }
}
**************
public class GreeterActivitiesImpl implements GreeterActivities {
   public String getName() {
      System.out.println("activity.getName completes");
      return "World";
   }

   public String getGreeting(String name) {
      System.out.println("activity.getGreeting completes");
      return "Hello " + name + "!";
   }

   public void say(String what) {
      System.out.println(what);
   }
}
```

このコードの詳細については、「[HelloWorldWorkflow アプリケーション](getting-started-example-helloworldworkflow.md)」を参照してください。以下は、出力を編集したバージョンであり、各再生エピソードの開始を示すコメントが付いています。

```
//Episode 1
greet executes
client.getName returns
client.greeting returns
client.say returns

activity.getName completes
//Episode 2
greet executes
client.getName returns
client.greeting returns
client.say returns

activity.getGreeting completes
//Episode 3
greet executes
client.getName returns
client.greeting returns
client.say returns

Hello World! //say completes
//Episode 4
greet executes
client.getName returns
client.greeting returns
client.say returns
```

この例の再生プロセスは次のようになります。
+ 最初のエピソードでは `getName` アクティビティタスクをスケジュールします。このタスクには依存関係がありません。
+ 2 番目のエピソードでは `getGreeting` アクティビティタスクをスケジュールします。このタスクは `getName` に依存します。
+ 3 番目のエピソードでは `say` アクティビティタスクをスケジュールします。このタスクは `getGreeting` に依存します。
+ 最後のエピソードでは、追加のタスクをスケジュールしません。未完了のアクティビティがなければ、ワークフロー実行を終了します。

**注記**  
各エピソードに対して 3 つのアクティビティクライアントメソッドが 1 回呼び出されます。ただし、これらの呼び出しの 1 つのみがアクティビティタスクになるため、各タスクは 1 回のみ実行されます。

## 例 2: 非同期再生
<a name="programming-replay-asynchronous"></a>

[同期再生の例](#programming-replay-synchronous)と同じように、[HelloWorldWorkflowAsync アプリケーション](getting-started-example-helloworldworkflowasync.md) を変更して非同期再生の動作を確認できます。次の出力が生成されます。

```
//Episode 1
greet executes
client.name returns
workflow.getGreeting returns
client.say returns

activity.getName completes
//Episode 2
greet executes
client.name returns
workflow.getGreeting returns
client.say returns
workflow.getGreeting completes

Hello World! //say completes
//Episode 3
greet executes
client.name returns
workflow.getGreeting returns
client.say returns
workflow.getGreeting completes
```

HelloWorldAsync は 3 つの再生エピソードを使用します。2 つのアクティビティしかないためです。`getGreeting` アクティビティは *getGreeting* 非同期ワークフローメソッドに置き換えられています。このメソッドの完了に伴って再生エピソードは開始されません。

最初のエピソードでは、*名前*アクティビティの完了に依存するため、`getGreeting` を呼び出しません。ただし、*getName* が完了すると、再生は後続のエピソードごとに *getGreeting* を呼び出します。

## 以下の資料も参照してください。
<a name="see-also"></a>
+ [AWS Flow Framework 基本的な概念: 分散実行](awsflow-basics-distributed-execution.md)