

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# AWS Flow Framework 適用於 Java 的註釋
<a name="annotations"></a>

**Topics**
+ [@Activities](#annotations-activities)
+ [@Activity](#annotations-activity)
+ [@ActivityRegistrationOptions](#annotations-activityregistration)
+ [@異步](#annotations-asynchronous)
+ [@Execute](#annotations-execute)
+ [@ExponentialRetry](#annotations-exponentialretry)
+ [@GetState](#annotations-getstate)
+ [@ManualActivityCompletion](#annotations-manualactivitycompletion)
+ [@Signal](#annotations-signal)
+ [@SkipRegistration](#annotations-skipregistration)
+ [@Wait 和 @NoWait](#annotations-waitnowait)
+ [@工作流程](#annotations-workflow)
+ [@WorkflowRegistrationOptions](#annotations-workflowregistrationoptions)

## @Activities
<a name="annotations-activities"></a>

此註釋可以用於界面，以宣告一組活動類型。標註此註釋之界面中的每個方法皆代表活動類型。界面不能同時有 `@Workflow` 和 `@Activities` 註釋。

在此註釋上可以指定下列參數：

`activityNamePrefix`  
指定界面中所宣告之活動類型名稱的前綴。如果設定為空白字串 (預設值)，則會使用後接 '.' 的界面名稱做為前綴。

`version`  
指定界面中所宣告之活動類型的預設版本。預設值為 `1.0`。

`dataConverter`  
指定 `DataConverter` 的類型，以用於在建立此活動類型的任務和其結果時序列化/還原序列化資料。預設為 `NullDataConverter`，指出應該使用 `JsonDataConverter`。

## @Activity
<a name="annotations-activity"></a>

此註釋可以用於已標註 `@Activities` 之界面內的方法。

在此註釋上可以指定下列參數：

`name`  
指定活動類型的名稱。預設值是空白字串，指出應該使用預設前綴和活動方法名稱來判斷活動類型的名稱 (格式為 \$1*prefix*\$1\$1*name*\$1)。請注意，當您在 `@Activity` 註釋中指定名稱時，框架不會自動在名稱前面加上前綴。您可以自由使用自己的命名方式。

`version`  
指定活動類型的版本。這會覆寫內含界面之 `@Activities` 註釋中所指定的預設版本。預設為空字串。

## @ActivityRegistrationOptions
<a name="annotations-activityregistration"></a>

指定活動類型的註冊選項。此註釋可以用於已標註 `@Activities` 的界面或其內的方法。如果兩個位置皆指定，則用於方法上註釋會生效。

在此註釋上可以指定下列參數：

`defaultTasklist`  
指定要為此活動類型向 Amazon SWF 註冊的預設任務清單。使用 `ActivitySchedulingOptions` 參數在已產生的用戶端上呼叫活動方法時，可以覆寫此預設值。預設為 `USE_WORKER_TASK_LIST`。此特殊值指出應該使用執行註冊之工作者所使用的任務清單。

`defaultTaskScheduleToStartTimeoutSeconds`  
指定此活動類型的向 Amazon SWF 註冊defaultTaskScheduleToStartTimeout。這是此活動類型的任務在指派給工作者之前，所允許等待的最長時間。如需詳細資訊，請參閱 *Amazon Simple Workflow Service API 參考*。

`defaultTaskHeartbeatTimeoutSeconds`  
指定此活動類型的向 Amazon SWF `defaultTaskHeartbeatTimeout`註冊的 。活動工作者必須在此持續時間內提供活動訊號；否則，任務將會逾時。預設為 -1，此特殊值指出應該停用這個逾時。如需詳細資訊，請參閱 *Amazon Simple Workflow Service API 參考*。

`defaultTaskStartToCloseTimeoutSeconds`  
指定此活動類型的向 Amazon SWF 註冊的 defaultTaskStartToCloseTimeout。此逾時決定工作者可用來處理這類型之活動任務的最長時間。如需詳細資訊，請參閱 *Amazon Simple Workflow Service API 參考*。

`defaultTaskScheduleToCloseTimeoutSeconds`  
指定此活動類型的向 Amazon SWF `defaultScheduleToCloseTimeout`註冊的 。此逾時決定任務可保持開啟狀態的總持續時間。預設為 -1，此特殊值指出應該停用這個逾時。如需詳細資訊，請參閱 *Amazon Simple Workflow Service API 參考*。

## @異步
<a name="annotations-asynchronous"></a>

用於工作流程協調性邏輯中的方法時，指出應該非同步執行方法。將立即傳回方法的呼叫，但會在傳遞給方法的所有 Promise<> 參數皆準備就緒時以非同步實際執行。已標註 @Asynchronous 的方法必須具有傳回類型 Promise<> 或 void。

`daemon`  
指出針對非同步方法所建立的任務，是否應該為協助程式任務。預設為 `False`。

## @Execute
<a name="annotations-execute"></a>

用於已標註 `@Workflow` 註釋之界面中的方法時，識別工作流程的進入點。

**重要**  
界面中只有一個方法可以裝飾 `@Execute`。

在此註釋上可以指定下列參數：

`name`  
指定工作流程類型的名稱。如果未設定，則名稱預設為 \$1*prefix*\$1\$1*name*\$1，其中 \$1*prefix*\$1 是後接 '.' 的工作流程界面名稱，而 \$1*name*\$1 是工作流程中 `@Execute` 裝飾方法的名稱。

`version`  
指定工作流程類型的版本。

## @ExponentialRetry
<a name="annotations-exponentialretry"></a>

用於活動或非同步方法時，在方法拋出未處理的例外狀況時設定指數重試政策。重試嘗試是在退避期間之後進行，而退避期間是以嘗試次數的次方計算而來。

在此註釋上可以指定下列參數：

`intialRetryIntervalSeconds`  
指定要在第一次重試嘗試之前等待的持續時間。此值不應該大於 `maximumRetryIntervalSeconds` 和 `retryExpirationSeconds`。

`maximumRetryIntervalSeconds`  
指定重試嘗試之間的持續時間上限。達到之後，會將重試間隔設為此值。預設為 -1，這表示無限的持續時間。

`retryExpirationSeconds`  
指定指數重試將在之後停止的持續時間。預設為 -1，這表示不會有過期的狀況。

`backoffCoefficient`  
指定用來計算重試間隔的係數。請參閱 [指數重試策略](features-retry.md#features-retry-exponential)。

`maximumAttempts`  
指定指數重試將在之後停止的嘗試次數。預設為 -1，這表示重試嘗試次數無限制。

`exceptionsToRetry`  
指定應觸發重試的例外狀況類型清單。這些類型的未處理例外狀況將不會進一步傳播，而且將會在計算的重試間隔之後重試方法。此清單預設會包含 `Throwable`。

`excludeExceptions`  
指定不應觸發重試的例外狀況類型清單。將允許傳播這類型的未處理例外狀況。此清單預設為空的。

## @GetState
<a name="annotations-getstate"></a>

用於界面中已標註 `@Workflow` 註釋的方法時，識別使用的方法來擷取最新工作流程執行狀態。在具有 `@Workflow` 註釋的界面中，最多可以有一種方法具有此註釋。具有此註釋的方法不得採用任何參數，而且必須要有 `void` 以外的傳回類型。

## @ManualActivityCompletion
<a name="annotations-manualactivitycompletion"></a>

此註釋可以用於活動方法，指出在傳回方法時不應該完成活動任務。活動任務不會自動完成，需要直接使用 Amazon SWF API 手動完成。這適用於下列使用案例：將活動任務指派給未自動化或需要人為介入才能完成的某個外部系統。

## @Signal
<a name="annotations-signal"></a>

 用於界面中已標註 `@Workflow` 註釋的方法時，識別界面所宣告之工作流程類型的執行可以收到的訊號。需要使用此註釋來定義訊號方法。

在此註釋上可以指定下列參數：

`name`  
指定訊號名稱的名稱部分。如果未設定，則會使用方法名稱。

## @SkipRegistration
<a name="annotations-skipregistration"></a>

在標註 的 界面上使用時`@Workflow`， 表示工作流程類型不應向 Amazon SWF 註冊。`@WorkflowRegistrationOptions` 和 `@SkipRegistrationOptions` 註釋中的其中一個必須用於已標註 `@Workflow` 的界面，但兩者不能同時使用。

## @Wait 和 @NoWait
<a name="annotations-waitnowait"></a>

這些註釋可用於 類型的參數`Promise<>`，以指示 AWS Flow Framework 適用於 Java 的 是否應等待就緒，再執行 方法。根據預設，傳入 `@Asynchronous` 方法的 `Promise<>` 參數必須先準備就緒，再執行方法。在特定藍本中，需要覆寫此預設行為。傳入 `@Asynchronous` 方法且標註 `@NoWait` 的 `Promise<>` 參數則不會等待。

包含 Promise 的 Collections 參數 (或其子類別) (例如 `List<Promise<Int>>`) 必須標註 `@Wait` 註釋。根據預設，框架不會等待集合的成員。

## @工作流程
<a name="annotations-workflow"></a>

此註釋用於界面，以宣告「工作流程」**類型。已裝飾此註釋的界面只應該包含一個已裝飾 [@Execute](#annotations-execute) 註釋的方法，來宣告您工作流程的進入點。

**注意**  
界面不能同時宣告 `@Workflow` 和 `@Activities` 註釋；兩者會互斥。

在此註釋上可以指定下列參數：

`dataConverter`  
指定要在將請求傳送至此工作流程類型的工作流程執行以及接收其結果時使用的 `DataConverter`。  
預設為 `NullDataConverter`，其接著會回復為 `JsonDataConverter`，以將所有請求和回應資料都處理為「JavaScript 物件標記法 (JSON)」。

### 範例
<a name="example"></a>

```
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 = "1.0")
   public void greet();
}
```

## @WorkflowRegistrationOptions
<a name="annotations-workflowregistrationoptions"></a>

在標註 的 界面上使用時`@Workflow`， 會在註冊工作流程類型時提供 Amazon SWF 使用的預設設定。

**注意**  
`@WorkflowRegistrationOptions` 或 `@SkipRegistrationOptions` 必須用於已標註 `@Workflow` 的界面，但您不能同時指定兩者。

在此註釋上可以指定下列參數：

描述  
工作流程類型的選用文字描述。

`defaultExecutionStartToCloseTimeoutSeconds`  
指定向 Amazon SWF `defaultExecutionStartToCloseTimeout`註冊的工作流程類型。這是此類型的工作流程執行完成所需的總時間。  
如需工作流程逾時的詳細資訊，請參閱「[Amazon SWF 逾時類型](swf-timeout-types.md)」。

`defaultTaskStartToCloseTimeoutSeconds`  
指定向 Amazon SWF `defaultTaskStartToCloseTimeout`註冊的工作流程類型。這指定此類型之工作流程執行的單一決策任務完成所需的時間。  
如果您未指定 `defaultTaskStartToCloseTimeout`，則會預設為 30 秒。  
如需工作流程逾時的詳細資訊，請參閱「[Amazon SWF 逾時類型](swf-timeout-types.md)」。

`defaultTaskList`  
用於此工作流程類型執行之決策任務的預設任務清單。啟動工作流程執行時，可以使用 `StartWorkflowOptions` 來覆寫這裡設定的預設值。  
如果您未指定 `defaultTaskList`，則會預設為 `USE_WORKER_TASK_LIST`。這指出應該使用執行工作流程註冊之工作者所使用的任務清單。

`defaultChildPolicy`  
指定要在終止這類型的執行時用於子工作流程的政策。預設值為 `ABANDON`。可能值如下：  
+ `ABANDON` – 允許子工作流程執行持續執行
+ `TERMINATE` – 終止子工作流程執行
+ `REQUEST_CANCEL` – 請求取消子工作流程執行