繁体   English   中英

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

[英]Two-phase commit between different technologies (COM+, Java)

让我先描述一下当前的架构:

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

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

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

这就是我们今天拥有的,并且运行良好。 现在,出现了一个新的业务需求,并且有必要实现一个两阶段提交功能,如下所示:

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

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

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

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

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

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

但是,如何使用2PC并不会增加性能和复杂性成本。 非常仔细地看看这个架构的耦合影响:特别是在解决问题时, 2PC分辨率相发生故障。 在不确定的事务解决之前,无法安全地删除锁定 - 在某些故障情况下,这可能会延长一段时间。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM