質問

セッションBeanから2つのWebサービスメソッドを呼び出す例を考えると、2つのメソッドの呼び出しの間に例外がスローされるとどうなりますか? Webサービスを呼び出さない場合、トランザクションはロールバックされ、害はありません。ただし、Webサービスはロールバックしません。もちろん、単一のWebサービスでも問題があります。これは一般的な質問ですが、EJBセッションBeanに関連するソリューションに興味があります。

簡単でカスタマイズされた答えは、特別な「ロールバックメソッド」を追加することです。 「実際の機能」ごとにWebサービスに方法。私が求めているのは、そうするための標準化された方法です。

役に立ちましたか?

解決

多くの技術が進化していますが、問題はまだ十分に最先端であり、標準化プロセスでは完全にポータブルなソリューションがまだ提供されていません。

オプション1、Webサービスのトランザクションを認識させることができます。もちろん、これはユーザーがそれらを制御できることを前提としていますが、非トランザクションサービス用のトランザクション対応プロキシを作成することも場合によってはオプションです。

WS-ATおよびWS-BAプロトコルは、トランザクションWebサービスの主要な標準です。残念ながら、それらはプロトコルのみを指定し、言語バインディングは指定しません。言い換えれば、プログラミング言語レベルには標準のAPIはありません。 Javaの場合、最も近いものはJSR-156ですが、まだ準備ができていません。

次に問題が発生します:EJB(つまりJTA / XA)トランザクションをWSトランザクションに結び付ける方法。 WS-ATおよびXAプロトコルで使用されるモデルは密接に関連しているため、これはプロトコルブリッジを使用して実現できます。いくつかのアプリサーバーは、これらの行のみを提供します。 JBossがJavaOneで発表しました- http:をご覧ください。 //anonsvn.jboss.org/repos/labs/labs/jbosstm/workspace/jhalliday/txbridge/BOF-4182.odp

プロトコルブリッジングテクニックは、他の方法で使用することもできます。トランザクションWebサービスとして公開されるXAデータベースバックエンド。

ただし、2フェーズコミットトランザクションで使用されるロックモデルは、実際には同じ制御ドメイン内の短命のトランザクションにのみ適しています。同じ会社のデータセンターでサービスを実行している場合は、おそらくそれで十分です。地理的であろうと管理的であろうと、より広く配布するために、WS-BA、特にそのような用途のために特別に設計されたWebサービストランザクションプロトコルを見てみたいでしょう。

WS-BAは、プログラミングが難しい補償ベースのモデルを使用します。基本的には、あなたが言及したテクニックに基づいています。サービスメソッドの効果は、補正メソッドを呼び出すことによって元に戻されます。これを正しく行うのは難しい場合がありますが、JBossインターンは、最小限の労力で補正方法を定義し、それらを自動的に駆動できるようにするかなり良いアノテーションフレームワークを作成しました。標準化されていませんが、次のアプローチを選択する場合はチェックアウトする価値があります: http:// www。 jboss.org/jbosstm/baframework

他のヒント

Microsoft、BEA Systems、およびIBMが開発したWeb Services-Coordination(WS-C)およびWeb Services-Transaction(WS-T)の仕様は、私が知っているような場合に使用されます。 Webサービストランザクションおよび明確にするためにIBMが提供するWebサービストランザクションプロトコルの比較の記事。

実際には、通常、カスタムロールバックメソッドだけでなく、カスタムコミットメソッドも必要です。そうしないと、WS-BA標準に見られるような問題が発生します。

チェックアウト http://www.atomikos.com/Publications/TryCancelConfirm で詳細な記事をご覧ください。そこに記載されている機能は、 Atomikos ExtremeTransactions で利用できます。この製品は、従来の「ACID」もサポートしています。スタイルWebサービストランザクション。

HTH

免責事項:私はAtomikosで働いています

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top