dynamoDB事务管理器

时间:2014-09-05 19:56:57

标签: java transactions amazon-dynamodb

我有一个场景,我必须执行多个查询(删除和添加)所以我使用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@4dcdd700 com.fasterxml。 jackson.databind.JsonMappingException:找不到类com.amazonaws.event.ProgressListener $ 1的序列化程序,并且没有发现创建BeanSerializer的属性(为了避免异常,禁用SerializationConfig.SerializationFeature.FAIL_ON_EMPTY_BEANS))(通过参考链:com.amazonaws.services。 dynamodbv2.transactions.DeleteItem [&#34;请求&#34;] - &GT; com.amazonaws.services.dynamodbv2.model.DeleteItemRequest [&#34; generalProgressListener&#34;])

谁能告诉我,我做错了什么? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

我也使用这个库,并且发生并研究了类似的问题。

此库现在不是AWS Java SDK的维护。 因此,此库正确工作,直到AWS Java SDK 1.7.6。

因为超过1.7.7有关于条件表达式的新功能。 http://aws.amazon.com/releasenotes/Java/2402335129612731

Dynamodb-transaction库不遵循此功能,无法创建正确的查询。 所以不能一起使用1.7.7添加future和dynamodb-transaction。

超过1.7.7的库具有如此美好的未来,就像条件原子计数器一样。 但交易功能也很重要..

现在只有我们可以使用AWS Java SDK 1.7.6的事务库或没有最新AWS Java SDK的事务库来选择我们。

祝你好运。