【问题标题】:Two-phase commit between different technologies (COM+, Java)不同技术(COM+、Java)之间的两阶段提交
【发布时间】:2010-12-07 21:38:58
【问题描述】:

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

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

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

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

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

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

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

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

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

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

【问题讨论】:

    标签: java .net database com+


    【解决方案1】:

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

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

    您通常可以重新设计一个问题,这样您实际上就不需要 2PC - 有很多业务在没有 2PC 的情况下完成。

    【讨论】:

    • 请注意,虽然 JBoss 应用程序可能支持 WS_AT,但真正的问题是从它到 COM 组件(应用程序 A -> 应用程序 B)的事务流。据我所知,MySQL 没有 MS DTC 支持。这意味着 JBoss 应用程序必须通过另一个可以与 MS DTC 对话的事务协调器创建本地事务上下文,并将其传递给 MySQL,以便它也可以加入其中。这会增加复杂性。虽然很有可能 JBoss 已经有一个可以与 DTC 一起工作的事务协调器。
    • 感谢您的回答。两边都是mssql。我编辑了问题。
    猜你喜欢
    • 2014-09-12
    • 2011-11-15
    • 2011-11-24
    • 2013-05-21
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多