

Terjemahan disediakan oleh mesin penerjemah. Jika konten terjemahan yang diberikan bertentangan dengan versi bahasa Inggris aslinya, utamakan versi bahasa Inggris.

# AWS Flow Framework untuk Java Replay Behavior
<a name="programming-replay"></a>

Topik ini membahas contoh perilaku memutar ulang, menggunakan contoh di bagian [Apa yang dimaksud dengan AWS Flow Framework Java?](welcome.md). Baik skenario [synchronous](#programming-replay-synchronous) (sinkron) dan [asynchronous](#programming-replay-asynchronous) (asinkron) dibahas.

## Contoh 1: Putar Ulang Sinkron
<a name="programming-replay-synchronous"></a>

Untuk contoh cara kerja replay dalam alur kerja sinkron, ubah alur kerja dan implementasi aktivitas dengan menambahkan `println` panggilan dalam implementasi masing-masing, sebagai berikut: [HelloWorldWorkflow](getting-started-example-helloworldworkflow.md)

```
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);
   }
}
```

Untuk detail tentang kode, lihat [HelloWorldWorkflow Aplikasi](getting-started-example-helloworldworkflow.md). Berikut ini adalah versi output yang telah diedit, dengan komentar yang menunjukkan awal setiap episode replay.

```
//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
```

Proses replay untuk contoh ini bekerja sebagai berikut:
+ Episode pertama menjadwalkan tugas aktivitas `getName`, yang tidak memiliki dependensi.
+ Episode kedua menjadwalkan tugas aktivitas `getGreeting`, yang tergantung pada `getName`.
+ Episode ketiga menjadwalkan tugas aktivitas `say`, yang tergantung pada`getGreeting`.
+ Episode terakhir tidak menjadwalkan tugas tambahan dan tidak menemukan aktivitas yang belum selesai, mengakhiri eksekusi alur kerja. 

**catatan**  
Tiga metode klien aktivitas dipanggil sekali untuk setiap episode. Namun, hanya satu dari panggilan itu yang menghasilkan tugas aktivitas, sehingga setiap tugas yang dilakukan hanya sekali.

## Contoh 2: Pemutaran Ulang Asinkron
<a name="programming-replay-asynchronous"></a>

Demikian pula dengan [synchronous replay example](#programming-replay-synchronous) (contoh pemutaran ulang sinkron), Anda dapat memodifikasi [HelloWorldWorkflowAsync Aplikasi](getting-started-example-helloworldworkflowasync.md) untuk melihat bagaimana pemutaran ulang asinkron bekerja. Pemutaran ulang sinkron menghasilkan output berikut:

```
//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 menggunakan tiga episode replay karena hanya ada dua kegiatan. Aktivitas `getGreeting` digantikan oleh metode alur kerja asinkron *getGreeting*, yang tidak memulai episode pemutaran ulang ketika selesai.

Episode pertama tidak memanggil `getGreeting`, karena itu tergantung pada selesainya aktivitas *nama*. Namun, setelah *getName* selesai, memutar ulang panggilan *getGreeting* sekali untuk setiap episode yang berhasil.

## Lihat juga
<a name="see-also"></a>
+ [AWS Flow Framework Konsep Dasar: Eksekusi Terdistribusi](awsflow-basics-distributed-execution.md)