

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

# Utilizando camareros en el AWS SDK for Java 2.x
<a name="waiters"></a>

La utilidad waiters de la versión AWS SDK para Java 2.x permite validar que AWS los recursos se encuentran en un estado específico antes de realizar operaciones con esos recursos.

Un *camarero* es una abstracción que se utiliza para sondear AWS recursos, como DynamoDB tablas o Amazon S3 cubos, hasta que se alcance el estado deseado (o hasta que se determine que el recurso nunca alcanzará el estado deseado). En lugar de escribir una lógica para sondear continuamente AWS los recursos, lo que puede resultar engorroso y propenso a errores, puede utilizar waiters para sondear un recurso y hacer que el código siga ejecutándose una vez que el recurso esté listo.

## Requisitos previos
<a name="prerequisiteswaiters"></a>

[Para poder usar camareros en un proyecto con el AWS SDK para Java, debes completar los pasos de Configuración de la versión 2.x. AWS SDK para Java](setup.md)

También debe configurar las dependencias de su proyecto (por ejemplo, en su archivo `pom.xml` o `build.gradle`) para usar la versión `2.15.0` o posterior del AWS SDK para Java.

Por ejemplo:

```
<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>
```

## Uso de esperadores
<a name="id1waiters"></a>

Para crear una instancia de un objeto esperador, cree antes un cliente de servicio. Establece el método del cliente `waiter()` de servicio como el valor del objeto esperador. Una vez que exista la instancia de esperador, configure sus opciones de respuesta para ejecutar el código apropiado.

### Programación asíncrona
<a name="synchronous-programming"></a>

**El siguiente fragmento de código muestra cómo esperar a que una DynamoDB mesa exista y esté en estado ACTIVO.**

```
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);
```

### Programación asíncrona
<a name="asynchronous-programming"></a>

El siguiente fragmento de código muestra cómo esperar a que una DynamoDB tabla deje de existir.

```
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();
```

## Configurar los esperadores
<a name="configuring-waiters"></a>

Puede personalizar la configuración de un esperador utilizando el `overrideConfiguration()` en su creador. Para algunas operaciones, puede aplicar una configuración personalizada al realizar la solicitud.

### Configurar un esperador
<a name="configure-a-waiter"></a>

En el siguiente fragmento de código se muestra cómo anular la configuración de un esperador.

```
// 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();
```

### Anular la configuración de una solicitud específica
<a name="override-configuration-for-a-specific-request"></a>

El siguiente fragmento de código muestra cómo anular la configuración de un esperador en función de cada solicitud. Tenga en cuenta que solo algunas operaciones tienen configuraciones personalizables.

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

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

## Ejemplos de código
<a name="code-examples"></a>

Para ver un ejemplo completo del uso de waiters with DynamoDB, consulta [CreateTable.java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/869b7ddbc7c8f66c7c45acd5b813429aff37003e/javav2/example_code/dynamodb/src/main/java/com/example/dynamodb/CreateTable.java) en el AWS repositorio de ejemplos de código.

Para ver un ejemplo completo del uso de waiters with Amazon S3, consulta [S3 BucketOps .java](https://github.com/awsdocs/aws-doc-sdk-examples/blob/869b7ddbc7c8f66c7c45acd5b813429aff37003e/javav2/example_code/s3/src/main/java/com/example/s3/S3BucketOps.java) en el AWS repositorio de ejemplos de código.