

Les traductions sont fournies par des outils de traduction automatique. En cas de conflit entre le contenu d'une traduction et celui de la version originale en anglais, la version anglaise prévaudra.

# Modification d’une application du kit SDK pour Java 1.x pour utiliser DAX
<a name="DAX.client.modify-your-app.java-sdk-v1"></a>

Si vous disposez déjà d’une application Java utilisant Amazon DynamoDB, vous devez la modifier pour qu’elle puisse accéder à votre cluster DynamoDB Accelerator (DAX). Le client Java étant similaire au client de bas niveau DynamoDB inclus dans l’ AWS SDK pour Java, vous n’avez pas besoin de réécrire entièrement l’application.

**Note**  
Ces instructions concernent les applications utilisant le AWS SDK for Java 1.x. Pour les applications utilisant le kit SDK  AWS pour Java 2.x, consultez [Modification d’une application existante pour utiliser DAX](DAX.client.modify-your-app.md).

Supposez que vous disposez d’une table DynamoDB nommée `Music`. La clé de partition de la table est `Artist` et sa clé de tri est `SongTitle`. Le programme suivant lit un élément directement dans la table `Music`.

```
import java.util.HashMap;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.GetItemRequest;
import com.amazonaws.services.dynamodbv2.model.GetItemResult;

public class GetMusicItem {

    public static void main(String[] args) throws Exception {

        // Create a DynamoDB client
        AmazonDynamoDB client = AmazonDynamoDBClientBuilder.standard().build();

        HashMap<String, AttributeValue> key = new HashMap<String, AttributeValue>();
        key.put("Artist", new AttributeValue().withS("No One You Know"));
        key.put("SongTitle", new AttributeValue().withS("Scared of My Shadow"));

        GetItemRequest request = new GetItemRequest()
            .withTableName("Music").withKey(key);

        try {
            System.out.println("Attempting to read the item...");
            GetItemResult result = client.getItem(request);
            System.out.println("GetItem succeeded: " + result);

        } catch (Exception e) {
            System.err.println("Unable to read item");
            System.err.println(e.getMessage());
        }
    }
}
```

Pour modifier le programme, vous remplacez le client DynamoDB par un client DAX.

```
import java.util.HashMap;

import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazon.dax.client.dynamodbv2.AmazonDaxClientBuilder;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.GetItemRequest;
import com.amazonaws.services.dynamodbv2.model.GetItemResult;

public class GetMusicItem {

    public static void main(String[] args) throws Exception {

    //Create a DAX client

    AmazonDaxClientBuilder daxClientBuilder = AmazonDaxClientBuilder.standard();
    daxClientBuilder.withRegion("us-east-1").withEndpointConfiguration("mydaxcluster.2cmrwl.clustercfg.dax.use1.cache.amazonaws.com:8111");
    AmazonDynamoDB client = daxClientBuilder.build();


       /*
       ** ...
       ** Remaining code omitted (it is identical)
       ** ...
       */

    }
}
```

