繁体   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