簡體   English   中英

dynamoDB事務管理器

[英]dynamoDB Transaction Manager

我有一個場景,我必須執行多個查詢(刪除和添加),因此我正在使用dynamoDB的事務庫,但出現序列化錯誤。 我將此網址作為示例http://aws.amazon.com/blogs/aws/dynamodb-transaction-library/

下面是我的代碼:

DynamoDBScanExpression scanExpression = new DynamoDBScanExpression();
PaginatedScanList<FinanceIndex> financeIndex = mapper.scan(FinanceIndex.class, scanExpression);
String index, index1 = null;

AWSCredentials credentials = Application.getCredentials();
AmazonDynamoDB client = new AmazonDynamoDBClient(credentials);
TransactionManager manager = new TransactionManager(client, "Transactions", "TransactionImages");
TransactionManager.verifyOrCreateTransactionTable(client, "Transactions", new Long(10) , new Long(10), new Long(1060));
TransactionManager.verifyOrCreateTransactionImagesTable(client, "TransactionImages", new Long(10), new Long(10), new Long(1060));
for (FinanceIndex financeID : financeIndex) {
  index1 = financeID.getID();
  Transaction t1 = manager.newTransaction();
  Map<String, AttributeValue> reply1 = new HashMap<String, AttributeValue>();
  reply1.put("id", new AttributeValue(index1));
  t1.deleteItem(new DeleteItemRequest().withTableName("FinanceIndex").withKey(reply1));

  //mapper.delete(financeID);
  int id = Integer.valueOf(index1);
  id = id + 1;
  index = String.valueOf(id);
  financeID.setID(index);
  //mapper.save(financeID);
  Map<String, AttributeValue> reply2 = new HashMap<String, AttributeValue>();
  reply2.put("id", new AttributeValue(financeID.getID()));
  t1.putItem((new PutItemRequest().withTableName("FinanceIndex").withItem(reply2)));
  t1.commit();
}
return index1;

我得到以下錯誤:

com.amazonaws.services.dynamodbv2.transactions.exceptions.TransactionAssertionException:d1c3bb93-e9b7-4052-b328-b357ab412a3a-無法序列化請求com.amazonaws.services.dynamodbv2.transactions.Request $ DeleteItem.binddata.bind .JsonMappingException:未找到類com.amazonaws.event.ProgressListener $ 1的序列化程序,也未發現創建BeanSerializer的屬性(為避免異常,請禁用SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS))(通過參考鏈:com.amazonaws.services.dynamodbv2.transactions .DeleteItem [ “請求”] - > com.amazonaws.services.dynamodbv2.model.DeleteItemRequest [ “generalProgressListener”])

誰能告訴我我在做什么錯? 提前致謝。

我也使用此庫,並且出現了類似的問題並進行了研究。

該庫現在不是AWS Java SDK的維護。 因此,此庫在AWS Java SDK 1.7.6之前可以正常工作。

因為1.7.7以上具有關於條件表達式的新功能。 http://aws.amazon.com/releasenotes/Java/2402335129612731

Dynamodb事務庫未遵循此功能,因此無法創建正確的查詢。 因此不能使用1.7.7一起添加Future和dynamodb-transaction。

超過1.7.7的庫有如此美好的未來,如條件原子計數器。 但是交易功能真的也很重要。

現在只有這樣,我們才能選擇使用帶有AWS Java SDK 1.7.6的事務庫,或者不使用帶有最新AWS Java SDK的事務庫。

祝好運。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM