2016-07-07 22 views
5

Ho una funzione Java che aggiorna un articolo DynamoDB. Voglio gestire il caso in cui l'aggiornamento non ha esito positivo per qualche motivo. Il mio codice simile a questa:come faccio a sapere se un aggiornamento o un inserimento ha avuto successo in dynamoDB utilizzando l'SDK Java?

Table table = dynamoDB.getTable(tableName); 
AttributeUpdate att = new attributeUpdate(fieldName).put(value); 
UpdateItemOutcome outcome = table.updateItem(keyFieldName, keyValue, att); 

Il risultato della chiamata updateItem è un oggetto UpdateItemOutcome. Tutto questo è un metodo getItem() che dovrebbe fornire gli attributi restituiti dall'operazione di aggiornamento e un metodo getUpdateItemResult() che fornisce un oggetto UpdateItemResult.

getItem() restituisce null anche quando la chiamata ha esito positivo. L'oggetto UpdateItemResult non sembra avere alcun metodo che mi fornisca alcun tipo di stato o errore riguardo l'operazione.

Qualcuno sa qual è la procedura migliore per verificare il risultato di operazioni come questa in DynamoDB? La domanda riguarda anche le operazioni putItem().

Grazie!

risposta

3

Nella documentazione: http://docs.aws.amazon.com/amazondynamodb/latest/APIReference/API_UpdateItem.html

Use ReturnValues if you want to get the item attributes as they appeared either before or after they were updated. For UpdateItem, the valid values are: 

    NONE - If ReturnValues is not specified, or if its value is NONE, then nothing is returned. (This setting is the default for ReturnValues.) 

    ALL_OLD - If UpdateItem overwrote an attribute name-value pair, then the content of the old item is returned. 

    UPDATED_OLD - The old versions of only the updated attributes are returned. 

    ALL_NEW - All of the attributes of the new version of the item are returned. 

    UPDATED_NEW - The new versions of only the updated attributes are returned. 

There is no additional cost associated with requesting a return value aside from the small network and processing overhead of receiving a larger response. No Read Capacity Units are consumed. 

Values returned are strongly consistent 

Type: String 

Valid Values: NONE | ALL_OLD | UPDATED_OLD | ALL_NEW | UPDATED_NEW 

Required: No 

si può fare:

UpdateItemSpec updateItemSpec = new UpdateItemSpec(); 
... 
updateItemSpec.withReturnValues(ReturnValue.ALL_NEW); 

Poi il UpdateItemOutcome avranno i campi popolati.

Tuttavia, DynamoDB genera un'eccezione se l'operazione di aggiornamento o di inserimento non riesce, quindi se si desidera solo verificare se l'operazione è riuscita, non è necessario ottenere i valori di ritorno.

+0

Grazie, funzionerebbe molto bene. Mi sono già trasferito alle eccezioni, ma questa è una risposta completa. –