2009-05-08 7 views
4

アプリケーションコンテナを実装したいとします。全面的なJava EEスタックではありませんが、私が書いているアプリケーションに配備されるサードパーティのコードへのJDBCリソースとトランザクションへのアクセスを提供する必要があります。JTAをJava SEアプリケーションに統合するには何が必要ですか?

さらに、JBossTSのトランザクションについて検討しているとします。私はそれに解決されていないが、それは私が言うことができる限り、私がする必要があるもののために最も適しているようだ。

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

+2

JBossのTMは恐ろしいです。少なくとも、あなたがACID取引を望んでいるならば。誰かが言うことができる最高のことは、それが何らかの失敗と争う必要がない限り、おそらく壊れないということです。そして、それだけではありません...ほとんどのトランザクションマネージャー(商用トランザクションマネージャーも)は実際には動作しません。以前の答えで言ったように、厳密にテストする必要があります。 http://stackoverflow.com/questions/777636/what-is-a-good-open-source-j2se-jta-transactionmanager-implementation – erickson

+0

それが悪い場合は、私は代替案を検討する必要があります。私はそれを使用する方法を理解しようとしたときにBitronixは私のことを混乱させました。 –

+0

@erickson、JBossTMのような宣言をするつもりがひどい場合、少なくともいくつかの理由があります。 –

答えて

1

私はどうやら時間(Atomikos)で私には明らかではなかった少なくとも一つの他の選択肢がありますが、この問題を解決するためにBitronixトランザクションマネージャを使用することを選択しました。

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

何とか役立つ回答をいただきありがとうございます。

2

ホイールを改造しないでください。 Spring Frameworkを使用します。すでにこの機能を提供しています。

+0

"ずっと"は必ずしも良いことではありません。 – erickson

+1

エリクソン、あなたはそれを釘付けにした。 Springは、私がやりたいと思うように動作しないプログラミングモデルに沿っています。 –

+0

あなたが望む機能を使い、それ以外のものは無視することができますが、DIスタイルのプログラミングモデルを使用できない場合は、それを使用するのにあまり意味はありません。それは、それがあなたがいるビジネスでない限り、同等のフレームワークを構築する努力のかなりの浪費のように思えます。 – Robin

2

私はあまり好きではないので、Springを使うことができます。

あなたが望むかもしれないものの例としては、here

+1

SpringはTransactionManagerを提供しません。 –

2

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

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

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

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

投稿記事を読むと(JDBCリソースとトランザクションへのアクセスを提供する)、Spring、JPA、およびHibernateのすべてがあなたのニーズをカバーすると私は理解していますからです。

P.S. 訂正:JTA は本当にローカルトランザクションをサポートしていますが(ユーザーが指摘したように)、単一の接続だけが必要な場合は、本質的にローカルトランザクションです。同じJVMに配置されています(しばしば起こります)。

7

どのように私は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実装を選択する前にベンダーに確認する必要があります。

+0

あなたは正しいです、JTAはXAのみです。それにもかかわらず、一部の人は単一の接続にそれを使用します。この場合、ローカルトランザクションとほとんど違いはありません。お粗末な説明を申し訳ありません。 –

3

お試しAtomikos TransactionsEssentials

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

ベスト ガイ

2

"JBossのTMは恐ろしいことですが、少なくとも、あなたがACIDトランザクションを望んでいるならば、それについて言えることは、おそらく失敗に対抗する必要がない限り、それだけではありません...ほとんどのトランザクションマネージャー(商用トランザクションマネージャーも)は実際には機能しません。

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

+0

+1私はいつもArjunaTSについて良いことを聞いてきました。興味のある方は、TSSに素敵な[スレッド](http://www.theserverside.com/news/thread.tss?thread_id=37941)があります。 –

関連する問題