2010-12-07 38 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