4

アプリケーション コンテナーを実装するとします。完全な Java EE スタックではありませんが、JDBC リソースへのアクセスと、作成中のアプリケーションにデプロイされるサード パーティ コードへのトランザクションを提供する必要があります。

さらに、JBossTS のトランザクションを調べているとします。私はそれに落ち着いていませんが、私が知る限り、それは私がする必要があることに最も適しているようです.

接続リソースと JTA トランザクションを提供するためのサポートを Java SE アプリケーションに統合するにはどうすればよいですか?

4

7 に答える 7

7

接続リソースと 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 実装を選択する前にベンダーに確認する必要があります。

于 2009-05-09T09:10:12.990 に答える
3

Atomikos TransactionsEssentialsを試してください。

競合するオープン ソースの JTA/XA 実装とは異なり、これは最初から JSE 用に記述されています。その結果、プレミアム JDBC および JMS プールと JTA/XA 機能が提供され、アプリケーションへの統合が非常に簡単になります。

ベストガイ

于 2009-05-30T15:12:47.680 に答える
2

「JBoss の TM はひどいものです。少なくとも、ACID トランザクションを期待しているのであれば。それについて言える最善のことは、障害に対処する必要がない限り、おそらく台無しにならないということです。そして、そうではありません。単独では...ほとんどのトランザクション マネージャー (一部の商用マネージャーでさえ) は実際には機能しません。"

上記のステートメントを作成するためにどのような宿題をしたかはわかりませんが、JBossTS (2006 年に買収されたときからの JBoss の TM) は完全な ACID セマンティクスを提供します。また、もともと HP NetAction スイートの一部であり、他のどのオープン ソース TM よりもミッション クリティカルなアプリケーションに展開されていました。

于 2010-05-18T21:52:30.927 に答える
2

JTA は、ローカル トランザクショングローバル トランザクションをサポートします。

ローカル トランザクションは、Spring、JPA、または接続の手動コミットによっても簡単に処理できます。

グローバル トランザクションには、トランザクション コーディネーターが必要ですこれは、オープンソースですぐに利用できない別の製品/ライブラリです (または、少なくとも私はそれを認識していません)。

したがって、投稿のヘッダー (「JTA」) を見ると、答えはNO SIMPLE WAYです。

あなたの投稿自体を読んだ場合(「JDBCリソースとトランザクションへのアクセスを提供する」)、Spring、JPA、およびHibernateのすべてがあなたのニーズをカバーすると思います(私が理解しているように)。

PS訂正:JTAはローカルトランザクションを実際にはサポートしていません(人々が私に指摘したように)が、単一の接続のみが必要な場合は、JTAによって制御されていても、特にトランザクションマネージャーが同じ JVM (よくあること)。

于 2009-05-08T18:39:52.663 に答える
2

私はそれほど熱心ではないので、Spring を使用できます。

あなたが望むかもしれないものの例はここにあります

于 2009-05-08T17:02:44.173 に答える
1

私はこの問題を解決するためにBitronixTransactionManagerを使用することを選択しましたが、当時私には明らかではなかったオプションが少なくとも1つあるようです(Atomikos)。

これを解決するには、トランザクションをJNDI名に関連付けるために、TomcatインプロセスJNDIプロバイダーも使用する必要がありました。そのプロバイダーの制限により、JTA UserTransactionのデフォルト名を使用できませんでした。これは、ドキュメントからすぐにはわかりません。

とにかく役立つ答えをありがとう!

于 2009-05-30T18:27:26.237 に答える