1

我有一个带有JSON REST API的GAE应用程序。对于每个实体,我都有一个带有物化代码的DAO类,以及一个使用DAO的服务。该服务负责与实体相关的业务逻辑。一些对API的调用预计会在整个服务中使用逻辑,即在多个服务中调用方法。针对某个请求的对象化事务处理的最佳做法

我希望对API的每次调用都是一个事务,即或者所有数据存储操作都成功并保留,或者如果发生异常,则所有数据存储操作都会失败并且它们都不会被保留。 我可以看到,如果我做了两个单独的of()。transact(...)并在它们之间引发异常,那么第一个ofy.transact()的操作会持续存在,但不会是第二个。如果我执行了一个ofy().transact()并且在这里执行一个数据存储操作,然后抛出一个异常并执行第二个数据存储操作,那么这些操作都不会被持久化。 从这里我假设只有在ofy()。transact()内引发异常时才会发生回滚。

我的问题是: 如果我有一个跨服务的API调用,我需要在ofy()。transact中封装对服务的调用,以确保发生异常时的回滚? 我想在DAO类中保留所有对象的使用,所以另一种解决方案会很棒。

感谢, -Louise

回答

1

事务是一个横切关注点 - 基本上有点线程局部的状态。当你开始一个交易时,它会跟随该线程,直到交易完成(无论您将呼叫嵌套到transact()多少次)。

如果您不想在您的代码库中引用特定于Objectify的类,请自行创建transact()的包装。事务性工作单元是一个广泛的数据库概念。

但是请记住,数据存储区中的事务有一定的限制,您不能以通常使用RDBMS的方式将“启动事务”应用于任何地方。

相关问题