2010-12-07 40 views
0

让我先介绍了一下目前的架构:两阶段提交不同的技术之间(COM +,JAVA)

申请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不是问题,那将会很好。

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

回答

2

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

然而没有mnatter你怎么做2PC会有性能和复杂性的成本。仔细查看此体系结构的耦合影响:特别是在发生故障时的问题解决方案期间在012PCS的解决阶段。在有疑问的交易解决之前,锁不能被安全地移除 - 在某些故障情况下,这可能是相当长的一段时间。

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

+1

请注意,虽然JBoss应用程序可能支持WS_AT,但真正的问题是从它到COM组件的事务流程(应用程序A - >应用程序B)。据我所知,没有MS DTC支持MySQL。这意味着JBoss应用程序必须通过另一个可以与MS DTC通信的事务协调器创建本地事务上下文,并将其传递给MySQL,以便它可以登录到它。这会增加复杂性。尽管很可能JBoss已经有一个可以与DTC协同工作的事务协调器。 – 2010-12-07 21:59:04