問題タブ [2phase-commit]
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.
java - 最後のリソースの最適化
2 フェーズ コミットをサポートしないリソース アダプタを作成しています。「Last Resource Optimization」と呼ばれる最適化手法があることは知っています。
JBoss では、XAResource クラスは、最適化のために LastResource を実装する必要があります。
私の質問は、WebLogic、WebSpehre、Glassfish などでこれを行う方法です...
jdbc - XA 2PCトランザクションにODBC接続を参加させるにはどうすればよいですか?
このアプリケーションは、ODBCを使用してデータベース(違いが生じる場合はDB2とOracleの両方)と通信し、JNIを介してビジネスロジックをJavaに委任します(つまり、JavaとCを使用します)。
私が知りたいのは、ビジネスロジック(Java / JDBC)とアプリケーションフレームワーク(C / ODBC)が2フェーズコミットプロトコルに参加できるようにするために必要なツール/ソフトウェア/ライブラリです。
このプロジェクトではLinuxで実行しますが、通常はSolarisとWindowsもサポートしているため、マルチプラットフォームソリューションが推奨されます。
php - PHPとMySQLを使用したトランザクション処理
PHPとMySQLを使用して2フェーズコミットを実装しようとしていますが、不足しています。
私が見つけた主なブロックは、MySQL接続リソースを第2フェーズで再び見つけることができる場所に保存できないことです。データベースハンドルをシリアル化することは可能ですか?
これが私がコーディングしようとしているケースです:
- ユーザーがデータを送信する
- サーバーはMySQLトランザクションを開始し、受信したデータに基づいていくつかのクエリを実行します。
- サーバーはファイルをユーザーに送り返します
- ユーザーがファイルを正常に受信すると、サーバーはトランザクションをコミットします。それ以外の場合はロールバックします。
これには2つのHTTP要求/応答サイクルが必要なようです。そのため、トランザクションをコミットするには、2番目の要求で同じデータベースハンドルに再接続できる必要があります。私はこの部分で失敗してきました。
「これはPHPでは不可能」であっても、アドバイスは大歓迎です。
database - トランザクションがコミットされる前の JMS メッセージの配信
アプリケーション サーバー (Glassfish) でデータベースとJMSを使用する非常に単純なシナリオがあります。シナリオは非常に単純です。
問題は、挿入がデータベースにコミットされる前にメッセージが配信されることがあるということです。これは、2 フェーズ コミット プロトコルを考えると理解できます。
この問題について他の人と話し合ったことがありますが、答えはいつも「奇妙です。すぐに使えるはずです」でした。
私の質問は次のとおりです。
- そのままでどのように機能するのでしょうか?
- 私のシナリオは非常に単純に聞こえますが、同様の問題を抱えている人がもっといないのはなぜですか?
- 私は何か間違ったことをしていますか?この問題を正しく解決する方法はありますか?
問題の私の理解についてもう少し詳しく説明します。
このタイミングの問題は、参加者がこの順序で処理される場合にのみ存在します。2PC が参加者を逆の順序 (最初にデータベース、次にメッセージ ブローカー) で処理する場合は問題ありません。問題はランダムに発生していましたが、完全に再現可能でした。
Glassfish のドキュメントにも、JTA、JCA、および JPA 仕様の分散トランザクションの参加者の順序を制御する方法が見つかりませんでした。使われる順番に応じて分散トランザクションに登録されると想定できますが、JPA などの ORM では、いつデータがフラッシュされ、いつデータベース接続が実際に使用されるのかを知ることは困難です。何か案が?
sql - Groovy、2フェーズコミットの方法は? Sql.withTransaction は複数のデータベース間でトランザクション スコープを管理できますか?
そうですね、私の質問がすべてを物語っていると思います。Groovy SQL が 2 フェーズ コミットをサポートしているかどうかを知る必要があります。私は実際に、次のことを行うメソッドを定義したいGrailsサービスをプログラミングしています:
データベース 1 の SQL インスタンスを取得、データベース 2 の SQL インスタンスを取得、
何らかの方法でトランザクションを開きます。トランザクション内で、各データベースでそれぞれ 2 つの異なるストアド プロシージャを呼び出します。次に、必要に応じて、両方の接続でいくつかの方法をコミットするかロールバックします。
これに関する有用な情報は、Web 上のどこにもまだ見つかりませんでした。
私は何らかの方法で 2 フェーズ コミットをプログラムする必要があるため、これが他の手段 (たとえば、Spring アーティファクトの助けを借りて grails で使用するなど) でサポートされている場合でも、ガイドしてください。これは現時点で私にとってショーストッパーになりました。
注: MySQL と mysql-connector ドライバーを使用しています。ありがとう、アラム・シャー
java - 2 フェーズ コミット - テスト方法
Java/Jboss/Apache 環境で 2 フェーズ コミットを実装しようとしています。
しかし、実際に機能することをテストする方法を理解するのは難しいですか? テストに役立つ GUI ツールはありますか?
ありがとう
oracle - Oracle ALTER SESSION ADVISE COMMIT?
私のアプリは障害から自動的に回復します。私はそれを次のようにテストします:
- アプリを起動
- 処理の途中で、アプリケーションサーバーホストを強制終了します(shutdown -r -f)
- ホストの再起動時に、アプリケーションサーバーが再起動します(Windowsサービスとして)
- アプリケーションが再起動します
- アプリケーションは処理を試みますが、前のセッションからのOracleDBの不完全な2フェーズコミットトランザクションによってブロックされます。
- 10〜30分後、DBは前のtxnを解決し、処理は正常に続行されます。
これより速く処理を続けるために必要です。私のDBAは、ステートメントの前に接頭辞を付ける必要があるとアドバイスしています
しかし、彼はこれを行うことでデータが失われる可能性についての保証や詳細を私に与えることはできません。
幸いなことに、問題のステートメントはdatetime
値をSYSDATE
1秒ごとに更新するだけなので、データが破損した場合、上書きされるまで1秒未満続きます。
しかし、私の質問に。上記のステートメントは正確に何をしますか?Oracleを使用すると、データ同期の問題をどのように解決しますか?
transactions - 2 つの EJB サーバーにわたる分散トランザクション
EJB サーバーでの 2 PC と分散トランザクションに関する記事を読んでいました。それは言います:
2-PC を使用すると、さまざまなサーバーとリソース (データベースや JMS プロバイダーなど) 間でトランザクションを管理できます。2-PC の詳細は、この本の範囲を超えていますが、それをサポートするシステムでは、EJB またはアプリケーション開発者による特別な操作は必要ありません。
独自の環境でトランザクションを管理するだけでなく、EJB サーバーは他のトランザクション システムと連携できます。たとえば、EJB が BankEJB とは異なるアプリケーション サーバーから実際に送信された場合、2 つのアプリケーション サーバーは協力してトランザクションを 1 つの作業単位として管理します。
2 つの異なるマシンでホストされている 2 つのアプリ サーバーで実行されている 2 つの異なるエンタープライズ アプリ (A と B) があるとします。私が使用しているアプリケーション サーバーは、WebLogic と Oracle AS です。2 台の PC/分散トランザクションが 2 台のサーバー間でトランザクションを調整することは可能ですか (ベンダーが異なる場合でも)? 私の質問が明確でない場合は、お知らせください。
spring - Java SE での Spring JMS 2 フェーズコミット
Java EE で実行していません。
Spring を使用して XA トランザクションを作成し、DB と JMS の間でトランザクションを共有したいと考えています。
Spring はそのような機能を提供しますか、それとも Atomikos などの外部トランザクション マネージャーを使用する必要がありますか?
現在、DB に DataSourceTransactionManager を使用していますが、JMSTransactionManager も使用できることがわかりました。彼らは一緒に働きますか?JtaTransactionManager が言及されているため、ドキュメントからは明確ではありません。
お知らせ下さい。
ヤイル