我正在开发一个应用程序,A,它启动一个数据库事务,做一些工作,然后调用一个远程系统,B,然后回调到A.处理这个Web服务调用(在站点A上)还执行一些数据库操作。现在,如果在站点A上完成的初始工作以及作为处理站点A上的Web服务调用的一部分完成的工作,将在同一数据库事务中完成以便他们可以看到彼此的数据,那将是很好的。他们的更新提交/回滚在一起,不会因光标稳定性等而导致阻塞。有没有一种标准的方法来实现这一点?例如,是否可以提取交易ID"从一个开放的交易中,然后将其包括在网络服务电话中,并使用该交易ID来加入"已经开放的交易?或者是否必须手动实现这样的机制(即在框架中管理事务和底层对象,然后可以代表其余代码执行请求,并且可以支持这样的"事务ID&#34 ;功能)?这似乎是一个相当普遍的要求,所以我认为可能有一种标准方式?
答案 0 :(得分:0)
您描述的内容称为分布式事务。它需要一个额外的软件,一个事务管理器(TM)来处理资源管理器的协调(在这种情况下,DB2充当资源管理器)。该手册有一个conceptual overview of distributed transactions,以及有关如何为分布式事务配置DB2和应用程序的详细信息。
从数据库的角度来看,单独的请求(在您的示例中,A中的初始工作和来自B的回调)仍将启动单独的工作单元,但TM将确保它们以原子方式提交或回滚。