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à.
Se disponi già di un'applicazione Java che utilizza Amazon DynamoDB, devi modificarla in modo che possa accedere al cluster DynamoDB Accelerator (). DAX Non è necessario riscrivere l'intera applicazione perché il client DAX Java è simile al client di basso livello DynamoDB incluso in. AWS SDK for Java
Nota
Queste istruzioni si riferiscono alle applicazioni che utilizzano AWS SDK Java 1.x. Per le applicazioni che utilizzano AWS SDK Java 2.x, vedere. Modificare un'applicazione esistente da utilizzare DAX
Si supponga di avere una tabella DynamoDB denominata Music
. La chiave di partizione della tabella è Artist
e la chiave di ordinamento è SongTitle
. Il programma seguente legge un item direttamente dalla tabella 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());
}
}
}
Per modificare il programma, sostituire il client DynamoDB con 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)
** ...
*/
}
}
Utilizzo del documento DynamoDB API
AWS SDK for Java Fornisce un'interfaccia documentale per DynamoDB. Il documento API funge da wrapper per il client DynamoDB di basso livello. Per ulteriori informazioni, consulta l'argomento relativo alle interfacce di documento.
L'interfaccia di documento può essere utilizzata anche con il client DAX di basso livello, come mostrato nell'esempio seguente.
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());
}
}
}
DAXclient asincrono
AmazonDaxClient
è sincrono. Per un'DAXAPIoperazione di lunga durata, come quella Scan
di una tabella di grandi dimensioni, ciò può bloccare l'esecuzione del programma fino al completamento dell'operazione. Se il programma deve eseguire altre operazioni mentre è in corso un'DAXAPIoperazione, è possibile utilizzarlo ClusterDaxAsyncClient
al suo posto.
Il programma seguente mostra come utilizzare ClusterDaxAsyncClient
, in combinazione con Java Future
, per implementare una soluzione senza blocchi.
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();
}
}