

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

# AWS Flow Framework 基本的な概念: アクティビティとワークフロー間のデータ交換
<a name="awsflow-basics-data-exchange-activities-workflows"></a>

非同期アクティビティクライアントメソッドを呼び出すと、*Promise* (*Future* とも呼ばれる) オブジェクトがすぐに返ります。このオブジェクトはアクティビティメソッドの戻り値を表します。初期状態では、Promise は、準備未完了状態であり、戻り値は未定義です。アクティビティメソッドがタスクを完了して戻ると、フレームワークは、ネットワーク全体で戻り値をワークフローワーカーにマーシャリングします。これにより、値が Promise に割り当てられ、オブジェクトは準備状態になります。

アクティビティメソッドに戻り値がない場合でも、Promise を使用してワークフロー実行を管理できます。返された Promise をアクティビティクライアントメソッドまたは非同期ワークフローメソッドに渡すと、オブジェクトの準備が完了するまで実行は延期されます。

1 つ以上の Promise をアクティビティクライアントメソッドに渡すと、フレームワークは、タスクをキューに入れますが、すべてのオブジェクトの準備ができるまでスケジュールを延期します。次に、各 Promise からデータを抽出して、インターネット経由でアクティビティワーカーにマーシャリングし、アクティビティワーカーはそれを標準タイプとしてアクティビティメソッドに渡します。

**注記**  
ワークフローワーカーとアクティビティワーカーの間で大量のデータを転送する必要がある場合は、データを都合のいい場所に保存し、検索情報を渡すことをお勧めします。例えば、Amazon S3 バケットにデータを保存して、その URL を渡すことができます。

## Promise <T>Type
<a name="awsflow-basics-data-exchange-activities-workflows.promise"></a>

`Promise<T>` タイプは、いくつかの点で Java `Future<T>` タイプと似ています。どちらのタイプも、非同期メソッドより返る値を表し、最初の時点では定義されていません。オブジェクトの値にアクセスするには、その `get` メソッドを呼び出します。さらに、2 つのタイプの動作は全く異なります。
+ `Future<T>` は同期構造のため、アプリケーションは非同期メソッドが完了するまで待機することができます。`get` を呼び出したが、オブジェクトの準備ができていない場合は、準備ができるまでブロックされます。
+ `Promise<T>` を使用すると、フレームワークで同期が行われます。`get` を呼び出したときに、オブジェクトが準備未完了であれば、`get` から例外がスローされます。

`Promise<T>` の主な目的は、アクティビティ間のデータを管理することです。これにより、アクティビティは、入力データが有効になるまで実行されません。ワークフローワーカーが `Promise<T>` オブジェクトに直接アクセスすることはほとんどありません。アクティビティから次のアクティビティにオブジェクトを渡し、フレームワークとアクティビティワーカーに処理を指示します。ワークフローワーカーで、`Promise<T>` オブジェクトの値にアクセスするには、`get` メソッドを呼び出す前にオブジェクトが準備状態であることを確認します。
+ `Promise<T>` オブジェクトを非同期ワークフローメソッドに渡して値を処理することをお勧めします。非同期メソッドでは、入力 `Promise<T>` オブジェクトの準備が完了するまで実行を延期します。これにより、安全に値にアクセスできるようになります。
+ `Promise<T>` は、オブジェクトの準備が完了すると `true` を返す `isReady` メソッドを公開します。`isReady` を使用して `Promise<T>` オブジェクトをポーリングすることは推奨されていませんが、一部の状況では `isReady` が便利です。

 AWS Flow Framework for Java には、 `Settable<T>`タイプも含まれています。これは から派生`Promise<T>`し、同様の動作を持ちます。違いは、フレームワークが通常`Promise<T>`オブジェクトの値を設定し、ワークフローワーカーが の値を設定することです`Settable<T>`。

ワークフローワーカーでは、`Promise<T>` オブジェクトを作成し、その値を設定する必要があります。たとえば、`Promise<T>` オブジェクトを返す非同期メソッドでは、戻り値を作成します。
+ 入力された値を表すオブジェクトを作成するには、静的な `Promise.asPromise` メソッドを呼び出します。これにより、適切なタイプの `Promise<T>` オブジェクトを作成して値を設定し、準備状態になります。
+ `Promise<Void>` オブジェクトを作成するには、静的な `Promise.Void` メソッドを呼び出します。

**注記**  
`Promise<T>` は、有効なすべてのタイプを表すことができます。ただし、インターネット経由でデータをマーシャリングする必要がある場合、タイプとデータコンバータの間に互換性が必要です。詳細については、次のセクションを参照ください。

## データコンバータとマーシャリング
<a name="awsflow-basics-data-exchange-activities-workflows.data"></a>

は、データコンバーターを使用してインターネット経由でデータを AWS Flow Framework マーシャリングします。デフォルトでは、フレームワークは [Jackson JSON プロセッサ](https://github.com/codehaus/jackson)に基づき、データコンバータを使用します。ただし、このコンバータにはいくつかの制限があります。たとえば、文字列をキーとして使用しないマップをマーシャリングすることはできません。デフォルトのコンバータがアプリケーションにとって十分でない場合は、カスタムのデータコンバータを実装できます。詳細については、「[DataConverters](dataconverters.md)」を参照してください。