どのように私はJ2SEアプリケーションに 提供する接続リソースおよびJTA トランザクションのサポートを統合するのですか?
こんにちはクリス
この問題には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/]統合ガイドに記載されていて、あなたが働い例をしたい場合は、Tomcatの統合作業http://anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/tomcat-integration/で見ることができる]
のJBossのTMは恐ろしいです。少なくとも、 の場合は、ACIDトランザクションが必要です。
私は「恐ろしい」と全く同じくらい遠くに行かないと思います
こんにちはエリクソン。それは信じられないほど強力で設定可能なので、新人のための箱入り体験を少し難しくすることができます。正しい復旧設定は特に難しいので、私は厳密なテストに関するあなたのコメントを完全に支持します。それ以外のところでは、仕様準拠のリソースマネージャで使用されたときにACIDの結果を提供できないような文書化されたテストケースは認識していません。このようなケースや改善のための建設的な提案がある場合は、問題が解決できるようにJBossに知らせてください。
ホイールを改造しないでください。 Spring Frameworkを使用してください。既にこの機能などを提供しています( )。
-1春はJTAの実装を提供せず、さまざまなサードパーティ製のラッパーを提供します。これはよくある誤解です。
JTAは、ローカルトランザクションと グローバルトランザクションをサポートしています。
もう一つの誤解は私が恐れています。 JTA仕様はXA、すなわちグローバルトランザクションのみを扱う。 JTAトランザクションマネージャがローカルトランザクションを駆動するための様々な周知の技術が存在する。これらは、通常、XAResourceにConnectionをラップすることを伴います。ほとんどの実装はこれをサポートしていますが、実際には仕様の範囲外です。この動作が必要な場合は、JTA実装を選択する前にベンダーに確認する必要があります。
JBossのTMは恐ろしいです。少なくとも、あなたがACID取引を望んでいるならば。誰かが言うことができる最高のことは、それが何らかの失敗と争う必要がない限り、おそらく壊れないということです。そして、それだけではありません...ほとんどのトランザクションマネージャー(商用トランザクションマネージャーも)は実際には動作しません。以前の答えで言ったように、厳密にテストする必要があります。 http://stackoverflow.com/questions/777636/what-is-a-good-open-source-j2se-jta-transactionmanager-implementation – erickson
それが悪い場合は、私は代替案を検討する必要があります。私はそれを使用する方法を理解しようとしたときにBitronixは私のことを混乱させました。 –
@erickson、JBossTMのような宣言をするつもりがひどい場合、少なくともいくつかの理由があります。 –