

本文属于机器翻译版本。若本译文内容与英语原文存在差异，则一律以英文原文为准。

# 工作流程和活动类型注册
<a name="features.registration"></a>

Amazon SWF 要求先注册活动和工作流类型，然后才能使用它们。该框架自动在添加到工作线程的实现中注册工作流程类型和活动。该框架会查找实现工作流和活动的类型，并向 Amazon SWF 注册它们。默认情况下，该框架使用接口定义推断工作流程和活动类型的注册选项。所有工作流程接口需要具有 `@WorkflowRegistrationOptions` 注释或 `@SkipRegistration` 注释。工作流程工作线程注册为其配置的具有 `@WorkflowRegistrationOptions` 注释的所有工作流程类型。同样，需要使用 `@ActivityRegistrationOptions` 注释或 `@SkipRegistration` 注释对每个活动方法进行注释，或者必须在 `@Activities` 接口上提供其中的一个注释。活动工作线程注册为其配置的应用了 `@ActivityRegistrationOptions` 注释的所有活动类型。在启动其中的一个工作线程时，将自动执行注册。工作流程和活动类型中的 `@SkipRegistration` 注释未注册。`@ActivityRegistrationOptions` 和 `@SkipRegistration` 注释具有覆盖语义，最具体的语义将应用于活动类型。

请注意，在类型注册后，Amazon SWF 便不允许您进行重新注册或修改。该框架将尝试注册所有类型，但如果某个类型已注册，则不会重新注册该类型，并且不会报告错误。

如果您需要修改注册的设置，必须注册新的类型版本。您也可以在启动新的执行或调用使用所生成客户端的活动时覆盖注册的设置。

注册要求提供类型名称以及其他几个注册选项。默认实现按如下方式确定这些内容：

## 工作流程类型名称和版本
<a name="features.registration.workflow"></a>

该框架从工作流程接口中确定工作流程类型的名称。默认工作流程类型名称的形式为 \$1*prefix*\$1 \$1*name*\$1。\$1*prefix*\$1 设置为`@Workflow`接口的名称，后跟一个 '.'，\$1*name*\$1 设置为`@Execute`方法的名称。上例中工作流程类型的默认名称为 `MyWorkflow.startMyWF`。您可以使用 `@Execute` 方法的 name 参数覆盖默认名称。该示例中的工作流程类型的默认名称为 `startMyWF`。名称不能是空字符串。请注意，在使用 `@Execute` 覆盖名称时，框架不会自动在名称前添加前缀。您可以使用任意的命名方案。

工作流程版本是使用 `@Execute` 注释的 `version` 参数指定的。`version` 没有默认值，必须显式指定该值；`version` 是一个自由格式字符串，您可以使用任意的版本控制方案。

## 信号名称
<a name="features.registration.signal"></a>

可以使用 `@Signal` 注释的 name 参数指定信号的名称。如果未指定，则默认为信号方法的名称。

## 活动类型名称和版本
<a name="features.registration.activity"></a>

该框架从活动接口中确定活动类型的名称。默认活动类型名称的形式为 \$1*prefix*\$1 \$1*name*\$1。\$1*prefix*\$1 设置为`@Activities`接口名称，后跟一个 '.'，\$1*name*\$1 设置为方法名称。可以在活动界面的`@Activities`注释中覆盖默认 \$1*prefix*\$1。您也可以在活动方法上使用 `@Activity` 注释指定活动类型名称。请注意，在使用 `@Activity` 覆盖名称时，该框架不会自动在名称前添加前缀。您可以使用任意的命名方案。

 活动版本是使用 `@Activities` 注释的 version 参数指定的。该版本用作接口中定义的所有活动的默认值，可以使用 `@Activity` 注释覆盖每个活动的版本。

## 默认任务列表
<a name="features.registration.defaulttasklist"></a>

可以使用 `@WorkflowRegistrationOptions` 和 `@ActivityRegistrationOptions` 注释并设置 `defaultTaskList` 参数以配置默认任务列表。默认情况下，将它设置为 `USE_WORKER_TASK_LIST`。这是一个特殊值，它指示该框架使用在用于注册活动或工作流程类型的工作线程对象上配置的任务列表。您也可以选择使用这些注释将默认任务列表设置为 `NO_DEFAULT_TASK_LIST`，以便不注册默认任务列表。如果想要求在运行时指定任务列表，则可以使用这种方法。如果未注册任何默认任务列表，在启动工作流程或在生成的客户端的相应方法重载上使用 `StartWorkflowOptions` 和 `ActivitySchedulingOptions` 参数调用活动方法时，必须指定任务列表。

## 其他注册选项
<a name="features.registration.other"></a>

Amazon SWF API 允许的所有工作流和活动类型注册选项都可以通过该框架指定。

有关*工作流程*注册选项的完整列表，请参阅：
+ [@工作流](annotations.md#annotations-workflow)
+ [@Execute](annotations.md#annotations-execute)
+ [@WorkflowRegistrationOptions](annotations.md#annotations-workflowregistrationoptions)
+ [@Signal](annotations.md#annotations-signal)

有关*活动*注册选项的完整列表，请参阅：
+ [@活动](annotations.md#annotations-activity)
+ [@活动](annotations.md#annotations-activities)
+ [@ActivityRegistrationOptions](annotations.md#annotations-activityregistration)

如果要对类型注册进行完全控制，请参阅[工作线程扩展性](running.md#running.workerextend)。