19.3.2. サービス側のハンドラ設定

トランザクショナルなWeb サービスは、サービス呼出しが適切なトランザクションに含まれているように確認しなければなりません。通常、これはパーティシパントの操作に影響を与えるだけで、残りのWeb サービスの操作には影響を与えません。XTS は、トランザクションクライアントに対する方法とほぼ同じ方法で、このタスクを簡素化しビジネスロジックから切り離します。XTS は、受信SOAPのヘッダからコンテキストの詳細を検知、抽出するハンドラを提供し、Web サービスのスレッドとトランザクションを関連付けます。このハンドラは、SOAPのレスポンスをディスパッチするとこの関係を削除し、コンテキストを送信メッセージのヘッダーに書き込みます。これについては、図19.1「SOAPサーバーに登録されているコンテキストハンドラ」で説明しています。
JAX-WSに対するサービス側のハンドラには2つのバージョンがあります。通常のハンドラは、サービスの呼出し時に受信コンテキストにより特定されたトランザクションを再開し、こサービスの呼出しが完了するとこのトランザクションを停止します。他のハンドラを使いローカルコーディネータの介入を行います。受信した親コンテキストが初めて表示されるときに、ローカルのコーディネータサービスが、Webサービスが呼び出される前に再開する従属トランザクションを作成します。当ハンドラは、同じ親コンテキストでサービスの呼び出しが行われるたびにこの従属トランザクションが再開されるようにします。従属のトランザクションが完了すると、親トランザクションと従属トランザクションの関係はなくなります。

注記

従属サービス側のハンドラはAtomic Transaction の従属コーディネータのみを介入することができます。

注記

JAX-RPC は、1.0実装に対してのみ提供されます。

19.3.2.1. JAX-WSサービスコンテキストハンドラ

JAX-WS サーバー側のコンテキストハンドラをデプロイされたWeb Servicesに登録するには、サーバーエンドポイントの実装クラスにハンドラチェーンをインストールする必要があります。javax.jws.WebServiceでアノテーションが付けられたエンドポイント実装のクラスアノテーションはjavax.jws.HandlerChain アノテーションで補完する必要があります。このjavax.jws.HandlerChain アノテーションでアプリケーションがデプロイしたハンドラ設定ファイルを特定します。例についてはdd/jboss/context-handlers.xmlにあるアプリケーション設定ファイル例と、src/com/jboss/jbosstm/xts/demo/servicesにあるエンドポイント実装クラスを参照してください。
通常のJAX-WSサービスのコンテキストハンドラを登録するときに、com.arjuna.mw.wst11.service.JaxWSHeaderContextProcessor クラスをインスタンス化する必要があります。コーディネータ介入が必要な場合、代わりにcom.arjuna.mw.wst11.service.JaxWSSubordinateHeaderContextProcessorを使います。
SOAPサーバーに登録されているコンテキストハンドラ

図19.1 SOAPサーバーに登録されているコンテキストハンドラ