## Utilisation de l’API de document DynamoDB
<a name="DAX.client.modify-your-app.document-api"></a>

 AWS SDK pour Java fournit une interface documentaire pour DynamoDB. L’API Document agit en tant qu’encapsuleur englobant le client DynamoDB de bas niveau. Pour plus d’informations, consultez [Interfaces de document](https://docs.aws.amazon.com/amazondynamodb/latest/developerguide/Programming.SDKs.Interfaces.Document.html).

L’interface de document peut également être utilisée avec le client DAX de bas niveau comme dans l’exemple suivant.

```
import com.amazonaws.services.dynamodbv2.AmazonDynamoDB;
import com.amazon.dax.client.dynamodbv2.AmazonDaxClientBuilder;
import com.amazonaws.services.dynamodbv2.document.DynamoDB;
import com.amazonaws.services.dynamodbv2.document.GetItemOutcome;
import com.amazonaws.services.dynamodbv2.document.Table;

public class GetMusicItemWithDocumentApi {

    public static void main(String[] args) throws Exception {

        //Create a DAX client

        AmazonDaxClientBuilder daxClientBuilder = AmazonDaxClientBuilder.standard();
        daxClientBuilder.withRegion("us-east-1").withEndpointConfiguration("mydaxcluster.2cmrwl.clustercfg.dax.use1.cache.amazonaws.com:8111");
        AmazonDynamoDB client = daxClientBuilder.build();

        // Document client wrapper
        DynamoDB docClient = new DynamoDB(client);

        Table table = docClient.getTable("Music");

        try {
            System.out.println("Attempting to read the item...");
            GetItemOutcome outcome = table.tgetItemOutcome(
                "Artist", "No One You Know",
                "SongTitle", "Scared of My Shadow");
            System.out.println(outcome.getItem());
            System.out.println("GetItem succeeded: " + outcome);
        } catch (Exception e) {
            System.err.println("Unable to read item");
            System.err.println(e.getMessage());
        }

    }
}
```

## Client asynchrone DAX
<a name="DAX.client.async"></a>

`AmazonDaxClient` est synchrone. Pour une opération d’API DAX de longue durée, par exemple une opération `Scan` exécutée sur une table volumineuse, ce client peut bloquer l’exécution du programme jusqu’à la fin de l’opération. Si votre programme doit effectuer d’autres tâches au cours d’une opération d’API DAX, vous pouvez utiliser `ClusterDaxAsyncClient` à la place.

Le programme suivant montre comment utiliser `ClusterDaxAsyncClient` avec `Future` de Java pour implémenter une solution sans blocage.

```
import java.util.concurrent.ExecutionException;
import java.util.concurrent.Future;

import com.amazon.dax.client.dynamodbv2.ClientConfig;
import com.amazon.dax.client.dynamodbv2.ClusterDaxAsyncClient;
import com.amazonaws.auth.profile.ProfileCredentialsProvider;
import com.amazonaws.handlers.AsyncHandler;
import com.amazonaws.services.dynamodbv2.AmazonDynamoDBAsync;
import com.amazonaws.services.dynamodbv2.model.AttributeValue;
import com.amazonaws.services.dynamodbv2.model.GetItemRequest;
import com.amazonaws.services.dynamodbv2.model.GetItemResult;

public class DaxAsyncClientDemo {
	public static void main(String[] args) throws Exception {

		ClientConfig daxConfig = new ClientConfig().withCredentialsProvider(new ProfileCredentialsProvider())
				.withEndpoints("mydaxcluster.2cmrwl.clustercfg.dax.use1.cache.amazonaws.com:8111");

		AmazonDynamoDBAsync client = new ClusterDaxAsyncClient(daxConfig);

		HashMap<String, AttributeValue> key = new HashMap<String, AttributeValue>();
		key.put("Artist", new AttributeValue().withS("No One You Know"));
		key.put("SongTitle", new AttributeValue().withS("Scared of My Shadow"));

		GetItemRequest request = new GetItemRequest()
				.withTableName("Music").withKey(key);

		// Java Futures
		Future<GetItemResult> call = client.getItemAsync(request);
		while (!call.isDone()) {
			// Do other processing while you're waiting for the response
			System.out.println("Doing something else for a few seconds...");
			Thread.sleep(3000);
		}
		// The results should be ready by now

		try {
			call.get();

		} catch (ExecutionException ee) {
			// Futures always wrap errors as an ExecutionException.
			// The *real* exception is stored as the cause of the
			// ExecutionException
			Throwable exception = ee.getCause();
			System.out.println("Error getting item: " + exception.getMessage());
		}

		// Async callbacks
		call = client.getItemAsync(request, new AsyncHandler<GetItemRequest, GetItemResult>() {

			@Override
			public void onSuccess(GetItemRequest request, GetItemResult getItemResult) {
				System.out.println("Result: " + getItemResult);
			}

			@Override
			public void onError(Exception e) {
				System.out.println("Unable to read item");
				System.err.println(e.getMessage());
				// Callers can also test if exception is an instance of
				// AmazonServiceException or AmazonClientException and cast
				// it to get additional information
			}

		});
		call.get();

	}
}
```