不同技术之间的两阶段提交(COM +,Java)

时间:2010-12-07 21:38:59

标签: java .net database com+

首先让我先介绍一下当前的架构:

Application A是一个在JBOSS中运行的java应用程序,它有自己的数据库(mssql)。

应用程序B是在Windows机器上运行的COM +应用程序,它也有自己的数据库(mssql)支持。

对于某些业务需求,应用程序A必须调用应用程序B.为此,COM代理与应用程序A(即JBOSS机器)安装在同一台机器上。 JNI接口允许我们从应用程序A - >> B。

进行调用

这就是我们今天所拥有的,它完美无缺。现在,出现了新的业务需求,有必要实现两阶段提交功能,如下所示:

将创建一个新的应用程序C(可能是一个.net应用程序),它将由自己的数据库支持。应用程序C将停留在第三台服务器上(不在我们的站点中)。

应用程序C在事务中调用应用程序A.应用程序A应在考虑嵌入式业务逻辑后执行某些操作。操作包括对应用程序的写入数据库和对应用程序B的调用。应用程序B执行其他操作(对应用程序B数据库)。应用程序C根据收到的反馈更新其数据库。现在,如果所有操作都成功,则更改将提交到数据库,否则操作将回滚。

问题很简单(我认为答案更复杂)。考虑到支持每个应用程序的不同技术,这是否可行?我完全理解,如果所有应用程序都是用.Net或COM +应用程序编写的,这是可行的。在这一点上,用其他技术替换java组件并不是一个可行的选择。有什么想法吗?

我们检查了JNBridge,但我认为它不能提供我们想要的东西。如果应用程序C不是问题,那就没问题了。

欢迎任何想法/解决方案。您认为最好的选择是什么?

1 个答案:

答案 0 :(得分:2)

您的平台是否支持WS-AtomicTransaction Web服务接口?某些供应商产品可以使用此标准的Java / .NET互操作。这可以给出真正的2PC。

然而没有mnatter你怎么做2PC会有性能和复杂性成本。仔细查看此体系结构的耦合含义:尤其是在<2>分辨率阶段期间发生故障时的问题解决方案。在不确定的事务解决之前,无法安全地删除锁定 - 在某些故障情况下,这可能会延长一段时间。

很多时候你可以重新设计一个问题,这样你就不需要2PC了 - 没有2PC就有很多业务。