次の技術スタックを使用して、同じトランザクション内から 2 つの永続ユニットに接続する際に問題があります。
WLS 10.3.x, Eclipselink 2.1, Oracle 11g JDBC driver, Informix 10 JDBC driver
この SO投稿からの入力を使用して、Oracle データソースを XA 準拠にし、Informix ds を「2 フェーズ コミットをエミュレート」すると、動作が開始されました。しかし、今私は奇妙な問題を抱えています。
スタンドアロンの Java クライアントを使用して、JPA エンティティを呼び出す ejb 3 SLSB を呼び出しています。私が直面している問題は、最初は動作し、2 回目は例外をスローしませんが、どちらのデータベースのデータも更新せず、3 回目はアプリケーションが既にコミットされているかのように「トランザクションは既にコミットされています」という例外をスローします。サーバー JTA トランザクション マネージャーは、元のトランザクション コンテキストを保持しています。これらの 3 つの呼び出しは個別かつ順次であり、すべての呼び出しはクライアントがクライアント プロセスを終了することで完了することに注意してください。この問題は非常に一貫しており、アプリ サーバーを再起動するたびにまったく同じ順序で発生します。
ご意見をお待ちしております。