【发布时间】:2017-07-25 05:16:06
【问题描述】:
我有一个带有 JSON REST API 的 GAE 应用程序。对于每个实体,我都有一个带有对象化代码的 DAO 类,以及一个使用 DAO 的服务。该服务负责与实体相关的业务逻辑。对 API 的某些调用预计会使用跨服务的逻辑,即调用多个服务中的方法。
我希望对 API 的每次调用都是一个事务,即所有数据存储操作都成功并被持久化,或者如果发生异常,所有数据存储操作都失败并且没有一个被持久化。 我可以看到,如果我执行两个单独的 ofy().transact(...) 并在两者之间抛出异常,那么第一个 ofy.transact() 的操作将被持久化,而第二个则不会。如果我执行一次 ofy().transact() 并在其中执行一次数据存储操作,然后抛出异常并执行第二次数据存储操作,则不会保留任何操作。 据此,我假设只有在 ofy().transact() 中抛出异常时才会发生回滚。
我的问题是: 如果我有一个跨服务工作的 API 调用,我需要将对服务的调用封装在 ofy().transact 中,以确保在发生异常时回滚? 我希望在 DAO 类中保留我对 objectify 的所有使用,因此另一种解决方案会很棒。
谢谢, -路易丝
【问题讨论】:
标签: java google-app-engine transactions google-cloud-datastore objectify