

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# HelloWorld アプリケーション
<a name="getting-started-example-helloworld"></a>

Amazon SWF アプリケーションの開発方法を導入するために、ワークフローのように動作するが、1 つのプロセスでローカルに実行する Java アプリケーションを作成します。アマゾン ウェブ サービスへの接続は必要ありません。

**注記**  
[HelloWorldWorkflow](getting-started-example-helloworldworkflow.md) の例では、これを基に構成されており、Amazon SWF に接続してワークフローを管理します。

ワークフローアプリケーションは、3 つの基本コンポーネントで構成されています。
+ *アクティビティワーカー*は、一連の*アクティビティ*をサポートしており、各アクティビティは、特定のタスクを実行するために個別に実行するメソッドです。
+ *ワークフローワーカー*は、アクティビティの実行を調整し、データフローを管理します。*ワークフロートポロジー*のプログラムによる結論です。これは、基本的に、順番または同時に実行されるかどうかに関係なく、さまざまなアクティビティを実行する際に定義するフローチャートです。
+ *ワークフロースターター*は、*実行*と呼ばれるワークフローインスタンスを開始し、実行時にそのインスタンスと通信できます。

HelloWorld は 3 つのクラスと 2 つの関連インターフェイスとして実装されます。詳細については、次のセクションで説明しています。開始する前に、「」の説明に従って開発環境を設定し、新しい AWS Java プロジェクトを作成する必要があります[AWS Flow Framework for 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!"`) をコンソールに出力する全体的なタスクを 3 つのタスクに分割します。各タスクは、* アクティビティメソッド* で実行されます。このアクティビティメソッドは、次のように `GreeterActivities` インターフェイスで定義されています。

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

HelloWorld には 1 つのアクティビティ (`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/ja_jp/amazonswf/latest/awsflowguide/images/helloworld_topology.png)


3 つのアクティビティは、順番に実行され、そのデータはアクティビティからアクティビティに流れます。

HelloWorld ワークフローワーカーには、ワークフローのエントリポイントとなる 1 つのメソッドがあります。このメソッドは、次のように `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` を呼び出してワークフローワーカーを実行します。Java アプリケーションとして `GreeterMain` を実行すると、「Hello World\$1」が コンソール出力に表示されます。