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

标签 java .net database com+

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

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

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

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

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

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

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

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

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

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

最佳答案

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

但是,无论您如何使用 2PC,都会产生性能和复杂性成本。仔细查看此架构的耦合含义:尤其是在 2PC 解决阶段发生故障时的问题解决。在不确定事务解决之前,无法安全地删除锁 - 在某些故障情况下,这可能会花费相当长的时间。

很多时候,您可以重新设计一个问题,这样您实际上就不再需要 2PC——有大量的业务不需要 2PC 就可以完成。

关于java - 不同技术之间的两阶段提交(COM+、Java),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4381872/

相关文章:

java - 跟踪位置以动画 fragment 之间的过渡

.net - 我应该编写自己的 GridView 实现吗?

php - 我正在使用使用 session 的登录脚本(PHP、MySQL)。我需要创建一个变量,以便我可以在其他页面中使用它?

mysql - 帮助SQL多表查询

mysql - 使用 student_id 显示学生出勤情况的单一查询

java - Spring Boot-Hibernate-Mysql id 主键值序列使用@GeneratedValue 在我的所有域中共享

Java:打印流中输出奇怪的内容

java - 为什么我不能在 Java 中传递这样的数组

c# - 我如何使用 EPPlus 将子对象导出为 Excel

c# - String.Concat(Object) 而不是 String.Concat(String) 的用途