本文属于机器翻译版本。若本译文内容与英语原文存在差异,则一律以英文原文为准。
HelloWorld 应用程序
为了说明 Amazon SWF 应用程序的构建方式,我们将创建一个 Java 应用程序,它的行为与工作流类似,但在单个进程中本地运行。不需要连接到 Amazon Web Services。
注意
HelloWorldWorkflow 示例以该应用程序为基础,连接到 Amazon SWF 来处理工作流管理。
工作流程应用程序包含三个基本组件:
-
活动工作线程 支持一组活动,每个活动是一个独立执行的方法以执行特定的任务。
-
工作流程工作线程 协调活动执行并管理数据流。这是工作流程拓扑 的编程实现,这基本上是一个流程图,它定义了何时执行各种活动,这些活动是按顺序执行还是同时执行,等等。
-
工作流程启动程序 启动工作流程实例 (称为执行),并且可以在执行期间与其进行交互。
HelloWorld 是作为三个类和两个相关接口实现的,如以下几节中所述。在启动之前,您应按照设置 AWS 中的说明设置开发环境并新建一个 设置适用于 Java 的 AWS Flow Framework Java 项目。用于以下演练的程序包名称均为 helloWorld.
。要使用这些名称,请在 aop.xml 中设置 XYZ
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!”。