Alur Kerja dan Kontrak Aktivitas - AWS Flow Framework untuk Java

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

Alur Kerja dan Kontrak Aktivitas

Antarmuka Java digunakan untuk menyatakan tanda tangan dari alur kerja dan kegiatan. Antarmuka membentuk kontrak antara pelaksanaan alur kerja (atau aktivitas) dan klien alur kerja tersebut (atau aktivitas). Sebagai contoh, jenis alur kerja MyWorkflow didefinisikan menggunakan antarmuka yang dijelaskan dengan anotasi @Workflow:

@Workflow @WorkflowRegistrationOptions( defaultExecutionStartToCloseTimeoutSeconds = 60, defaultTaskStartToCloseTimeoutSeconds = 10) public interface MyWorkflow { @Execute(version = "1.0") void startMyWF(int a, String b); @Signal void signal1(int a, int b, String c); @GetState MyWorkflowState getState(); }

Kontrak tidak memiliki pengaturan khusus implementasi. Penggunaan kontrak implementasi-netral memungkinkan klien untuk dipisahkan dari pelaksanaan dan karenanya memberikan fleksibilitas untuk mengubah detail pelaksanaan tanpa melanggar klien. Sebaliknya, Anda juga dapat mengubah klien tanpa memerlukan perubahan alur kerja atau aktivitas yang dikonsumsi. Sebagai contoh, klien dapat dimodifikasi untuk memanggil aktivitas asynchronously menggunakan janji-janji (Promise<T>) tanpa memerlukan perubahan pada pelaksanaan kegiatan. Demikian pula, pelaksanaan kegiatan dapat diubah sehingga selesai secara asinkron, misalnya, oleh orang yang mengirim email—tanpa memerlukan klien dari kegiatan yang akan diubah.

Dalam contoh di atas, antarmuka alur kerja MyWorkflow berisi sebuah metode, startMyWF, untuk memulai eksekusi baru. Metode ini dijelaskan dengan anotasi @Execute dan harus memiliki tipe pengembalian dari void atau Promise<>. Dalam antarmuka alur kerja yang diberikan, paling banyak satu metode dapat dijelaskan dengan anotasi ini. Metode ini adalah titik masuk logika alur kerja, dan kerangka kerja memanggil metode ini untuk mengeksekusi logika alur kerja ketika tugas keputusan diterima.

Antarmuka alur kerja juga mendefinisikan sinyal yang dapat dikirim ke alur kerja. Metode sinyal akan dipanggil ketika sinyal dengan nama yang cocok diterima oleh eksekusi alur kerja. Misalnya, antarmuka MyWorkflow menyatakan metode sinyal, signal1, dianotasi dengan anotasi @Signal.

Anotasi @Signal diperlukan pada metode sinyal. Jenis kembali dari metode sinyal harus void. Sebuah antarmuka alur kerja mungkin memiliki nol atau lebih metode sinyal didefinisikan di dalamnya. Anda dapat mendeklarasikan antarmuka alur kerja tanpa metode @Execute dan beberapa metode @Signal untuk menghasilkan klien yang tidak dapat memulai eksekusi mereka tetapi dapat mengirim sinyal untuk menjalankan eksekusi.

Metode dijelaskan dengan @Execute dan anotasi @Signal mungkin memiliki sejumlah parameter dari jenis apa pun selain Promise<T> atau turunannya. Hal ini memungkinkan Anda meneruskan input yang diketik dengan kuat ke eksekusi alur kerja di awal dan saat sedang berjalan. Tipe pengembalian metode @Execute harus void atau Promise<>.

Selain itu, Anda juga dapat menyatakan metode dalam antarmuka alur kerja untuk melaporkan status terbaru eksekusi alur kerja, misalnya, metode getState dalam contoh sebelumnya. Status ini tidak seluruh aplikasi status alur kerja. Tujuan penggunaan fitur ini adalah untuk mengizinkan Anda menyimpan hingga 32 KB data untuk menunjukkan status terbaru eksekusi. Sebagai contoh, dalam alur kerja pemrosesan urutan, Anda dapat menyimpan string yang menunjukkan bahwa pesanan telah diterima, diproses, atau dibatalkan. Metode ini disebut oleh kerangka kerja setiap kali tugas keputusan selesai untuk mendapatkan status terbaru. Status disimpan di Amazon Simple Workflow Service (Amazon SWF) dan dapat diambil menggunakan klien eksternal yang dihasilkan. Hal ini mengizinkan Anda untuk memeriksa status terbaru dari eksekusi alur kerja. Metode dijelaskan dengan @GetState tidak boleh mengambil argumen apapun dan tidak boleh memiliki sebuah jenis pengembalian void. Anda dapat mengembalikan jenis apa pun, yang sesuai dengan kebutuhan Anda, dari metode ini. Dalam contoh di atas, objek MyWorkflowState (lihat definisi di bawah) dikembalikan oleh metode yang digunakan untuk menyimpan status string dan persen numerik lengkap. Metode ini diharapkan untuk melakukan akses baca saja dari objek implementasi alur kerja dan dipanggil serentak, yang melarang penggunaan operasi asinkron seperti memanggil metode dijelaskan dengan @Asynchronous. Paling banyak satu metode dalam antarmuka alur kerja dapat dijelaskan dengan anotasi @GetState.

public class MyWorkflowState { public String status; public int percentComplete; }

Demikian pula, satu set aktivitas didefinisikan menggunakan antarmuka yang dianotasi dengan anotasi @Activities. Setiap metode dalam antarmuka sesuai dengan aktivitas—misalnya:

@Activities(version = "1.0") @ActivityRegistrationOptions( defaultTaskScheduleToStartTimeoutSeconds = 300, defaultTaskStartToCloseTimeoutSeconds = 3600) public interface MyActivities { // Overrides values from annotation found on the interface @ActivityRegistrationOptions(description = "This is a sample activity", defaultTaskScheduleToStartTimeoutSeconds = 100, defaultTaskStartToCloseTimeoutSeconds = 60) int activity1(); void activity2(int a); }

Antarmuka mengizinkan Anda untuk mengelompokkan serangkain aktivitas terkait. Anda dapat menentukan sejumlah aktivitas dalam antarmuka aktivitas, dan Anda dapat menentukan sebanyak kegiatan antarmuka yang Anda inginkan. Serupa dengan @Execute dan metode @Signal, metode aktivitas dapat mengambil sejumlah argumen dari jenis apa pun selain Promise<T> atau turunannya. Jenis kembalinya suatu aktivitas tidak boleh Promise<T> atau turunannya.