gpt4 book ai didi

java - 事务和 ConcurrentModificationException 文档歧义

转载 作者:行者123 更新时间:2023-11-30 11:46:39 25 4
gpt4 key购买 nike

最新文档在这里http://code.google.com/appengine/docs/java/datastore/transactions.html状态:“如果您的应用程序在提交事务时收到异常,并不总是意味着事务失败。在事务已提交并最终将成功应用的情况下,您可能会收到 DatastoreTimeoutException、ConcurrentModificationException 或 DatastoreFailureException 异常。只要有可能,使您的数据存储交易是幂等的,因此如果您重复交易,最终结果将是相同的。”

  1. 如何知道交易是否成功?
  2. 捕捉到 ConcurrentModificationException 后我要做什么?我怎么知道我是否必须重试?
  3. 例如,您建议如何在不知道是否成功的情况下使支付交易成为幂等的?

最佳答案

一些注意事项:

  1. 如文档所述 - 您无法确定交易是否已应用。这就是问题的核心。

  2. 在所有异常情况下回滚。请参阅此示例:http://code.google.com/appengine/docs/java/datastore/transactions.html#Isolation_and_Consistency

  3. 让它成为幂等的——意思是如果你调用它两次,它没有关系。在支付交易的情况下,您创建“支付交易”实体。对于每笔交易,您都会创建一个包含支付数据的特殊实体,并将其写入数据存储区。这里的关键是从支付数据中生成一个自然ID:用户ID、来源账户、支付金额、目标账户、日期/小时/分钟。那么如果重复交易,它将创建一个具有相同 ID 的支付交易实体并覆盖旧的——这意味着如果只完成一两个交易,结果将是相同的。 (然后通过一系列交易计算用户帐户的余额并将其添加到期初金额 - 这是银行在实践中实际做的 AFAIK)。

关于java - 事务和 ConcurrentModificationException 文档歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9661407/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com