Database DB2/JDBC数据库:可以加入事务吗?

Database DB2/JDBC数据库:可以加入事务吗?,database,jdbc,transactions,db2,Database,Jdbc,Transactions,Db2,我正在处理一个应用程序A,它启动一个数据库事务,做一些工作,然后调用一个远程系统B,后者反过来调用A。这个web服务调用的处理(在站点A上)也执行一些DB操作。现在,如果在站点A上完成的初始工作以及作为处理站点A上的web服务调用的一部分所做的工作都在同一个数据库事务中完成,这样他们就可以看到彼此的数据,并将更新提交/回滚到一起,由于光标稳定性等原因不会导致阻塞。是否有标准方法实现此目的?例如,是否可以从打开的事务中提取“事务ID”,然后将其包含在web服务调用中,并使用该事务ID“加入”已打开

我正在处理一个应用程序A,它启动一个数据库事务,做一些工作,然后调用一个远程系统B,后者反过来调用A。这个web服务调用的处理(在站点A上)也执行一些DB操作。现在,如果在站点A上完成的初始工作以及作为处理站点A上的web服务调用的一部分所做的工作都在同一个数据库事务中完成,这样他们就可以看到彼此的数据,并将更新提交/回滚到一起,由于光标稳定性等原因不会导致阻塞。是否有标准方法实现此目的?例如,是否可以从打开的事务中提取“事务ID”,然后将其包含在web服务调用中,并使用该事务ID“加入”已打开的事务?还是必须手动实现这种机制(即,在一个框架中管理事务和底层对象,然后该框架可以代表代码的其余部分执行请求,并且可以支持这种“事务ID”功能)?这似乎是一个相当普遍的需求,所以我认为可能有一种标准的方式?

您所描述的被称为分布式事务。它需要一个额外的软件,一个事务管理器(TM),来处理资源管理器的协调(在本例中,DB2充当资源管理器)。该手册提供了详细信息,以及如何为分布式事务配置DB2和应用程序


从数据库的角度来看,单独的请求(在您的示例中,A中的初始工作和B的回调)仍将启动单独的工作单元,但TM将确保它们以原子方式提交或回滚。

关于您的最后一句话,请确认,这意味着不同的请求无法看到彼此,也就是说,它们不是真正在同一事务中运行?如果DB设置为游标稳定,第一个请求完成的工作实际上可以阻止第二个请求完成的简单选择,因为这是在不同的事务中运行的?一个工作单元有一个会话(连接)范围,所以是的,不同的连接将始终有不同的工作单元,是的,他们有可能互相阻碍。一般来说,您不希望在外部活动(您对远程系统B的调用)期间持有锁,因此您可能需要重新考虑您的实现方法。非常好,感谢您的澄清。我同意设计不是最优的,但是知道正确的方法是重新设计整个流程,而不是试图在DB级别解决它是很好的。