14

既存の C++ アプリケーションを、新しい Java ベースのシステムに徐々に置き換える予定です。Java ですべてを完全に再実装するまでは、C++ と Java が相互に通信する必要があると予想されます (RMI、SOAP、メッセージングなど - まだ決定していません)。

今、私のマネージャーは、同じ Oracle DB トランザクションに参加するには、Java 側と C++ 側が必要になると考えています。これは、DB やメッセージ キューなどの 2 つのトランザクション リソースを 1 つのプロセスで調整するという通常の分散トランザクションの問題と関連していますが、これとは異なります。

プロセス間でトランザクションを伝播することは、パフォーマンスと安定性の観点からはひどい考えだと思いますが、それでも解決策を求められます。

私は XA トランザクションに精通しており、JBoss Transaction Manager でいくつかの作業を行いましたが、2 つのプロセス間で XA トランザクションを伝播するのに良い結果が得られませんでした。

Java 側で Spring を使用していますが、Spring のドキュメントには、Spring はトランザクションの伝播を支援しないと明示的に記載されています。

従来の Java EE サーバー (IBM Websphere など) を使用する予定はありません。これは、伝播をサポートしている可能性があります (決定的なドキュメントを見つけることができるわけではありません)。

解決策に関するヘルプやポインタは大歓迎です。

4

3 に答える 3

10

Laurent Schneider のブログには、Oracle 内で DBMS_XA パッケージを使用して複数のセッションが同じトランザクションで機能することを許可する例があります。そのため、追加のコーディネーターを必要とせずに、Java と C++ のセッションを同じトランザクションに参加させることができます。

または、Workspace Manager の使用を検討することもできます。これはもともと、非常に長時間実行されるトランザクション (つまり、提案された開発のために大量の空間データを操作する) をサポートするために設計されました。基本的に、ワークスペースを作成できます。これは、この場合、名前付きトランザクションとほぼ同等です。Java と C++ の両方のコードが (別のセッションから) そのワークスペースに入ることができ、両方ともそのワークスペースでデータを操作およびコミットできました。トランザクションが完了すると、ワークスペースを LIVE ワークスペースにマージできます。これは、通常のトランザクションでコミットを行うのと同じです。

一方、プロセス間のトランザクションを調整することは、パフォーマンス、安定性、シンプルさ、およびメンテナンスの観点から、悪い考えである可能性が非常に高いという最初の評価に強く同意します。一方、C++ コードがどのように廃止されるか (つまり、トランザクションが Java または C++ のみになるようにコードを置き換えることができるかどうか) によっては、正当なビジネス要件になる可能性があります。

于 2008-09-17T20:46:53.837 に答える
4

私はHazlecast Messaging と分散メモリ ロックを使用してこれらの問題のいくつかを解決してきましたが、そのようなツールを使用するには、同じデータに触れる部分でソフトウェアを再設計する必要があります。C++ クライアント ドキュメントはこちらJava クライアントはこちら

Oracle には、Oracle Coherence と呼ばれる同様の製品もあります。これは、開発ガイドの ロックを参照してください。

また、データベースには、 Oracle Streams Advanced Queueing (トランザクションの永続キュー)と呼ばれる MQ システムが含まれており、 状況によっては役立つ場合があります。Oracle AQ は、Oracle トリガーとうまく統合されます。

さらに、キャッシュを更新したり、更新プロセスに通知したりするのに役立つデータベース変更通知があります。これは、 Optimistic Offline Lock パターンと一緒に使用できます。

ソフトウェア トランザクショナル メモリも参照してください。

Apache Zookeeper は分散ロックにも役立ちます。

于 2015-04-07T08:46:29.960 に答える
0

JBoss Transaction Managerは、Webサービス呼び出し全体での2pctx伝播をサポートしていると思います。システムをそのように統合することはできますが、パフォーマンスは悪臭を放ちます。

于 2008-09-23T18:08:58.993 に答える