C ++和Java之间的Oracle事务传播

时间:2020-03-05 18:47:40  来源:igfitidea点击:

我们有一个现有的C ++应用程序,并将逐步替换为基于Java的新系统。在我们完全重新实现Java的所有功能之前,我们期望C ++和Java必须彼此通信(RMI,SOAP,消息传递等尚未确定)。

现在,我的经理认为我们需要Java和C ++参与同一Oracle DB事务。这与具有单个进程协调2个事务资源(例如DB和消息队列)的通常分散的事务问题有关,但与之不同。

从性能和稳定性的角度来看,我认为跨进程传播事务是一个糟糕的主意,但是仍然需要解决方案。

我熟悉XA事务,并且已经使用JBoss事务管理器进行了一些工作,但是我在谷歌上搜索并没有发现在2个流程之间传播XA事务的任何好处。

我们在Java端使用Spring,它们的文档明确指出它们在事务传播方面没有提供任何帮助。

我们不打算使用可能支持传播的传统Java EE服务器(例如:IBM Websphere)(并不是我可以找到任何权威的文档)。

对于解决方案的任何帮助或者指示,我们将不胜感激。

解决方案

回答

Laurent Schneider的博客上有一个示例,该示例使用Oracle内部的DBMS_XA包来允许多个会话在同一事务中工作。因此,有可能使Java和C ++会话参与同一事务,而无需任何其他类型的协调器。

或者,我们可以考虑使用Workspace Manager。最初旨在支持极其长时间的事务(即为拟议的开发操作大量空间数据)。本质上,我们可以创建一个工作空间,在情况下,该工作空间将大致等同于命名事务。 Java和C ++代码都可以(从单独的会话进入)该工作空间,并且都可以在该工作空间中操作和提交数据。事务完成后,我们可以将工作空间合并到LIVE工作空间,这等效于在常规事务中进行提交。

另一方面,我非常同意初步评估,从性能,稳定性,简单性和维护的角度来看,协调流程之间的事务很可能不是一个好主意。另一方面,这很可能是合法的业务要求,具体取决于将要淘汰C ++代码的方式(即是否有可能以事务可以完全是Java或者完全是C ++的方式替换代码)

回答

我相信JBoss Transaction Manager支持跨Web服务调用的2pc tx传播。我想可以这样集成系统,但是性能会发臭。