场景是这样的
我们有两个应用程序A和B,它们都在不同的数据库(Oracle 9i )事务中运行
应用程序A-将一些数据插入到数据库中,然后调用应用程序B。应用程序B-将一些数据插入到数据库中,与A的数据相关(通过外键)。向应用程序A返回" ID“应用程序A-使用ID插入更多数据,包括来自B的ID
现在,因为它们是独立的事务,但都依赖于彼此事务中的数据,所以我们需要在对每个应用程序的调用之间提交。当然,如果出现任何错误,这将使回滚变得非常困难。
你将如何处理这个问题,并对代码进行最小程度的重构。这肯定是SOA世界中的一个常见问题吧?
--更新
我在Oracle9i中找不到任何东西,但是Oracle11g提供了DBMS_XA,它做的正是我想要的。
发布于 2008-09-18 02:20:27
您有三个选项:
请注意,如果应用程序A依赖于应用程序B的外键,那么您可能会遇到选项3的问题(您没有说明,所以这可能不是问题)。Oracle的读取一致性可能会阻止这种情况被允许,因为应用程序A的事务将在应用程序B之前开始。
发布于 2008-09-18 07:28:48
以下是一些建议:
发布于 2008-09-18 02:30:03
您可能会将来自应用程序A的数据插入到“临时”区域中,以便应用程序B可以执行A和B的插入,而不需要在这两个应用程序中做太多更改。它不是特别优雅,但它可能会起到作用。
在另一个场景中,您可以向您的数据添加一个“确认”标志字段,该字段在整个流程成功运行后更新。如果在某一时刻失败,可能更容易追踪到需要回滚的记录(实际上是删除)。
https://stackoverflow.com/questions/89320
复制相似问题