問題タブ [xa]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
spring - Spring + JPA/Hibernate + ActiveMQ と XA/JTA を管理対象外のコンテナーで使用。エラーは表示されませんが、データベースにコミットされているデータは表示されません
既存の Spring/Hibernate Web アプリケーションに JMS 機能を (ActiveMQ 経由で) 追加しようとしています。したがって、データ ストアとメッセージ ブローカーの両方にまたがるトランザクション (Spring を使用) を管理できるように、このアプリに XA/JTA 機能を追加したいと考えています。
ActiveMQ の統合には成功していますが、XA/JTA をアプリケーションに組み込む際に問題が発生しています。具体的には、基礎となるデータベースにデータが挿入/更新されていません (ただし、トランザクション中にエラー/例外は見られません)。
詳細: Spring 3.1.2.RELEASE、Hibernate 3.6.10.Final、ActiveMQ 5.6.0
私は Spring Data JPA を使用して DAO インターフェースを作成しており、今度は LocalContainerEntityManagerFactoryBean を取得して CRUD 作業を行います。
Atomikos (5.6.0) と Bitronix (2.1.3) の両方の XA/JTA 実装を試しました。それぞれの結果は同じ動作になります (基になるデータベース テーブルにデータが書き込まれません)。
私は多くのログを記録しており、必要に応じてログの抜粋を提供できます。そして、構成の詳細も同様です。ログで特に注目すべき点として、Spring は JTA トランザクションが (しようとしている?) コミットしていることを示しているようです。ただし、基礎となるデータベースに書き込まれたデータが不足しているため、実際にコミットが完了するかどうかは明確ではありません (ただし、完了しなかったことを示すエラーは表示されません)。また、この特定のトランザクション (populateSampleData) には、データベース リソースのみが含まれることにも注意してください (メッセージ ブローカーはまったく関与しません)。
このような Spring XA/JTA アプリケーションをトランザクション管理用に正常にセットアップした人を見つけて、私が間違っている (または不足している) ことについていくつかの提案を提供できる人を見つけたいと思っています。私は基本的に、この記事の処方箋に従いました (Atomikos のケースについては、Atomikos の Web サイトから収集した情報を少し追加します)。
あなたが提供できる啓発に感謝します。
更新:問題を解決しました。問題は、persistence.xml ファイルを使用していなかったことです (代わりに、setPackagesToScan メソッドを使用して LocalContainerEntityManagerFactoryBean をセットアップするときにプログラムで永続化ユニットを構成していました)。persistence-unit は実際に @Entity クラスを適切にロードしていましたが、persistence.xml ファイルが存在しないため (具体的には、persistence-unit 要素の transaction-type 属性が存在しないため)、transaction-type はデフォルトで次のように設定されていました。 RESOURCE_LOCAL (非 Java EE コンテナーのデフォルト)。現在、persistence.xml ファイルを明示的に提供し、transaction-type="JTA" を明示的に設定しています。
java - XA トランザクションの例 Weblogic
Weblogic 11g を使用しています。
ある時点で、私の Java EE アプリケーションは、それぞれ別のサーバーで 3 つのリモート EJB メソッドを呼び出さなければなりません。
私のコードスニペット:
グローバル トランザクションの開始とコミット/ロールバックを実行する方法。
次のようなことを試しましたが、どのトランザクションがそれに参加しているTransactionManager tm = (TransactionManager)new InitialContext().lookup("javax.transaction.TransactionManager")
かを知る方法がわかりませんか?tm
何か案は?
java - XA データ ソースのパフォーマンス オーバーヘッド - ベスト プラクティス
XA データソースがパフォーマンスに与える影響を理解しようとしています。
多くのアプリケーションでは、すべてのトランザクションが分散トランザクションに参加する必要があるわけではありません (つまり、他のリソースとの分散/参加が必要なトランザクションはごくわずかです)。
パフォーマンスのトレードオフは、2 つのデータ ソース (XA 用と非 XA 用にそれぞれ 1 つ) を構成するのに十分な高さですか? 繰り返しますが、答えはシナリオによって異なりますが、「ベスト プラクティス」を探しています。
oracle - jms トランザクションをコミットしようとしたときに xa_commit が失敗しました
ブローカ キューにメッセージを書き込もうとしています。ただし、JMS トランザクションをコミットしようとすると、リクエスト全体が失敗し、その後は毎回ロールバックを試みます。Oracle XA ドライバーを使用します。この問題を投稿する場所がわからない: MQ フォーラムまたは Oracle フォーラム。したがって、ここで試してみると思います。誰かがこれを解決するのを手伝ってくれますか。
エラー:
java - AbstractRoutingDataSourceを使用してデータソースを切り替えながらトランザクションを共有する
AbstractRoutingDataSourceを使用してアクティブなデータソースを切り替えるときに、データソース間でトランザクションを共有するにはどうすればよいですか?
これまでのところ、トランザクションがないと、クエリは両方のデータベースで正しく実行されますが、トランザクションを開始すると、すべてが同じデータベースで実行されます(つまり、2番目のデータベースに切り替えることはできなくなります)。
何か案は?
EDIT1(追加された構成ファイル):
persistence.xml:
spring-jpa.xml:
編集2:
すべてをJTAおよびJNDI提供のデータソースに切り替えてみました。
transaction-type="RESOURCE_LOCAL"をtransaction-type="JTA"に変更しても機能しませんでした-JtaStatusHelperは、transactionManagerがnullであることを示すNullPointerExceptionをスローします。
編集3:
JBossTransactionManagerLookupをpersistence.xmlに追加しました。トランザクション内で2番目のデータソースに切り替えると、「最後の複数のリソースの追加は許可されていません」というメッセージが表示されるようになりました。
編集4:
JBOSSを設定しようとしたので、そのエラーを乗り越えました。データベースの切り替えは、「現在のトランザクションに複数の最後のリソースが追加されました。これはトランザクション的に安全ではないため、信頼しないでください」という予想される警告とともに機能するようになりました。次に、JBOSSでMSSQLXAドライバーを設定してみます。
編集5:
MSSQL XAを構成した後、すべてが意図したとおりに機能し、これを設定するために必要な手順を含む回答が投稿されます。
performance - PostgreSQL。トランザクションの準備を遅くし、準備をコミットする
奇妙な問題が発生しました。pgfourineでレポートを作成しましたが、XAトランザクションの動作が非常に遅くなっていることがわかりました。トランザクションの準備と準備されたコミットの合計は、13.2秒のうち12.55秒かかりました。しかし、なぜ?
理論はありますが、証拠がありません。ディスクが遅いので、synchronous_commitをオフにしました。おそらく、synchronous_commitがオフの場合でも、PostgreSQLは「トランザクションの準備」中にfsyncを作成する必要がありますか?
何か案は?
アップデート
と同じテスト
fsyncには膨大な時間がかかったようですが、常にではありません。16kコミット-0.2秒、17k準備+コミット2.9秒。
悲しい話。XAコミットはローカルコミットの15倍の時間がかかり、synchronous_commit設定を考慮していないようです。fsync = offは、実稼働での使用には安全ではありません。したがって、XAトランザクションを使用する場合は、慎重に使用し、IOPSの高い優れたSSDドライブを使用する必要があります。
java - アドバイス - XA、JTA、および JMS - XA を使用してトランザクションで JMS から読み取り、DB に書き込む
職場で、JMS キュー (実際には、同様のインターフェースを備えた専用のもの) から読み取り、同じトランザクション内でデータベースに書き込むように依頼されました。たとえば、データベースの挿入が失敗した場合、キューからの読み取りをロールバックする必要があります。
私は Java の経験があまりなく、XA、JTA、または JMS についての知識があまりありません。私は自分の目標を達成するのに十分な技術を理解できるように、すべてを読み込もうとしています。
とにかく、これらが互いにどのように関連しているかについて、私は少し混乱しています。
データベースと通信して分散トランザクションを管理するために XA ドライバーが使用されていると思いますが、XA ドライバーはメッセージ キューでも動作しますか?
データベースとキューの間でトランザクションを実行できるようにする XA 機能を管理するには、JTA インターフェースを使用する必要がありますか? それとも、何らかの XA API を直接使用する必要がありますか?
2 つのコンポーネント (必ずしも JMS キューとデータベースではなく、XA を使用して複数の参加者のトランザクションを管理するもの) 間のトランザクションを実行するコード サンプルを見つけることができる場所を知っている人はいますか?
これが少し広い場合は申し訳ありませんが、正しい方向に向けて何を読むべきかを知るのに十分なポインタを探しているだけです.
jdbc - 複数の参加者との JTA トランザクション
複数のリソース (2 つのデータベース、データベースと JMS キューなど) にまたがる JTA トランザクションの単純な例を見つけるのに苦労しています。
私はこれを読むのに多くの時間を費やし、JMS キューを使用して JTA トランザクションを実行するサンプルと、JDBC データベース ドライバーを介して JTA トランザクションを実行するサンプルを用意しました。JMS キューと JDBC データベースの両方を同じ JTA トランザクションの一部にすることについて、何も見つけられないようです。
この目的で JTA API を使用する方法を示す簡単なサンプルまたはリンクを提供できる人はいますか?
oracle - Oracle権限を付与しても、WebSphere XAER_RMERR例外は修正されませんか?
WebSphereND7.0.0.21にアプリケーションをデプロイしています。その中で、OracleXAデータソースを構成しました。最近、アプリケーションがクラッシュし、再起動すると、SystemOut.logで毎秒次の例外が発生し始めました。
これは、データベースに適切な権限が付与されていない場合の標準的な問題のようです。これにより、dbユーザーは、リカバリーが必要なトランザクションにアクセスできます-http ://www-01.ibm.com/support/docview.wss?uid= swg21196663
ただし、そのページでSQLを実行し、アプリケーションサーバーを再起動しましたが、問題は解決しませんでした。この問題は、トランザクションログを削除したときにのみ解消されました(IBMページで回避策として説明されています)。
権限を付与しても問題が解決しないのはなぜですか?他の何かがXAER_RMERR問題を引き起こす可能性がありますか?
distributed-transactions - XA 2フェーズコミットと準備フェーズでの実行?
2フェーズコミットを理解しようとしていますが、各ローカルサイトが分散トランザクションの一部をいつ実行するかがわかりません。
これは、準備メッセージが送信される前に発生しますか。つまり、2フェーズコミットxaプロトコルが実行される前に発生しますか?
または、各サイトは準備メッセージを受信した後に分散トランザクションの一部を実行しますか?つまり、準備メッセージ自体にも実行されるトランザクションクエリが含まれていますか?