

Le traduzioni sono generate tramite traduzione automatica. In caso di conflitto tra il contenuto di una traduzione e la versione originale in Inglese, quest'ultima prevarrà.

# Usare i camerieri nel AWS SDK for Java 2.x
<a name="waiters"></a>

L'utilità waiters della versione AWS SDK per Java 2.x consente di verificare che le risorse si trovino in uno stato specifico prima di eseguire operazioni su tali AWS risorse.

Un *cameriere* è un'astrazione utilizzata per esaminare le AWS risorse, come DynamoDB tabelle o Amazon S3 bucket, fino al raggiungimento dello stato desiderato (o fino a quando non viene stabilito che la risorsa non raggiungerà mai lo stato desiderato). Invece di scrivere una logica per il polling continuo AWS delle risorse, operazione che può essere complessa e soggetta a errori, è possibile utilizzare i camerieri per interrogare una risorsa e far sì che il codice continui a funzionare quando la risorsa è pronta.

## Prerequisiti
<a name="prerequisiteswaiters"></a>

[Prima di poter utilizzare i camerieri in un progetto con, è necessario completare i passaggi descritti in Configurazione della versione AWS SDK per Java 2.x. AWS SDK per Java](setup.md)

È inoltre necessario configurare le dipendenze del progetto (ad esempio, nel `build.gradle` file `pom.xml` o) per utilizzare la versione `2.15.0` o successiva di. AWS SDK per Java

Esempio:

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

## Usare i camerieri
<a name="id1waiters"></a>

Per creare un'istanza di un oggetto waiters, crea prima un client di servizio. Imposta il `waiter()` metodo del client del servizio come valore dell'oggetto waiter. Una volta che l'istanza del cameriere esiste, imposta le sue opzioni di risposta per eseguire il codice appropriato.

### Programmazione sincrona
<a name="synchronous-programming"></a>

**Il seguente frammento di codice mostra come attendere che una DynamoDB tabella esista e sia in uno stato ATTIVO.**

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

### Programmazione asincrona
<a name="asynchronous-programming"></a>

Il seguente frammento di codice mostra come attendere che una DynamoDB tabella non esista più.

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

## Configura i camerieri
<a name="configuring-waiters"></a>

Puoi personalizzare la configurazione di un cameriere utilizzando il comando `overrideConfiguration()` on its builder. Per alcune operazioni, è possibile applicare una configurazione personalizzata quando si effettua la richiesta.

### Configura un cameriere
<a name="configure-a-waiter"></a>

Il seguente frammento di codice mostra come sovrascrivere la configurazione su un cameriere.

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

### Sostituisci la configurazione per una richiesta specifica
<a name="override-configuration-for-a-specific-request"></a>

Il seguente frammento di codice mostra come sovrascrivere la configurazione di un cameriere in base alla richiesta. Nota che solo alcune operazioni hanno configurazioni personalizzabili.

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

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

## Esempi di codice
<a name="code-examples"></a>

Per un esempio completo di utilizzo di 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) nel Code Examples Repository. AWS 

Per un esempio completo di utilizzo di waiters with Amazon S3, vedete [S3 BucketOps](https://github.com/awsdocs/aws-doc-sdk-examples/blob/869b7ddbc7c8f66c7c45acd5b813429aff37003e/javav2/example_code/s3/src/main/java/com/example/s3/S3BucketOps.java) .java nel Code Examples Repository. AWS 