

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

# 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！」 至 主控台，活動任務必須以正確的順序搭配正確的資料依序執行。HelloWorld 工作流程工作者會根據簡易的「線性工作流程拓撲」**協調活動執行，如下圖所示。

![\[線性工作流程拓撲\]](http://docs.aws.amazon.com/zh_tw/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` 方法實作 HelloWorld 拓撲的方法是：建立 `GreeterActivitiesImpl` 執行個體、依正確的順序呼叫各活動方法，然後將適當的資料傳遞到各方法。

## 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！」 在主控台輸出中。