![]() ![]() ![]() ![]() |
以下の節では、Web サービスの信頼性のあるメッセージングの使用方法について説明します。
警告 : | この機能は、JAX-RPC 1.1 ベースの Web サービスに対してのみ実装可能です。JAX-WS 2.0 Web サービスに対しては実装できません。 |
Web サービスの信頼性のあるメッセージングとは、ある 1 つのアプリケーション サーバで実行中のアプリケーションが、別のアプリケーション サーバで実行中の Web サービスを確実に呼び出せるフレームワークです。ここでは、双方のサーバで WS-ReliableMessaging 仕様が実装されていることが前提となっています。信頼性のある、とは 2 つの Web サービス間でのメッセージの配信を保証できるということです。
注意 : | Web サービスの信頼性のあるメッセージングは、WS-ReliableMessaging 仕様が実装された任意の 2 つのアプリケーション サーバ間で機能します。しかしこのマニュアルでは、この 2 つのアプリケーション サーバを、WebLogic Server インスタンスであると想定しています。 |
WebLogic Web サービスは、WS-ReliableMessaging 仕様 (2005 年 2 月) に準拠しています。これは、別々のアプリケーション サーバで実行されている 2 つの Web サービスが、ソフトウェア コンポーネント、システム、またはネットワークに障害が発生していても、確実に通信できる方法について記述したものです。具体的には、この仕様ではソース エンドポイント (つまりクライアント Web サービス) から送り先エンドポイント (つまりオペレーションを確実に呼び出せる Web サービス) へ送信されるメッセージが、1 つまたは複数の配信保証に基づいて確実に配信されるか、そうでなければ必ずエラーが送出される、相互運用性を備えたプロトコルについて説明しています。
信頼性のある WebLogic Web サービスには、以下の配信保証が備わっています。
Web サービスの信頼性のあるメッセージングのアーキテクチャの詳細については、
WS-ReliableMessaging 仕様を参照してください。「Web サービスの信頼性のあるメッセージングの使用 : 主な手順」では、信頼性のある Web サービスおよびクライアント Web サービスを作成する方法と、それらの Web サービスがデプロイされる 2 つの WebLogic Server インスタンスをコンフィグレーションする方法について説明します。
注意 : | Web サービスの信頼性のあるメッセージングは、JMS 転送機能ではサポートされません。 |
WebLogic Web サービスでは、送り先エンドポイントが Web サービスの信頼性のあるメッセージングの機能と要件を記述および公開できるようにする、WS-Policy ファイルを使用します。WS-Policy 仕様では、Web サービスのポリシーを記述して通信するための、汎用的なモデルと構文が提供されています。
これらの WS-Policy ファイルは、サポートされている WS-ReliableMessaging 仕様のバージョン、ソース エンドポイントの再送信間隔、送り先エンドポイントの確認応答間隔などの特徴が記述された、XML ファイルです。
Web サービスに追加された WS-Policy ファイルの名前は、JWS ファイル内の @Policy
JWS アノテーションを使用して指定します。複数の @Policy
アノテーションをグループ化するには、@Policies
アノテーションを使用します。信頼性のあるメッセージングを行うには、これらのアノテーションを、クラス レベルでのみ使用します。
WebLogic Server では、ユーザ独自の WS-Policy ファイルを作成しない場合に JWS ファイルで指定できる、2 つの単純な WS-Policy ファイルが用意されています。
DefaultReliability.xml
- 信頼性のあるメッセージングのポリシーのアサーションに一般的な値 (非アクティブ タイムアウト 10 分、確認応答の間隔 200 ミリ秒、基本的な再送信間隔 3 秒など) を指定します。実際の WS-Policy ファイルについては、「DefaultReliability.xml WS-Policy ファイル」を参照してください。LongRunningReliability.xml
- 1 つ前に示した、信頼性のあるメッセージングのデフォルト WS-Policy ファイルとほぼ同じですが、アクティビティのタイムアウト間隔に、より大きな値 (24 時間) を指定する点が異なります。実際の WS-Policy ファイルについては、「LongRunningReliability.xml WS-Policy ファイル」を参照してください。
あらかじめパッケージ化されているこれらのファイルは変更することができません。したがって、ファイル内の値がニーズに合わない場合は、独自の WS-Policy ファイルを作成する必要があります。
WebLogic Server 付属のものを使用しない場合の、独自の WS-Policy ファイル作成の詳細については、「Web サービスの信頼性のあるメッセージングの WS-Policy ファイルの作成」を参照してください。信頼性のあるメッセージングのポリシーのアサーションに関するリファレンス情報については、「Web サービスの信頼性のあるメッセージングのポリシー アサーションに関するリファレンス」を参照してください。
<?xml version="1.0"?>
<wsp:Policy
xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:beapolicy="http://www.bea.com/wsrm/policy"
>
<wsrm:RMAssertion >
<wsrm:InactivityTimeout
Milliseconds="600000" />
<wsrm:BaseRetransmissionInterval
Milliseconds="3000" />
<wsrm:ExponentialBackoff />
<wsrm:AcknowledgementInterval
Milliseconds="200" />
<beapolicy:Expires Expires="P1D" optional="true"/>
</wsrm:RMAssertion>
</wsp:Policy>
<?xml version="1.0"?>
<wsp:Policy
xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:beapolicy="http://www.bea.com/wsrm/policy"
>
<wsrm:RMAssertion >
<wsrm:InactivityTimeout
Milliseconds="86400000" />
<wsrm:BaseRetransmissionInterval
Milliseconds="3000" />
<wsrm:ExponentialBackoff />
<wsrm:AcknowledgementInterval
Milliseconds="200" />
<beapolicy:Expires Expires="P1M" optional="true"/>
</wsrm:RMAssertion>
</wsp:Policy>
WebLogic Web サービスの信頼性のあるメッセージングのコンフィグレーションには、JMS サーバやストア アンド フォワード (SAF) エージェントの作成など標準的な JMS タスクと共に、JWS ファイルへの付加的な JWS アノテーションの追加など Web サービス固有のタスクが必要です。また必要に応じて、あらかじめパッケージ化されているファイルを使用しない場合は、信頼性のある Web サービスの信頼性のあるメッセージング機能を記述した WS-Policy ファイルをユーザ側で作成します。
信頼性のある Web サービスの呼び出しに WebLogic クライアント API を使用している場合、クライアント アプリケーションは WebLogic Server 上で実行される必要があります。したがってコンフィグレーション タスクは、信頼性のある Web サービスを確実に呼び出すクライアント コードを含む Web サービスがデプロイされたソース WebLogic Server インスタンスと、信頼性のある Web サービスそのものがデプロイされた送り先 WebLogic Server インスタンスの、双方の上で実行される必要があります。
以下の手順では、信頼性のある Web サービスと、その信頼性のある Web サービスのオペレーションを確実に呼び出すクライアント Web サービスを作成する方法を説明しています。この手順では、2 つの Web サービスを実装する JWS ファイルをゼロから作成する方法を示しています。既存の JWS ファイルを更新する場合は、この手順をガイドとして利用してください。またこの手順では、ソース WebLogic Server インスタンスと送り先 WebLogic Server インスタンスのコンフィグレーション方法も示しています。
WebLogic Server インスタンスが Ant ベースの開発環境を設定して作成されており、かつ jwsc
Ant タスクを実行して、生成された信頼性のある Web サービスをデプロイするためのターゲットを追加できる、作業用の build.xml
ファイルがあることが前提となっています。さらに、Web サービスを確実に呼び出すクライアント Web サービスをホストする、別の WebLogic Server インスタンスを同様に設定してあることも前提となっています。詳細については、以下を参照してください。
これは、信頼性のある Web サービスがデプロイされる WebLogic Server インスタンスです。
「送り先 WebLogic Server インスタンスのコンフィグレーション」を参照してください。
これは、信頼性のある Web サービスを呼び出すクライアント Web サービスがデプロイされる WebLogic Server インスタンスです。
「ソース WebLogic Server インスタンスのコンフィグレーション」を参照してください。
独自の WS-Policy ファイルの作成の詳細については、「Web サービスの信頼性のあるメッセージングの WS-Policy ファイルの作成」を参照してください。
「信頼性のある JWS ファイルに関するプログラミングのガイドライン」を参照してください。
jwsc
Ant タスクへの呼び出しを含むよう、build.xml
ファイルを更新します。
jwsc
タスクの使用に関する全般的な情報については、「jwsc WebLogic Web サービス Ant タスクの実行」を参照してください。
prompt> ant build-mainService deploy-mainService
「信頼性のある Web サービスを呼び出す JWS ファイルに関するプログラミングのガイドライン」を参照してください。
build.xml
ファイルを更新します。
「信頼性のある Web サービスのクライアント用 build.xml ファイルの更新」を参照してください。
prompt> ant build-clientService deploy-clientService
信頼性のある Web サービスがデプロイされる WebLogic Server インスタンスをコンフィグレーションする際には、JMS およびストア アンド フォワード (SAF) リソースがコンフィグレーションされます。
これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順を大幅に簡略化できます。詳細については、「Web サービス機能用のドメイン コンフィグレーション」を参照してください。
リソースを手作業でコンフィグレーションしたい場合は、次に示す高度な手順に従ってください。各タスクの実行方法の詳細については、リンクが示されている Administration Console オンライン ヘルプのトピックを参照してください。
Administration Console を起動する URL に関する手順については、「Administration Console の起動」を参照してください。
「ファイル ストアの作成」を参照してください。
「JMS サーバの作成」を参照してください。
後に信頼性のある Web サービスを実装する JWS ファイルをプログラムする際に使用するので、JMS キュー用に定義した JNDI 名は覚えておいてください。
「JMS システム モジュールの作成」および「システム モジュールのキューの作成」を参照してください。
両方
] に設定して、送信エージェントと受信エージェントの双方を有効化する。
「ストア アンド フォワード エージェントの作成」を参照してください。
クラスタ内で Web サービスの信頼性のあるメッセージング機能を使用する場合は、以下の作業を行う必要があります。
クライアント Web サービスがデプロイされる WebLogic Server インスタンスをコンフィグレーションする際には、JMS およびストア アンド フォワード (SAF) リソースがコンフィグレーションされます。
これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順を大幅に簡略化できます。詳細については、「Web サービス機能用のドメイン コンフィグレーション」を参照してください。
リソースを手作業でコンフィグレーションしたい場合は、次に示す高度な手順に従ってください。各タスクの実行方法の詳細については、リンクが示されている Administration Console オンライン ヘルプのトピックを参照してください。
Administration Console を起動する URL に関する手順については、「Administration Console の起動」を参照してください。
「ファイル ストアの作成」を参照してください。
「JMS サーバの作成」を参照してください。
SAF エージェントを作成する際は、送信エージェントと受信エージェントの両方を有効にするために、必ず [エージェントの種類] フィールドを [両方
] に設定してください。
「ストア アンド フォワード エージェントの作成」を参照してください。
WS-Policy ファイルは、WS-Policy 仕様に準拠するポリシー アサーションを含む XML ファイルです。この場合には、WS-Policy ファイルに Web サービスの信頼性のあるメッセージング ポリシーのアサーションが含まれています。
WebLogic Server に含まれる 2 つのデフォルトの信頼性のあるメッセージング WS-Policy ファイルのうち一方を使用できます。これらのファイルは、ほとんどの場合に適合しています。しかし、これらのファイルは変更ができないので、ニーズに合わない場合は独自のファイルを作成することが必要です。付属の WS-Policy ファイルについては、「Web サービスの信頼性のあるメッセージングをコンフィグレーションするための WS-Policy ファイルの使用」を参照してください。この節のこれ以降では、ユーザ独自の WS-Policy ファイルの作成方法について説明します。
WS-Policy ファイルのルート要素は <Policy>
です。Web サービスの信頼性のあるメッセージング ポリシーのアサーションを使用するには、これに以下のネームスペース宣言が含まれていることが必要です。
<wsp:Policy
xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:beapolicy="http://www.bea.com/wsrm/policy">
Web サービスの信頼性のあるメッセージング ポリシーのアサーションはすべて、<wsrm:RMAssertion>
要素の内部でラップします。wsrm:
ネームスペースを使用するアサーションは、WS-ReliableMessaging 仕様で定義される標準的なアサーションです。beapolicy:
ネームスペースを使用するアサーションは、WebLogic 固有のものです。詳細については、「Web サービスの信頼性のあるメッセージングのポリシー アサーションに関するリファレンス」を参照してください。
Web サービスの信頼性のあるメッセージングのアサーションは、すべて任意指定なので、デフォルト値が不適切なものだけを設定します。アサーションの指定順序は重要です。以下のアサーションを指定できますが、WS-Policy ファイルでは以下の一覧の順序どおりに指定する必要があります。
<wsrm:InactivityTimeout>
- 非アクティブ間隔を定義する、Milliseconds
属性で指定されるミリ秒数。この時間が経過した時点で、送り先エンドポイントがソース エンドポイントからのメッセージを受け取っていなければ、送り先エンドポイントは、処理が行われずシーケンスは終了したものと見なします。これは、ソース エンドポイントについても同様です。デフォルトでは、シーケンスがタイムアウトすることはありません。 <wsrm:BaseRetransmissionInterval>
- ソース エンドポイントがメッセージを送信してから、そのメッセージの確認応答を受け取っていない場合に再送信を行うまでの間隔 (ミリ秒単位)。デフォルト値は、ソース エンドポイントの WebLogic Server インスタンス上の SAF エージェントによって設定されます。<wsrm:ExponentialBackoff>
- 再送信の間隔が、指数関数的なバックオフ アルゴリズムを使用して調整されることを指定。この要素には属性はありません。 <wsrm:AcknowledgmentInterval>
- 送り先エンドポイントがスタンドアロンの確認応答を送信しなければならない最大間隔 (ミリ秒単位)。デフォルト値は、送り先エンドポイントの WebLogic Server インスタンス上の SAF エージェントによって設定されます。<beapolicy:Expires>
- 信頼性のある Web サービスの有効期限が切れ、これ以上のシーケンス メッセージを受け付けなくなるまでの時間の長さ。デフォルト値では、有効期限が切れることはありません。この要素には、Expires
という 1 つの属性があります。この属性のデータ型は XML スキーマ期間型です。たとえば、有効期限までを 1 日と設定する場合は、<beapolicy:Expires Expires="P1D" />
とします。<beapolicy:QOS>
- 「Web サービスの信頼性のあるメッセージングの概要」で説明されている、配信保証レベル。この要素には、QOS
という 1 つの属性があります。これは、AtMostOnce
、AtLeastOnce
、ExactlyOnce
の各値のうちの 1 つに設定します。また、メッセージを順序通りにすることを指定するために InOrder
文字列を含めることもできます。デフォルト値は、ExactlyOnce InOrder
です。この要素は通常、設定されません。
次の例では、簡単な Web サービスの信頼性のあるメッセージングの WS-Policy ファイルを示します。
<?xml version="1.0"?>
<wsp:Policy
xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"
xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"
xmlns:beapolicy="http://www.bea.com/wsrm/policy"
>
<wsrm:RMAssertion >
<wsrm:InactivityTimeout
Milliseconds="600000" />
<wsrm:BaseRetransmissionInterval
Milliseconds="500" />
<wsrm:ExponentialBackoff />
<wsrm:AcknowledgementInterval
Milliseconds="2000" />
</wsrm:RMAssertion>
</wsp:Policy>
この節では、信頼性のある Web サービスを実装する JWS ファイルの作成方法を説明します。
信頼性のある Web サービスを実装する JWS ファイルでは、次の JWS アノテーションが使用されます。
@weblogic.jws.Policy
- 必須。「@Policy アノテーションの使用」を参照してください。@javax.jws.Oneway
- 一緒に非同期の要求と応答機能を使用することなく、単独で Web サービスの信頼性のあるメッセージングを使用している場合のみ、必須。「@Oneway アノテーションの使用」および「非同期機能の併用」を参照してください。@weblogic.jws.BufferQueue
- 任意。「@BufferQueue アノテーションの使用」を参照してください。@weblogic.jws.ReliabilityBuffer
- 任意。「@ReliabilityBuffer アノテーションの使用」を参照してください。
次のサンプルでは、信頼性のある Web サービスを実装する簡単な JWS ファイルを示します。太字で示された Java コードに対応するコーディングのガイドラインについては、サンプルの後の説明を参照してください。
package examples.webservices.reliable;
import javax.jws.WebMethod;
import javax.jws.WebService;import javax.jws.Oneway;
import weblogic.jws.WLHttpTransport;
import weblogic.jws.ReliabilityBuffer;
import weblogic.jws.BufferQueue;
import weblogic.jws.Policy;
/**
* 簡単な信頼性のある Web サービス
*/
@WebService(name="ReliableHelloWorldPortType",
serviceName="ReliableHelloWorldService")
@WLHttpTransport(contextPath="ReliableHelloWorld",
serviceUri="ReliableHelloWorld",
portName="ReliableHelloWorldServicePort")
@Policy(uri="ReliableHelloWorldPolicy.xml",
direction=Policy.Direction.both,
attachToWsdl=true)
@BufferQueue(name="webservices.reliable.queue")
public class ReliableHelloWorldImpl {
@WebMethod()@Oneway()
@ReliabilityBuffer(retryCount=10, retryDelay="10 seconds")
public void helloWorld(String input) {
System.out.println(" Hello World " + input);
}
}
このサンプルでは、ReliableHelloWorldPolicy.xml
ファイルがクラス レベルで Web サービスに追加されています。つまり、ポリシー ファイルは Web サービスのすべてのパブリック オペレーションに適用されます。ポリシー ファイルは、リクエスト Web サービス メッセージ (信頼性のあるメッセージング機能によって要求される) のみに適用され、WSDL ファイルに追加されます。
WebLogic Server が、Web サービスの信頼性のあるメッセージングを有効化するために内部で使用する JMS キューの JNDI 名は、@BufferQueue
アノテーションで指定されているように、webservices.reliable.queue
です。
helloWorld()
メソッドは、@WebMethod
と @Oneway
、どちらの JWS アノテーションでもマークされています。これは、このメソッドが helloWorld
というパブリック オペレーションであるということです。@Policy
アノテーションがあるために、オペレーションを確実に呼び出すことができます。@ReliabilityBuffer
アノテーションに記述されているとおり、Web サービスのランタイムでは、最大で 10 回、10 秒間隔で、信頼性のあるメッセージをサービスに配信しようとします。たとえば、トランザクションがロールバックされる場合や、コミットしない場合などには、メッセージの再配信が必要となることがあります。
信頼性のあるメッセージングのアサーションが含まれる WS-Policy ファイルを Web サービスに追加するよう指定するには、JWS ファイルで @Policy
アノテーションを使用します。
独自に記述する代わりに使用できる、WebLogic Server で用意されている 2 つの WS-Policy ファイル (DefaultReliability.xml
および LongRunningReliability.xml
) については、「Web サービスの信頼性のあるメッセージングをコンフィグレーションするための WS-Policy ファイルの使用」を参照してください。
@Policy
アノテーションを Web サービスの信頼性のあるメッセージングに使用する場合、以下の要件を満たしている必要があります。
uri
属性を使用して、ポリシー ファイルのビルド時の場所を以下のように指定します。
@Policy(uri="ReliableHelloWorldPolicy.xml",
direction=Policy.Direction.both,
attachToWsdl=true)
この例では、ReliableHelloWorldPolicy.xml
ファイルが JWS ファイルと同じディレクトリに置かれていることが示されています。
policy:
プレフィックスを使用する。この構文ではビルド時の jwsc
Ant タスクに、ファイル システムの実際のファイルを探させず、Web サービスが、サービスのデプロイ時に WebLogic Server から WS-Policy ファイルを取り出すことを通知しています。この構文は、あらかじめパッケージ化されている WS-Policy ファイルの一方を指定する際、または共有の Java EE ライブラリ内にパッケージ化されている WS-Policy ファイルを指定する際に使用します。 注意 : | 共有 Java EE ライブラリは、さまざまなエンタープライズ アプリケーション内にパッケージ化されている複数の Web サービスと WS-Policy ファイルを共有する場合に有用です。WS-Policy ファイルが共有 Java EE ライブラリの META-INF/policies または WEB-INF/policies ディレクトリに置かれている限り、ポリシー ファイルは Web サービスの同じアーカイブにパッケージ化されている場合と同様に指定できます。ライブラリの作成、および Web サービスがポリシー ファイルを見つけることができるようにするための環境設定については、「共有 Java EE ライブラリおよびオプション パッケージの作成」を参照してください。 |
http:
プレフィックスを使用する。@Policy(uri="http://someSite.com/policies/mypolicy.xml"
direction=Policy.Direction.both,
attachToWsdl=true)
また、@Policy
アノテーションの attachToWsd
属性を設定して、ポリシー ファイルを Web サービスのパブリック規約が記述された WSDL ファイルに付加するかどうかを指定することもできます。通常は、クライアント アプリケーションで Web サービスの信頼性のあるメッセージング機能が認識されるよう、パブリックなものとしてポリシーを公開します。そのため、この属性のデフォルト値は true
です。
信頼性のある Web サービスのオペレーションを同期的に呼び出す (すなわち、非同期の要求と応答機能を使用しない) 場合は、実装メソッドに @Oneway
アノテーションを付けて、そのメソッドが一方向のものであることを指定する必要があります。つまり、メソッドは値を返すことができず、明示的に void
を返すことになります。
反対に、メソッドに @Oneway
アノテーションが付いていなければ、非同期の要求と応答機能を使用して呼び出す必要があります。オペレーションの呼び出し方法がわからない場合は、同期と非同期の 2 種類のオペレーションを作成することを検討してください。
「非同期の要求と応答を使用した Web サービスの呼び出し」および「非同期機能の併用」を参照してください。
信頼性のあるメッセージを内部に格納するために WebLogic Server が使用する JMS キューの JNDI 名を指定するには、@BufferQueue
アノテーションを使用します。JNDI 名は、「送り先 WebLogic Server インスタンスのコンフィグレーション」の手順 4 で JMS キューを作成した際にコンフィグレーションしたものです。
@BufferQueue
アノテーションは、省略可能です。これを JWS ファイルで指定しなければ、WebLogic Server は weblogic.wsee.DefaultQueue
の JNDI 名を持つキューを使用します。ただし、それでもこの JNDI 名を持つ JMS キューを Administration Console で明示的に作成する必要はあります。
このアノテーションは、WebLogic Server による JMS キューから Web サービス実装へのメッセージ配信試行回数 (デフォルトでは 3 回)、およびサーバが待機すべき再試行間隔 (デフォルトでは 5 秒) の指定に使用します。
再試行回数の指定には retryCount
属性を、待機時間の指定には retryDelay
属性を使用します。retryDelay
属性の形式としては、数字の後に以下の文字列のうち 1 つを続けます。
たとえば、再試行回数を 20、再試行の遅延を 2 日と指定するには、次の構文を使用します。
@ReliabilityBuffer(retryCount=20, retryDelay="2 days")
WebLogic クライアント API を使用している場合は、信頼性のある Web サービスを Web サービス内から呼び出す必要があります。スタンドアロンのクライアント アプリケーションからは呼び出せません。
次の例では、「信頼性のある JWS ファイルに関するプログラミングのガイドライン」で説明した、サービスから信頼性のあるオペレーションを呼び出す Web サービス用の簡単な JWS ファイルを示します。太字で示された Java コードに対応するコーディングのガイドラインについては、サンプルの後の説明を参照してください。
package examples.webservices.reliable;
import java.rmi.RemoteException;
import javax.jws.WebMethod;
import javax.jws.WebService;
import weblogic.jws.WLHttpTransport;import weblogic.jws.ServiceClient;
import weblogic.jws.ReliabilityErrorHandler;
import examples.webservices.reliable.ReliableHelloWorldPortType;
import weblogic.wsee.reliability.ReliabilityErrorContext;
import weblogic.wsee.reliability.ReliableDeliveryException;
@WebService(name="ReliableClientPortType",
serviceName="ReliableClientService")
@WLHttpTransport(contextPath="ReliableClient",
serviceUri="ReliableClient",
portName="ReliableClientServicePort")
public class ReliableClientImpl
{
@ServiceClient(
serviceName="ReliableHelloWorldService",
portName="ReliableHelloWorldServicePort")
private ReliableHelloWorldPortType port;
@WebMethod
public void callHelloWorld(String input, String serviceUrl)
throws RemoteException {
port.helloWorld(input);
System.out.println(" Invoked the ReliableHelloWorld.helloWorld operation reliably."
}
@ReliabilityErrorHandler(target="port")
public void onReliableMessageDeliveryError(ReliabilityErrorContext ctx) {
ReliableDeliveryException fault = ctx.getFault();
String message = null;
if (fault != null) {
message = ctx.getFault().getMessage();
}
String operation = ctx.getOperationName();
System.out.println("Reliable operation " + operation + " may have not invoked.The error message is " + message);
}
}
信頼性のある Web サービスを呼び出す JWS ファイルをプログラミングする際には、以下のガイドラインに従います。ガイドラインのサンプル コードは、上述のサンプル内では太字で示されています。
@ServiceClient
および @ReliabitliyErrorHandler
JWS アノテーションをインポートする。import weblogic.jws.ServiceClient;
import weblogic.jws.ReliabilityErrorHandler;
jwsc
Ant タスクの <clientgen>
子要素によって後から作成されます。スタブ パッケージは、<clientgen>
の packageName
属性によって指定され、スタブの名前は呼び出された Web サービスの WSDL によって決まります。import examples.webservices.reliable.ReliableHelloWorldPortType;
import weblogic.wsee.reliability.ReliabilityErrorContext;
import weblogic.wsee.reliability.ReliableDeliveryException;
@ServiceClient
JWS アノテーションを使用して、呼び出したい信頼性のある Web サービスの名前とポートを指定する。このアノテーションは、プライベート変数のフィールド レベルで指定します。この変数のデータ型は、呼び出している Web サービスの JAX-RPC ポート タイプとなります。 @ServiceClient(
serviceName="ReliableHelloWorldService",
portName="ReliableHelloWorldServicePort")
private ReliableHelloWorldPortType port;
@ServiceClient
アノテーションを付けたスタブを使用して、信頼性のあるオペレーションを呼び出す。
port.helloWorld(input);
オペレーションは一方向のものとしてマークされているので、値は返しません。
@weblogic.jws.ReliabilityErrorHandler
アノテーションを付ける。@ReliabilityErrorHandler(target="port")
public void onReliableMessageDeliveryError(ReliabilityErrorContext ctx) {
ReliableDeliveryException fault = ctx.getFault();
String message = null;
if (fault != null) {
message = ctx.getFault().getMessage();
}
String operation = ctx.getOperationName();
System.out.println("Reliable operation " + operation + " may have not invoked.The error message is " + message);
}
このメソッドは、唯一のパラメータとして ReliabilityErrorContext
を取り、void
を返します。
このエラー処理メソッドのプログラミングの詳細については、「weblogic.jws.ReliabilityErrorHandler」を参照してください。
クライアント Web サービスをプログラミングする際は、以下の点に注意してください。
WebLogic Server には、Web サービスの信頼性のあるメッセージング機能で使用するユーティリティ クラスが用意されています。このクラスを使用すると、オプションのコンフィグレーション、シーケンス ID の取得、信頼性のあるシーケンスの終了、といった一般的なタスクを実行できます。これらのタスクには、信頼性のある Web サービス内で実行するものと、信頼性のある Web サービスを呼び出す Web サービス内で実行するものがあります。
詳細については、weblogic.wsee.reliability.WsrmUtils を参照してください。
build.xml
を更新して、信頼性のある Web サービスのオペレーションを呼び出す JWS ファイルを生成するには、次のような taskdefs
および build-reliable-client
ターゲットを追加します。詳細については、サンプルの後の説明を参照してください。
<taskdef name="jwsc"
classname="weblogic.wsee.tools.anttasks.JwscTask" />
<target name="build-reliable-client">
<jwsc
enableAsyncService="true"
srcdir="src"
destdir="${client-ear-dir}" >
<jws file="examples/webservices/reliable/ReliableClientImpl.java">
<clientgen
wsdl="http://${wls.destination.host}:${wls.destination.port}/ReliableHelloWorld/ReliableHelloWorld?WSDL"
packageName="examples.webservices.reliable"/>
</jws>
</jwsc>
</target>
jwsc
Ant タスクの完全なクラス名を定義するには、taskdef
Ant タスクを使用します。
クライアント Web サービスをコンパイルする jwsc
Ant タスクを更新して、<jws>
要素の <clientgen>
子要素を含めます。これにより、デプロイされた ReliableHelloWorld
Web サービスの JAX-RPC スタブが生成およびコンパイルされるようになります。jwsc
Ant タスクでは、これらのスタブが生成された WAR ファイルに自動的にパッケージ化されるため、即座にクライアント Web サービスからアクセスできるようになります。このようにするのは、生成されたクラスの 1 つを ReliableClientImpl
JWS ファイルでインポートして使用するためです。
WebLogic Server では、プロダクションの再デプロイメントがサポートされています。つまり、信頼性のある WebLogic Web サービスの更新後の新しいバージョンを、同じ Web サービスの古いバージョンと並行してデプロイできます。
WebLogic Server では、新しいクライアントのリクエストのみが新しいバージョンに転送されるように、クライアント接続が自動的に管理されます。再デプロイメント時にすでに Web サービスに接続していたクライアントは、作業が完了するまで古いバージョンのサービスを使用し続けます。作業が完了した時点で、自動的に古い Web サービスが廃止されます。クライアントが信頼性のある Web サービスに接続されている場合は、既存の信頼性のあるメッセージ シーケンスがクライアントによって明示的に終了されるか、またはタイムアウトになったときに、そのクライアントの作業が完了したと見なされます。
プロダクションの再デプロイメントと Web サービス クライアントの詳細については、「Web サービスを再デプロイする際にクライアント側で考慮すべき事項」を参照してください。
信頼性のある Web サービスを呼び出すクライアント アプリケーションでは、直接オペレーションを呼び出すのではなく、プロキシ サーバを使用することがあります。プロキシを使用する理由としては、ファイアウォールの存在や、呼び出された Web サービスのクラスタへのデプロイメントなどがあります。
この場合、呼び出された Web サービスをホストする WebLogic Server インスタンスは、プロキシ サーバのアドレスとポートでコンフィグレーションされる必要があります。Web サービスがクラスタにデプロイされている場合は、そのクラスタ内のすべてのサーバをコンフィグレーションすることが必要です。
weblogic-wsee-proxy-channel-
XXX
とする必要があります。XXX
は、プロトコルを表します。たとえば、HTTPS 用のネットワーク チャネルを作成する場合、weblogic-wsee-proxy-channel-https
という名前にします。
ネットワーク チャネルの作成に関する全般的な情報については、Administration Console オンライン ヘルプの「カスタム ネットワーク チャネルのコンフィグレーション」を参照してください。
![]() ![]() ![]() |