2

私は、サービス指向アーキテクチャによって接続されたいくつかのシステムを使用しています。これらのシステムには、.NET テクノロジ、Java WebLogic Service、および SAP RFC が含まれます。

これらの異なるテクノロジー間で分散トランザクションを実現することは可能ですか? たとえば、SAP の更新に失敗した場合、.NET と Java のトランザクションがまったく発生しないようにする必要があります。

ご意見をお聞かせいただければ幸いです。または、その方法の基本をどこで学べるか教えていただけないでしょうか?

4

2 に答える 2

0

私は次のようにこれを行います:

  1. サービスとの各対話は、メソッドが定義されたコマンドです。execute()undo()
  2. コマンドのスタックを維持し、成功したら各コマンドをプッシュします。
  3. コマンドが失敗した場合、つまりサービスとの対話が失敗した場合、スタックから各コマンドをポップして を呼び出しますundo()

ただし、この機能をそのまま提供する .NETの分散トランザクションAPIを探すこともできます。

于 2012-09-10T09:14:14.933 に答える
0

システム間で分散トランザクションを使用することはお勧めしません。システム間に多くの結合が作成され、各システムが他のシステムのロックを保持するため、各システムの負荷が増加するためです ( 「トランザクション統合アンチパターン」と呼ばれるこれについて私が書いた記事を参照してください)。 」)。通常、Vikdor が示唆するように、より良いオプションは、手動で調整できるSagaを使用するか、外部コーディネーター (例: Orchestrationを使用) を使用することです。

補償ロジックは、操作を完全に元に戻すことができない場合があることに注意してください (たとえば、小売のシナリオで、注文によって在庫のしきい値に達し、サプライヤーからの注文が発生した場合、その注文のキャンセルは、あなたの注文をあなたのサプライヤーからキャンセルする必要はありません)。また全額返金できない場合もございます。)

于 2012-09-11T12:04:13.983 に答える