

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

# HelloWorld 应用程序
<a name="getting-started-example-helloworld"></a>

为了说明 Amazon SWF 应用程序的构建方式，我们将创建一个 Java 应用程序，它的行为与工作流类似，但在单个进程中本地运行。不需要连接到 Amazon Web Services。

**注意**  
该[HelloWorldWorkflow](getting-started-example-helloworldworkflow.md)示例以此为基础，连接到 Amazon SWF 以处理工作流程的管理。

工作流程应用程序包含三个基本组件：
+ *活动工作线程* 支持一组*活动*，每个活动是一个独立执行的方法以执行特定的任务。
+ *工作流程工作线程* 协调活动执行并管理数据流。这是*工作流程拓扑* 的编程实现，这基本上是一个流程图，它定义了何时执行各种活动，这些活动是按顺序执行还是同时执行，等等。
+ *工作流程启动程序* 启动工作流程实例 (称为*执行*)，并且可以在执行期间与其进行交互。

HelloWorld 被实现为三个类和两个相关接口，将在以下各节中进行介绍。在开始之前，您应该按照中所述设置开发环境并创建一个新的 AWS Java 项目[设置 AWS Flow Framework 适用于 Java 的](setup.md)。用于以下演练的程序包名称均为 `helloWorld.XYZ`。要使用这些名称，请在 aop.xml 中设置 `within` 属性，如下所示：

```
...
<weaver options="-verbose">
   <include within="helloWorld..*"/>
</weaver>
```

要实现 HelloWorld，请在您的 AWS SDK 项目中创建一个名为的新 Java 包，`helloWorld.HelloWorld`并添加以下文件：
+ 名为 `GreeterActivities.java` 的接口文件。
+ 名为 `GreeterActivitiesImpl.java` 的类文件，它实现活动工作线程。
+ 名为 `GreeterWorkflow.java` 的接口文件。
+ 名为 `GreeterWorkflowImpl.java` 的类文件，它实现工作流程工作线程。
+ 名为 `GreeterMain.java` 的类文件，它实现工作流程启动程序。

在以下几节中提供了详细信息，并包含每个组件的完整代码 (可添加到相应的文件中)。

## HelloWorld 活动实施
<a name="getting-started-example-helloworld.activityworker"></a>

HelloWorld 将向控制台打印`"Hello World!"`问候语的总体任务分为三个任务，每个任务都由*活动方法*执行。活动方法是在 `GreeterActivities` 接口中定义的，如下所示。

```
public interface GreeterActivities {
   public String getName();
   public String getGreeting(String name);
   public void say(String what);
}
```

HelloWorld 有一个活动实现`GreeterActivitiesImpl`，它提供的`GreeterActivities`方法如下所示：

```
public class GreeterActivitiesImpl implements GreeterActivities {
   @Override
   public String getName() {
      return "World";
   }

   @Override
   public String getGreeting(String name) {
      return "Hello " + name + "!";
   }

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

活动是相互独立的，通常可由不同的工作流程使用。例如，任何工作流程可以使用 `say` 活动将字符串输出到控制台。工作流程也可能具有多个活动实现，每个实现执行一组不同的任务。

## HelloWorld 工作流程工作者
<a name="getting-started-example-helloworld.workflowworker"></a>

要将“Hello World\$1” 输出到控制台，必须按正确的顺序使用正确的数据依次执行活动任务。工作 HelloWorld 流工作人员基于简单的*线性工作流拓扑*来协调活动的执行，如下图所示。

![\[线性工作流程拓扑\]](http://docs.aws.amazon.com/zh_cn/amazonswf/latest/awsflowguide/images/helloworld_topology.png)


三个活动按顺序执行，并将数据从一个活动传输到下一个活动。

 HelloWorld 工作流工作人员只有一个方法，即工作流的入口点，该方法在`GreeterWorkflow`界面中定义，如下所示：

```
public interface GreeterWorkflow {
   public void greet();
}
```

`GreeterWorkflowImpl` 类实现该接口，如下所示：

```
public class GreeterWorkflowImpl implements GreeterWorkflow{
   private GreeterActivities operations = new GreeterActivitiesImpl();

   public void greet() {
      String name = operations.getName();
      String greeting = operations.getGreeting(name);
      operations.say(greeting);
   }
}
```

该`greet`方法通过创建的实例`GreeterActivitiesImpl`、按正确的顺序调用每个活动方法并将相应的数据传递给每个方法来实现 HelloWorld 拓扑。

## HelloWorld 工作流程入门
<a name="getting-started-example-helloworld.starter"></a>

*工作流程启动程序* 是一个启动工作流程执行的应用程序，可能还会在工作流程执行时与其进行通信。该`GreeterMain`类实现了 HelloWorld 工作流程启动器，如下所示：

```
public class GreeterMain {
   public static void main(String[] args) {
      GreeterWorkflow greeter = new GreeterWorkflowImpl();
      greeter.greet();
   }
}
```

`GreeterMain` 创建一个 `GreeterWorkflowImpl` 实例并调用 `greet` 以运行工作流程工作线程。将 `GreeterMain` 作为 Java 应用程序运行，您应该会在控制台输出中 看到“Hello World\$1”。