接続リソースと JTA トランザクションを提供するためのサポートを J2SE アプリケーションに統合するにはどうすればよいですか?
こんにちはクリス
この問題には 2 つの要素があります。
1) JTA API (主に UserTransaction) をアプリケーション コードで使用できるようにして、トランザクションを開始および終了できるようにします。Java EE 環境では、JNDI の既知の場所に公開されます。JNDI 実装を使用している場合 (JBossTS の JNDIManager クラスを使用してセットアップを支援してください)。それ以外の場合は、何らかのファクトリ オブジェクトまたはインジェクション メカニズムが必要です。もちろん、実装クラスをエンド ユーザーに直接公開することもできますが、将来 JTA を交換する可能性が制限されるため、これはやや厄介です。
public javax.transaction.UserTransaction getUserTransaction() {
return new com.arjuna.ats.internal.jta.transaction.UserTransactionImple();
}
これで、トランザクションを開始、コミット、およびロールバックできるようになりました。一部のコンテナも同様の方法で TransactionManager クラスをアプリケーションに発行しますが、実際にはコンテナ自体で使用するように設計されており、アプリケーション コードで必要になることはほとんどありません。
2) XAResources の登録を自動的に管理します。リソース マネージャー、つまりデータベースとメッセージ キューには、XAResource を実装するドライバーがあります。アプリケーションがリソース マネージャーへの接続を取得するたびに、対応する XAResource を JTA 実装に渡して、リソース マネージャーを 2PC の一部として駆動できるようにする必要があります。ほとんどのアプリケーション サーバーには、これを自動的に処理する JCA が付属しています。これがない環境では、この退屈な作業を手作業で行う必要がないように、アプリケーション コードを節約するための代替手段が必要です。JBossTS にバンドルされている TransactionalDriver は、JDBC 接続でこれを処理します。XAPool も考慮する価値があります。
JBossTS は長年にわたって多くの環境に組み込まれてきました。得られた教訓の一部は、統合ガイドhttp://anonsvn.jboss.org/repos/labs/labs/jbosstm/trunk/atsintegration/docs/に記載されています。仕事http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/tomcat-integration/ ]
JBoss の TM はひどいものです。少なくとも、ACID トランザクションを希望している場合。
こんにちはエリクソン
「恐ろしい」までは行かないと思います。それは信じられないほど強力で高度に構成可能であるため、初心者にとってはすぐに使用できるエクスペリエンスが少し困難になる可能性があります. 正しいリカバリ構成は特に注意が必要なので、厳密なテストに関するあなたのコメントを全面的に支持します。それを超えて、仕様に準拠したリソース マネージャーで使用した場合に現在 ACID の結果を提供できない文書化されたテスト ケースを認識していません。そのような場合、または改善のためのより建設的な提案がある場合は、JBoss に知らせて、問題に対処できるようにしてください。
車輪を再発明しないでください。Spring フレームワークを使用します。すでにこの機能とそれ以上の機能を提供しています。
-1 Spring は JTA 実装を提供せず、さまざまなサードパーティのもののラッパーのみを提供します。これはよくある誤解です。
JTA は、ローカル トランザクションとグローバル トランザクションをサポートします。
私が恐れているもう一つの誤解。JTA 仕様は、XA、つまりグローバル トランザクションのみを扱います。JTA トランザクション マネージャがローカル トランザクションを駆動するようにするための、さまざまなよく知られた手法が存在します。これらには通常、接続を XAResource にラップすることが含まれます。ほとんどの実装はこれをサポートしていますが、実際には仕様の範囲外であるため、この動作が必要な場合は、JTA 実装を選択する前にベンダーに確認する必要があります。