HelloWorld 应用程序 - AWS Flow Framework 适用于 Java

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

HelloWorld 应用程序

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

注意

HelloWorldWorkflow 示例以该应用程序为基础,连接到 Amazon SWF 来处理工作流管理。

工作流程应用程序包含三个基本组件:

  • 活动工作线程 支持一组活动,每个活动是一个独立执行的方法以执行特定的任务。

  • 工作流程工作线程 协调活动执行并管理数据流。这是工作流程拓扑 的编程实现,这基本上是一个流程图,它定义了何时执行各种活动,这些活动是按顺序执行还是同时执行,等等。

  • 工作流程启动程序 启动工作流程实例 (称为执行),并且可以在执行期间与其进行交互。

HelloWorld 是作为三个类和两个相关接口实现的,如以下几节中所述。在启动之前,您应按照设置 AWS 中的说明设置开发环境并新建一个 设置适用于 Java 的 AWS Flow Framework Java 项目。用于以下演练的程序包名称均为 helloWorld.XYZ。要使用这些名称,请在 aop.xml 中设置 within 属性,如下所示:

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

要实现 HelloWorld,请在 AWS SDK 项目中创建一个名为 helloWorld.HelloWorld 的新 Java 软件包,并添加以下文件:

  • 名为 GreeterActivities.java 的接口文件。

  • 名为 GreeterActivitiesImpl.java 的类文件,它实现活动工作线程。

  • 名为 GreeterWorkflow.java 的接口文件。

  • 名为 GreeterWorkflowImpl.java 的类文件,它实现工作流程工作线程。

  • 名为 GreeterMain.java 的类文件,它实现工作流程启动程序。

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

HelloWorld 活动实现

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 工作流程工作线程

要将“Hello World!” 输出到控制台,必须按正确的顺序使用正确的数据依次执行活动任务。HelloWorld 工作流程工作线程根据简单的线性工作流程拓扑 协调活动执行,如下图所示。

线性工作流程拓扑

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

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 工作流程启动程序

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

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

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