gpt4 book ai didi

java - 请求的对象化事务处理的最佳实践是什么

转载 作者:行者123 更新时间:2023-11-30 06:51:49 24 4
gpt4 key购买 nike

我有一个带有 JSON REST API 的 GAE 应用程序。对于每个实体,我都有一个带有对象化代码的 DAO 类,以及一个使用 DAO 的服务。服务负责与实体相关的业务逻辑。对 API 的某些调用预计会跨服务使用逻辑,即调用多个服务中的方法。

我希望对 API 的每次调用都是一个事务,即所有数据存储操作都成功并被持久化,或者如果发生异常,所有数据存储操作都会失败并且没有一个被持久化。我可以看到,如果我执行两个单独的 ofy().transact(...) 并在其间抛出异常,则第一个 ofy.transact() 的操作将被保留,但第二个则不会。如果我执行 ofy().transact() 之一,并在其中执行一个数据存储操作,然后抛出异常并执行第二个数据存储操作,则不会保留任何操作。由此我假设只有在 ofy().transact() 内部抛出异常时才会发生回滚。

我的问题是:如果我有一个跨服务工作的 API 调用,我需要将对服务的调用封装在 ofy().transact 中,以确保发生异常时回滚?我希望在 DAO 类中保留对 objectify 的所有使用,因此替代解决方案会很棒。

谢谢,-路易斯

最佳答案

事务是一个跨领域的问题 - 基本上是一些线程本地状态。当您启动事务时,它会跟随线程直到事务完成(无论您嵌套调用 transact() 多少次)。

如果您不希望在代码库中引用特定于 Objectify 的类,只需为 transact() 创建您自己的包装器即可。事务工作单元是一个广泛的数据库概念。

但是,请记住,数据存储区中的事务在某种程度上是有限的,您不能像通常使用 RDBMS 那样在任何地方应用“启动事务”。

关于java - 请求的对象化事务处理的最佳实践是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42606933/

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