

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

# でのウェーターの使用 AWS SDK for Java 2.x
<a name="waiters"></a>

 AWS SDK for Java 2.x のウェーターユーティリティを使用すると、 AWS リソースに対してオペレーションを実行する前に、リソースが指定された状態であることを検証できます。

*ウェーター*は、目的の状態に達するまで (または AWS リソースが目的の状態に到達しないと判断されるまで）、 DynamoDB テーブルや Amazon S3 バケットなどのリソースをポーリングするために使用される抽象化です。面倒でエラーが発生しやすい AWS リソースを継続的にポーリングするロジックを記述する代わりに、ウェーターを使用してリソースをポーリングし、リソースの準備ができた後もコードを実行し続けることができます。

## 前提条件
<a name="prerequisiteswaiters"></a>

でプロジェクトでウェーターを使用する前に AWS SDK for Java、[AWS SDK for Java 「2.x のセットアップ](setup.md)」のステップを完了する必要があります。

 AWS SDK for Javaのバージョン `2.15.0` 以降を使用するように、プロジェクトの依存関係を (例: `pom.xml` または `build.gradle` ファイルで) 設定する必要もあります。

例えば、次のようになります。

```
<project>
  <dependencyManagement>
   <dependencies>
      <dependency>
        <groupId>software.amazon.awssdk</groupId>
        <artifactId>bom</artifactId>
        <version>2.27.21</version>
        <type>pom</type>
        <scope>import</scope>
      </dependency>
   </dependencies>
  </dependencyManagement>
</project>
```

## ウェーターの使用
<a name="id1waiters"></a>

ウェイターオブジェクトをインスタンス化するには、最初にサービスクライアントを作成します。サービスクライアントの `waiter()` メソッドをウェイターオブジェクトの値として設定します。ウェイターインスタンスが存在するようになったら、適切なコードを実行するようにその応答オプションを設定します。

### 同期プログラミング
<a name="synchronous-programming"></a>

次のコードスニペットは、 DynamoDB テーブルが存在し、**ACTIVE** 状態になるまで待機する方法を示しています。

```
DynamoDbClient dynamo = DynamoDbClient.create();
DynamoDbWaiter waiter = dynamo.waiter();

WaiterResponse<DescribeTableResponse> waiterResponse =
  waiter.waitUntilTableExists(r -> r.tableName("myTable"));

// print out the matched response with a tableStatus of ACTIVE
waiterResponse.matched().response().ifPresent(System.out::println);
```

### 非同期プログラミング
<a name="asynchronous-programming"></a>

次のコードスニペットは、 DynamoDB テーブルが存在しないまで待機する方法を示しています。

```
DynamoDbAsyncClient asyncDynamo = DynamoDbAsyncClient.create();
DynamoDbAsyncWaiter asyncWaiter = asyncDynamo.waiter();

CompletableFuture<WaiterResponse<DescribeTableResponse>> waiterResponse =
          asyncWaiter.waitUntilTableNotExists(r -> r.tableName("myTable"));

waiterResponse.whenComplete((r, t) -> {
  if (t == null) {
   // print out the matched ResourceNotFoundException
   r.matched().exception().ifPresent(System.out::println);
  }
}).join();
```

## ウェイターを設定する
<a name="configuring-waiters"></a>

ビルダーで `overrideConfiguration()` を使用して、ウェイターの設定をカスタマイズできます。一部の操作では、リクエストを実行する際にカスタム設定を適用できます。

### ウェーターを設定する
<a name="configure-a-waiter"></a>

次のコードスニペットは、ウェイターの設定を上書きする方法を示しています。

```
// sync
DynamoDbWaiter waiter =
   DynamoDbWaiter.builder()
          .overrideConfiguration(b -> b.maxAttempts(10))
          .client(dynamoDbClient)
          .build();
// async
DynamoDbAsyncWaiter asyncWaiter =
   DynamoDbAsyncWaiter.builder()
          .client(dynamoDbAsyncClient)
          .overrideConfiguration(o -> o.backoffStrategy(
               FixedDelayBackoffStrategy.create(Duration.ofSeconds(2))))
          .scheduledExecutorService(Executors.newScheduledThreadPool(3))
          .build();
```

### 特定のリクエストの設定をオーバーライドする
<a name="override-configuration-for-a-specific-request"></a>

次のコードスニペットは、リクエストごとにウェイターの設定を上書きする方法を示しています。すべての操作でカスタマイズ可能な設定があるわけではないことに注意してください。

```
waiter.waitUntilTableNotExists(b -> b.tableName("myTable"),
               o -> o.maxAttempts(10));

asyncWaiter.waitUntilTableExists(b -> b.tableName("myTable"),
                 o -> o.waitTimeout(Duration.ofMinutes(1)));
```

## コードの例
<a name="code-examples"></a>

でウェーターを使用する完全な例については DynamoDB、 AWS 「 Code Examples Repository」の[CreateTable.java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/869b7ddbc7c8f66c7c45acd5b813429aff37003e/javav2/example_code/dynamodb/src/main/java/com/example/dynamodb/CreateTable.java)」を参照してください。

でウェーターを使用する完全な例については Amazon S3、 AWS 「 Code Examples Repository」の[S3BucketOps.java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/869b7ddbc7c8f66c7c45acd5b813429aff37003e/javav2/example_code/s3/src/main/java/com/example/s3/S3BucketOps.java)」を参照してください。