2010-12-07 6 views
0

は私が最初のビットに現在のアーキテクチャを説明してみましょう:二相は異なる技術(COM +、Java)の間でコミット

アプリケーションAはJBOSSで動作するJavaアプリケーションであり、独自のデータベース(MSSQL)があります。

アプリケーションBは、Windowsマシンで実行されているCOM +アプリケーションで、独自のデータベース(mssql)でサポートされています。

特定のビジネス要件では、アプリケーションAはアプリケーションBを呼び出す必要があります。この目的のために、COMプロキシはアプリケーションA(つまりJBOSSマシン)と同じマシンにインストールされます。 JNIインタフェースを使用すると、アプリケーションA→Bからの呼び出しを行うことができます。

これは私たちが今日持っているものであり、完全に機能します。新しいビジネス要件が登場しました。次のように2フェーズコミット機能を実装する必要があります。

新しいアプリケーションCが作成されます(おそらく.NETアプリケーション)。それ自身のデータベース。アプリケーションCは3番目のサーバー(私たちのサイトにはない)に残ります。

アプリケーションCは、トランザクションでアプリケーションAを呼び出します。アプリケーションAは、埋め込まれたビジネスロジックを考慮した上で、いくつかのアクションを実行する必要があります。アクションには、アプリケーションAデータベースへの書き込みとアプリケーションBへの呼び出しが含まれます。アプリケーションBは(アプリケーションBデータベースに対して)追加のアクションを実行します。アプリケーションCは、受け取ったフィードバックに基づいてデータベースを更新します。現在、すべてのアクションが成功した場合、変更はデータベースにコミットされます。さもなければ、アクションはロールバックされます。

質問は簡単です(答えはもっと複雑だと思います)。これは、各アプリケーションをサポートするさまざまな技術を考慮して、実現可能ですか?私は、すべてのアプリケーションが.NetまたはCOM +アプリケーションで書かれていれば実現可能であることを完全に理解しています。現時点では、Javaコンポーネントを別のテクノロジに置き換えることは実行可能な選択肢ではありません。何か案は?

私はJNBridgeをチェックしましたが、私たちが望むものを提供できるとは思いません。アプリケーションCが問題ではない場合は問題ありません。

どのようなアイデアや解決策も歓迎します。あなたの意見にはどのような選択肢がありますか?

答えて

2

ご使用のプラットフォームでWS-AtomicTransaction Web Serviceインターフェイスをサポートできますか?一部のベンダー製品では、この標準のJava/.NET interopが可能です。これは本当の2PCを与えることができます。

2PCを行う方法はありませんが、パフォーマンスと複雑さのコストがかかります。このアーキテクチャーのカップリングの影響を特に注意深く見てください。特に、障害発生時の問題解決時にの2PC解決フェーズで。未確定のトランザクションが解決されるまで、ロックを安全に削除することはできません。いくつかの障害シナリオでは、かなり長い期間がかかることがあります。

実際に2PCを必要としないように、非常に頻繁に問題を再構築することができます.2PCがなければ、非常に多くのビジネスがあります。

+1

JBossアプリケーションはWS_ATをサポートしていますが、本当の問題は、そこからCOMコンポーネント(アプリA→アプリB)へのトランザクションフローです。私の知る限り、MySQLのMS DTCサポートはありません。つまり、JBossアプリケーションは、MS DTCと通信できる別のトランザクションコーディネーターを介してローカルトランザクションコンテキストを作成し、それをMySQLに渡す必要があります。そうすれば複雑さが増します。 JBossには既にDTCと連携できるトランザクションコーディネータがすでに存在している可能性がありますが、 –

+0

お返事ありがとうございます。それは両側でmssqlです。私はその質問を編集した。 – yioann

関連する問題