

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

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

HelloWorldWorkflow および HelloWorldWorkflowAsync では、Amazon SWF は、ワークフローとアクティビティ実装間の相互作用を仲介しますが、1 つのプロセスとしてローカルに実行されます。`GreeterMain` は、個別のプロセスですが、同じシステム上で実行されます。

Amazon SWF の主な機能は、分散アプリケーションをサポートすることです。例えば、ワークフローワーカーは Amazon EC2 インスタンス、ワークフロースターターはデータセンターコンピュータ、アクティビティはクライアントデスクトップコンピュータといったように実行できます。さまざまなシステムでさまざまなアクティビティを実行できます。

HelloWorldWorkflowDistributed アプリケーションは、2 つのシステムと 3 つのプロセスでアプリケーションを分散するように、HelloWorldWorkflowAsync を拡張します。
+ ワークフローとワークフロースターターは、別々のプロセスを 1 つのシステムで実行します。
+ アクティビティは、別々のシステムで実行されます。

アプリケーションを実装するには、helloWorld.HelloWorldWorkflowAsync パッケージのコピーをプロジェクトディレクトリに作成し、helloWorld.HelloWorldWorkflowDistributed という名前を付けます。以下のセクションでは、元の HelloWorldWorkflowAsync コードを変更し、2 つのシステムと 3 つのプロセスでアプリケーションを分散する方法について説明します。

別々のシステムで実行するために、ワークフロー実装やアクティビティ実装、バージョン番号を変更する必要はありません。また、`GreeterMain` の変更も不要です。必要なのは、アクティビティとワークフローのホストの変更のみです。

HelloWorldWorkflowAsync では、1 つのアプリケーションをワークフローとアクティビティのホストとして使用できます。ワークフロー実装とアクティビティの実装を別々のシステムで実行するには、アプリケーションを個別に実装する必要があります。GreeterWorker をプロジェクトから削除して、2 つの新しいクラスファイル (GreeterWorkflowWorker および GreeterActivitiesWorker) を追加します。

HelloWorldWorkflowDistributed は、アクティビティホストを次のように GreeterActivitiesWorker に実装します。

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient;
import com.amazonaws.services.simpleworkflow.flow.ActivityWorker;

public class GreeterActivitiesWorker {
   public static void main(String[] args) throws Exception {
      ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000);

      String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID");
      String swfSecretKey = System.getenv("AWS_SECRET_KEY");
      AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey);

      AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config);
      service.setEndpoint("https://swf.us-east-1.amazonaws.com");

      String domain = "helloWorldExamples";
      String taskListToPoll = "HelloWorldAsyncList";

      ActivityWorker aw = new ActivityWorker(service, domain, taskListToPoll);
      aw.addActivitiesImplementation(new GreeterActivitiesImpl());
      aw.start();
   }
}
```

HelloWorldWorkflowDistributed は、ワークフローホストを次のように `GreeterWorkflowWorker` に実装します。

```
import com.amazonaws.ClientConfiguration;
import com.amazonaws.auth.AWSCredentials;
import com.amazonaws.auth.BasicAWSCredentials;
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflow;
import com.amazonaws.services.simpleworkflow.AmazonSimpleWorkflowClient;
import com.amazonaws.services.simpleworkflow.flow.WorkflowWorker;

public class GreeterWorkflowWorker {
   public static void main(String[] args) throws Exception  {
      ClientConfiguration config = new ClientConfiguration().withSocketTimeout(70*1000);

      String swfAccessId = System.getenv("AWS_ACCESS_KEY_ID");
      String swfSecretKey = System.getenv("AWS_SECRET_KEY");
      AWSCredentials awsCredentials = new BasicAWSCredentials(swfAccessId, swfSecretKey);

      AmazonSimpleWorkflow service = new AmazonSimpleWorkflowClient(awsCredentials, config);
      service.setEndpoint("https://swf.us-east-1.amazonaws.com");

      String domain = "helloWorldExamples";
      String taskListToPoll = "HelloWorldAsyncList";

      WorkflowWorker wfw = new WorkflowWorker(service, domain, taskListToPoll);
      wfw.addWorkflowImplementationType(GreeterWorkflowImpl.class);
      wfw.start();
   }
}
```

`GreeterActivitiesWorker` は、`WorkflowWorker` コードを使用しない `GreeterWorker`、`GreeterWorkflowWorker` は、`ActivityWorker` コードを使用しない `GreeterWorker` です。

**ワークフローを実行するには:**

1. `GreeterActivitiesWorker` で実行できる JAR ファイルをエントリポイントとして作成します。

1. ステップ 1 から JAR ファイルを別のシステムにコピーします。これにより、Java をサポートするすべてのオペレーティングシステムを実行できます。

1. 同じ Amazon SWF ドメインにアクセスできる AWS 認証情報が他のシステムで使用可能であることを確認します。

1. JAR ファイルを実行します。

1. 開発システムで Eclipse を使用して、`GreeterWorkflowWorker` および `GreeterMain` を実行します。

アクティビティがワークフローワーカーやワークフロースターターとは異なるシステムで実行されているという事実を除き、ワークフローは HelloWorldAsync とまったく同じ方法で動作します。ただし、「Hello World\$1」という文字列をコンソールに出力する `println` コールは `say` アクティビティ内にあり、出力はアクティビティワーカーで実行されているシステムに表示されます。