Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービスの高度な機能のプログラミング 11g リリース 1 (10.3.1) B55544-01 |
|
![]() 戻る |
![]() 次へ |
以下の節では、Web サービスの信頼性のあるメッセージングの使用方法について説明します。
注意 : Web サービスの信頼性のあるメッセージングは、WebLogic Web サービスの非同期の要求と応答機能を使用する必要があります。先に進む前に、「非同期の要求と応答を使用した Web サービスの呼び出し」で説明する概念を理解する必要があります。 |
Web サービスの信頼性のあるメッセージングとは、ある 1 つのアプリケーション サーバで実行中のアプリケーションが、別のアプリケーション サーバで実行中の Web サービスを確実に呼び出せるフレームワークです。ここでは、双方のサーバで http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdf
にある WS-ReliableMessaging 仕様が実装されていることが前提となっています。信頼性のある、とは 2 つの Web サービス間でのメッセージの配信を保証できるということです。
注意 : Web サービスの信頼性のあるメッセージングは、http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdf にある WS-ReliableMessaging 仕様が実装された任意の 2 つのアプリケーション サーバ間で機能します。しかしこのマニュアルでは、この 2 つのアプリケーション サーバを、WebLogic Server インスタンスであると想定しています。
Web サービスの信頼性のあるメッセージングは、JMS 転送機能ではサポートされません。 |
WebLogic Web サービスは、http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdf
にある WS-ReliableMessaging 仕様 (2007 年 6 月) に準拠しています。これは、別々のアプリケーション サーバで実行されている 2 つの Web サービスが、ソフトウェア コンポーネント、システム、またはネットワークに障害が発生していても、確実に通信できる方法について記述したものです。具体的には、この仕様ではソース エンドポイント (つまりクライアント Web サービス) から送り先エンドポイント (つまりオペレーションを確実に呼び出せる Web サービス) へ送信されるメッセージが、1 つまたは複数の配信保証に基づいて確実に配信されるか、そうでなければ必ずエラーが送出される、相互運用性を備えたプロトコルについて説明しています。
信頼性のある WebLogic Web サービスには、以下の配信保証が備わっています。
表 3-1 信頼性のあるメッセージングの配信保証
配信保証 | 説明 |
---|---|
At Most Once |
メッセージは最大で 1 回、重複なしに配信される。メッセージによっては、一度も配信されない可能性もある。 |
At Least Once |
すべてのメッセージが、少なくとも 1 回配信される。メッセージによっては、1 回よりも多く配信される可能性がある。 |
Exactly Once |
すべてのメッセージが、必ず 1 回重複なしに配信される。 |
In Order |
メッセージは、送信された順序で配信される。この配信保証は、上記の 3 つの保証と組み合わせることもできる。 |
注意 : Web サービスの信頼性のあるメッセージングでは、非同期メッセージを使用する必要があります。クライアントは信頼性のあるサービスを同期的に呼び出すことはできません。信頼性のあるスタブ メソッドを呼び出す時、xyz() の代わりに xyzAsync() のような非同期署名を使用する必要があります。SOAP メッセージを直接作成するクライアントのために、非匿名の ReplyTo アドレスを使用して要求メッセージを作成します。ReplyTo を匿名 URI に設定することはできません。JAX-RPC ベースの信頼性のあるサービスのオペレーションを呼び出そうとすると (同期スタブ署名を呼び出すか、非匿名の ReplyTo を使用して要求を送信することにより)、実行時例外が送出されます。 |
ここでは、信頼性のあるクライアント Web サービスを作成し、その Web サービスがデプロイされる 2 つの WebLogic Server インスタンスをコンフィグレーションする方法について説明します。Web サービスの信頼性のあるメッセージングのアーキテクチャの詳細については、WS-ReliableMessaging 仕様を参照してください。(http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdf
を参照。)
WebLogic Web サービスでは、送り先エンドポイントが Web サービスの信頼性のあるメッセージングの機能と要件を記述および公開できるようにする、WS-Policy ファイルを使用します。WS-Policy ファイルは、サポートされている WS-ReliableMessaging 仕様のバージョンやサービス品質の要件などが記述された XML ファイルです。WS-Policy 仕様 (http://www.w3.org/TR/ws-policy/
) では、Web サービスのポリシーを記述して通信するための、汎用的なモデルと構文が提供されています。
WebLogic Server には、標準的な信頼性のあるメッセージング アサーションを含むあらかじめパッケージ化されている WS-Policy ファイルがあります (付録 A「信頼性のあるメッセージングのためのあらかじめパッケージ化されている WS-Policy ファイル」を参照)。あらかじめパッケージ化されている WS-Policy ファイルがニーズに合わない場合は、独自の WS-Policy ファイルを作成する必要があります。詳細は、「Web サービスの信頼性のあるメッセージングの WS-Policy ファイルの作成」を参照してください。信頼性のあるメッセージングのポリシーのアサーションに関するリファレンス情報については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「Web サービスの信頼性のあるメッセージングのポリシー アサーションに関するリファレンス」を参照してください。
次の図に、信頼性のあるメッセージの一方向の交換を示します。
「信頼性のあるメッセージ シーケンス」は、RM 送信元と RM 送り先の間で確実に交換されるメッセージ セットの進捗状況を追跡する際に使用されます。シーケンスは、0 個以上のメッセージの送信に使用でき、文字列識別子で識別されます。この識別子は、信頼性のあるメッセージングを使用する際に、そのシーケンスを参照するために使用されます。
Web サービス クライアント アプリケーションは、RM 送信元が RM 送り先へ送信する信頼性のある配信のメッセージを送信します。RM 送り先は、信頼性のあるメッセージを受信したことを応答確認し、そのメッセージを Web サービス アプリケーションに配信します。RM 送信元は、応答確認を受け取るまでメッセージを再送信できます。
Web サービス クライアントは、JAX-RPC スタブに対するメソッドの呼び出しを行い、対象 Web サービスへメッセージを送信します。スタブは、信頼性のある Web サービスのポート タイプに関連付けられており、その Web サービスのプログラム的なインタフェースを表します。WebLogic では、このスタブ内に、信頼性のあるメッセージ シーケンスの識別子が格納されます。これによって、信頼性のあるメッセージ シーケンスが単一の JAX-RPC スタブに接続されます。特定のスタブを使用して送信されるすべてのメッセージは、そのメッセージの数に関係なく、同じ信頼性のあるメッセージング シーケンスを使用します。JAX-RPC スタブは、「jwsc」 Ant タスクの子要素 <clientgen>
によって作成されます。
WebLogic Server では、リソースが信頼性のあるシーケンスに関連付けられた状態で維持されるため、これらのリソースを適時に開放する措置を講じることをお勧めします。WebLogic Server には、Web サービスの信頼性のあるメッセージングで使用できるユーティリティ クラス「weblogic.wsee.reliability.WsrmUtils」があります。このクラスを使用すると、オプションのコンフィグレーション、シーケンス ID の取得、信頼性のあるシーケンスの終了、といった一般的なタスクを実行できます。
通常の環境下では、信頼性のあるシーケンスは、すべてのメッセージが送信され、RM 送り先によって確認応答されるまで保持する必要があります。シーケンスを容易に適時終了するには、信頼性のあるメッセージ シーケンスの最終メッセージを識別することが推奨されます。識別すると、RM 送り先へのメッセージの送信が完了したこと、および WebLogic Server が信頼性のあるシーケンスを自動的に終了する前に最終確認応答の検出を開始できることを示します。最終メッセージは、weblogic.wsee.reliability.WsrmUtils
.setFinalMessage()
メソッドを使用し、メッセージの送信に使用されている JAX-RPC スタブを RM 送り先に渡して示します。
最終メッセージを識別すると、最終メッセージまでの最終メッセージを含むすべてのメッセージが確認応答され、信頼性のあるメッセージ シーケンスが終了し、すべてのリソースが開放されます。識別しない場合、シーケンスは、コンフィグレーションしたシーケンスの有効期限に達した後で自動的に終了します。
これは推奨されませんが、terminateSequence()
メソッドを使用すると、すべてのメッセージが確認応答されているかどうかに関係なく、信頼性のあるメッセージ シーケンスを終了できます。このメソッドを発行すると、このスタブ上で信頼性のあるメッセージをそれ以降送信することはできません。
注意 : JAX-RPC スタブは、最初のメソッドが信頼性のある Web サービスに対して呼び出された直後まで完全に初期化されません。最初のメソッドが呼び出されると、RM 送信元はCreateSequence() メッセージを RM 送り先へ送信し、信頼性のあるシーケンスを作成および登録するよう RM 送り先に要求します。その後、RM 送り先は新たに作成されたシーケンスにその ID で応答します。RM 送信元は、この応答 ID を受信するまで RM 送り先と通信できず、RM 送り先の対象サービスを表す JAX-RPC スタブは使用できません。
信頼性のあるメッセージ シーケンスに対しては、そのシーケンスが完全に初期化されるまで操作を行うことはできません。操作するとエラーが返されます。信頼性のあるメッセージ シーケンスが初期化されているかどうかをモニタするには、 |
WsrmUtils
ユーティリティ クラスの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server 10.3.1 API リファレンス』の「weblogic.wsee.reliability.WsrmUtils」を参照してください。
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 サービスを作成する手順を説明しています。この手順では、2 つの Web サービスを実装する JWS ファイルをゼロから作成する方法を示しています。既存の JWS ファイルを更新する場合は、この手順をガイドとして利用してください。またこの手順では、ソース WebLogic Server インスタンスと送り先 WebLogic Server インスタンスのコンフィグレーション方法も示しています。
表 3-2 信頼性のある Web サービスの作成および呼び出し手順
# |
手順 | 説明 |
---|---|---|
1 |
送り先 WebLogic Server インスタンスとソースの WebLogic Server インスタンスをコンフィグレーションする。 |
信頼性のある Web サービスを送り先 WebLogic Server インスタンスに対してデプロイする。送り先 WebLogic Server インスタンスのコンフィグレーションについては、「送り先 WebLogic Server インスタンスのコンフィグレーション」を参照。 信頼性のある Web サービスを呼び出すクライアント Web サービスを、ソースの WebLogic Server インスタンスに対してデプロイする。ソースの WebLogic Server インスタンスのコンフィグレーションについては、「ソース WebLogic Server インスタンスのコンフィグレーション」を参照。 |
2 |
WS-Policy ファイルを作成する (省略可能)。 |
任意の XML またはプレーン テキスト エディタを使用し、必要に応じて送り先 WebLogic Server 上で実行されている Web サービスの信頼性のあるメッセージング機能が記述された WS-Policy ファイルを作成する。独自の WS-Policy ファイルを作成する詳細については、「Web サービスの信頼性のあるメッセージングの WS-Policy ファイルの作成」を参照。 WebLogic Server に付属しているいずれかの WS-Policy ファイルを使用する場合、この手順は不要。詳細については、「信頼性のあるメッセージングためのあらかじめパッケージ化されている WS-Policy ファイル」を参照。 |
3 |
信頼性のある Web サービスを実装する JWS ファイルを作成および更新する。 |
この Web サービスは、送り先 WebLogic Server インスタンスにデプロイされる。「信頼性のある JWS ファイルに関するプログラミングのガイドライン」を参照。 |
4 |
信頼性のある Web サービスのコンパイルに使用される |
信頼性のある JWS ファイルを Web サービスにコンパイルする、
|
5 |
信頼性のある JWS ファイルをコンパイルおよびデプロイする。 |
適切な対象を呼び出して信頼性のある JWS ファイルをコンパイルし、送り先 WebLogic Server にデプロイする。例 : prompt> ant build-mainService deploy-mainService |
6 |
信頼性のある Web サービスをコンフィグレーションする。 |
Administration Console を使用して、信頼性のある Web サービスの信頼性のあるメッセージング オプションをコンフィグレーションする。「信頼性のある Web サービスの信頼性のあるメッセージングのコンフィグレーション」を参照。 |
7 |
クライアント Web サービスを実装する JWS ファイルを作成および更新する。 |
このサービスは、信頼性のある Web サービスを呼び出し、ソース WebLogic Server にデプロイされる。「信頼性のある Web サービスを呼び出す JWS ファイルに関するプログラミングのガイドライン」を参照。 |
8 |
クライアント Web サービスのコンパイルに使用される |
|
9 |
クライアント JWS ファイルをコンパイルおよびデプロイする。 |
適切な対象を呼び出してクライアント JWS ファイルをコンパイルし、ソース WebLogic Server にデプロイする。例 : prompt> ant build-clientService deploy-clientService |
これらの各手順の詳細は、以降の節を参照してください。
また、以下の高度なトピックについて説明します。
信頼性のあるメッセージングと MTOM の使用 - MTOM/XOP を使用し、SOAP メッセージの xs:base64Binary
型の XML データの送信を最適化する信頼性のある Web サービスを開発します。
信頼性のある Web サービスを再デプロイする際にクライアント側で考慮すべき事項 - 信頼性のある更新済み WebLogic Web サービスの新しいバージョンを、同じ Web サービスの古いバージョンと一緒にデプロイする際にクライアント側で考慮すべき事項について説明します。
信頼性のあるメッセージングとプロキシ サーバの使用 - プロキシ サーバを使用して信頼性のある Web サービス オペレーションを呼び出す際の考慮事項について説明します。
以下の作業を完了している必要があります。
送り先 WebLogic Server インスタンスとソースの WebLogic Server インスタンスの作成
各環境での Ant ベースの開発環境の設定
jwsc
Ant タスクを実行し信頼性のある生成済み Web サービスをデプロイするための対象の追加など、編集可能な build.xml
ファイルでの作業
詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「WebLogic Web サービスの開発」を参照してください。
信頼性のある Web サービスがデプロイされる WebLogic Server インスタンスをコンフィグレーションするには、JMS およびストア アンド フォワード (SAF) リソースをコンフィグレーションします。
これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順を大幅に簡略化できます。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Web サービス機能用のドメイン コンフィグレーション」を参照してください。
注意 : または、WLST を使用してリソースをコンフィグレーションすることもできます。WLST を使用してドメインを拡張する方法の詳細については、『Oracle Fusion Middleware Oracle WebLogic Scripting Tool ガイド』の「既存ドメインのコンフィグレーション」を参照してください。 |
リソースを手作業でコンフィグレーションする場合、以下の手順を実行します。
表 3-3 送り先 WebLogic Server インスタンスを手作業でコンフィグレーションする手順
# |
手順 | 説明 |
---|---|---|
1 |
送り先 WebLogic Server が格納されたドメインの Administration Console を起動する。 |
ブラウザで Administration Console を起動するには、次の URL を入力する。
http://host:port/console
各要素の説明は次のとおりである。
『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Administration Console の起動」を参照。 |
2 |
永続ファイル ストアを作成する (省略可能)。 |
必要に応じて、送り先 WebLogic Server が Web サービスの信頼性のあるメッセージングの内部情報を格納するために使用する永続ストア (ファイルまたは JDBC) を作成する。新規作成しない場合は、既存のものを使用するか、常に存在するデフォルトのストアを使用できる。 『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「ファイル ストアの作成」を参照。 |
3 |
JMS サーバを作成する。 |
JMS サーバを作成する。JMS サーバがすでに存在する場合は、新しい JMS サーバを作成せずにそれを使用することができる。 『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「JMS サーバの作成」を参照。 |
4 |
JMS モジュールを作成し、キューを定義する。 |
JMS モジュールを作成し、その中で JMS キューを定義する。JMS モジュールがすでに存在する場合は、新しい JMS モジュールを作成せずにそれを使用することができる。JMS キューを、1 つ前の手順で作成した JMS サーバに対象指定する。この JMS キューがローカルであることを指定する必要がある。通常は、ローカル JNDI 名の設定により指定できる。 後に信頼性のある Web サービスを実装する JWS ファイルをプログラムする際に使用するため、JMS キュー用に定義した JNDI 名は覚えておく必要がある。 『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「JMS システム モジュールの作成」と「システム モジュールのキューの作成」を参照。 クラスタ化の考慮事項 : クラスタ内で Web サービスの信頼性のあるメッセージング機能を使用する場合は、以下の作業を行う必要がある。
|
5 |
ストア アンド フォワード (SAF) エージェントを作成する。 |
新規作成しない場合は、既存のものを使用できる。 SAF エージェントを作成する場合は、次の作業を行う。
クラスタ化の考慮事項 :
『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「ストア アンド フォワード エージェントの作成」を参照。 |
6 |
必要に応じて、現在のドメイン環境をチューニングする (省略可能)。 |
『Oracle Fusion Middleware Oracle WebLogic Server パフォーマンス チューニング ガイド』の「Web サービスのパフォーマンスを向上させるために負荷が高いシステムのチューニング」を参照。 |
7 |
サーバを再起動します。 |
コンフィグレーションへの変更を有効にするには、『Oracle Fusion Middleware Oracle WebLogic Server サーバの起動と停止の管理』の「サーバの起動と停止」の説明に従ってサーバを再開する必要がある。 |
クライアント Web サービスがデプロイされる WebLogic Server インスタンスをコンフィグレーションする際には、JMS およびストア アンド フォワード (SAF) リソースがコンフィグレーションされます。
これらのリソースは手作業でもコンフィグレーションできますが、コンフィグレーション ウィザードで、Web サービス固有の拡張テンプレートを使用して WebLogic Server ドメインを拡張することもできます。コンフィグレーション ウィザードを使用すると、必要なコンフィグレーション手順を大幅に簡略化できます。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Web サービス機能用のドメイン コンフィグレーション」を参照してください。
注意 : または、WLST を使用してリソースをコンフィグレーションすることもできます。WLST を使用してドメインを拡張する方法の詳細については、『Oracle Fusion Middleware Oracle WebLogic Scripting Tool ガイド』の「既存ドメインのコンフィグレーション」を参照してください。 |
リソースを手作業でコンフィグレーションする場合、以下の手順を実行します。
表 3-4 ソース WebLogic Server インスタンスのコンフィグレーション手順
# |
手順 | 説明 |
---|---|---|
1 |
ソース WebLogic Server が格納されたドメインの Administration Console を起動する。 |
ブラウザで Administration Console を起動するには、次の URL を入力する。
http://host:port/console
各要素の説明は次のとおりです。
『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Administration Console の起動」を参照。 |
2 |
永続ファイル ストアを作成する (省略可能)。 |
必要に応じて、ソース WebLogic Server が Web サービスの信頼性のあるメッセージングの内部情報を格納するために使用する永続ストア (ファイルまたは JDBC) を作成する。新規作成しない場合は、既存のものを使用するか、常に存在するデフォルトのストアを使用できる。 『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「ファイル ストアの作成」を参照。 |
3 |
ストア アンド フォワード (SAF) エージェントを作成する。 |
新規作成しない場合は、既存のものを使用できる。 SAF エージェントを作成する場合は、[エージェントの種類] フィールドを [ 『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「ストア アンド フォワード エージェントの作成」を参照。 |
6 |
必要に応じて、現在のドメイン環境をチューニングする (省略可能)。 |
『Oracle Fusion Middleware Oracle WebLogic Server パフォーマンス チューニング ガイド』の「Web サービスのパフォーマンスを向上させるために負荷が高いシステムのチューニング」を参照。 |
7 |
サーバを再起動します。 |
コンフィグレーションへの変更を有効にするには、『Oracle Fusion Middleware Oracle WebLogic Server サーバの起動と停止の管理』の「サーバの起動と停止」の説明に従ってサーバを再開する必要がある。 |
WS-Policy ファイルは、WS-Policy 仕様に準拠するポリシー アサーションを含む XML ファイルです。この場合には、WS-Policy ファイルに Web サービスの信頼性のあるメッセージング ポリシーのアサーションが含まれています。
WebLogic Server には、標準的な信頼性のあるメッセージング アサーションを含む WS-Policy ファイルがあらかじめパッケージ化されています。独自の WS-Policy ファイルを作成しない場合は、これらのファイルを使用できます。次の表に、あらかじめパッケージ化されている WS-Policy ファイルを示します。
注意 : このリリースでは、DefaultReliability.xml ファイルと LongRunningReliability.xml ファイルは非推奨となっています。DefaultReliability1.1.xml 、Reliability1.1_SequenceTransportSecurity 、またはReliability1.0_1.1.xml ファイルを使用することをお勧めし、http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdf である WS-ReliableMessaging 仕様の 1.1 バージョンに準拠する必要があります。 |
表 3-5 あらかじめパッケージ化されている WS-Policy ファイル
あらかじめパッケージ化されている WS-Policy ファイル | 説明 |
---|---|
DefaultReliability1.1.xml |
サービス品質に関連するポリシー アサーションを指定する。Web サービスの信頼性のあるメッセージングのアサーションは、 |
Reliability1.1_SequenceTransportSecurity |
転送レベルのセキュリティとサービス品質に関連するポリシー アサーションを指定する。Web サービスの信頼性のあるメッセージングのアサーションは、 |
Reliability1.0_1.1.xml |
1.1 と 1.0 WS の信頼性のあるメッセージングのポリシー アサーションの結合このサンプルは、適切なポリシーの選択に基づいて実行時に適用されるポリシー アサーションを決定する。「Reliability1.0_1.1.xml WS-Policy.xml ファイル」を参照。 |
DefaultRelibility.xml |
非推奨。Web サービスの信頼性のあるメッセージングは、 信頼性のあるメッセージングのポリシーのアサーションに一般的な値 (非アクティブ タイムアウト 10 分、確認応答の間隔 200 ミリ秒、基本的な再送信間隔 3 秒など) を指定する。「DefaultReliability.xml WS-Policy ファイル (非推奨)」を参照。 |
LongRunningReliability.xml |
非推奨。Web サービスの信頼性のあるメッセージング アサーションは、長時間の処理を実行する WS の信頼性のあるメッセージングのポリシー アサーション バージョン 1.0 に基づく。このリリースでは、信頼性のあるメッセージング ポリシー アサーションの多くが、JWS のアノテーションまたはコンフィグレーションを通じて管理される。 1 つ前に示した、信頼性のあるメッセージングのデフォルト WS-Policy ファイルとほぼ同じだが、アクティビティのタイムアウト間隔に、より大きな値 (24 時間) を指定する点が異なる。「LongRunningReliability.xml WS-Policy ファイル (非推奨)」を参照。 |
WebLogic Server に含まれる、あらかじめパッケージ化されている信頼性のあるメッセージング WS-Policy ファイルの 1 つを使用できます。これらのファイルは、ほとんどの場合に適合しています。あらかじめパッケージ化されているファイルは変更できません。値がニーズを満たさない場合は、カスタムの WS-Policy ファイルを作成する必要があります。以下の節で、カスタム WS-Policy ファイルの作成方法を説明します。
WS-ReliableMessaging ポリシー アサーション バージョン 1.1 を使用したカスタム WS-Policy ファイルの作成
WS-ReliableMessaging ポリシー アサーション バージョン 1.0 を使用したカスタム WS-Policy ファイルの作成 (非推奨)
この節では、http://docs.oasis-open.org/ws-rx/wsrmp/200702/wsrmp-1.1-spec-os-01.pdf
である WS サービスの信頼性のあるメッセージングのポリシー アサーションに基づいている Web サービスの信頼性のあるメッセージング アサーションを含むカスタム WS-Policy ファイルを作成する方法について説明します。現在のリリースでは、信頼性のあるメッセージング ポリシー アサーションの多くが、JWS のアノテーションまたはコンフィグレーションを通じて管理されます。
WS-Policy ファイルのルート要素は <Policy>
であり、次のネームスペース宣言が含まれている必要があります。
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy">
Web サービスの信頼性のあるメッセージング ポリシーのアサーションはすべて、<wsrmp:RMAssertion>
要素の内部でラップします。この要素には、Web サービスの信頼性のあるメッセージング ポリシー アサーションを使用するため、次のネームスペース宣言が含まれている必要があります。
<wsrmp:RMAssertion xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702">
次の表に、WS-Policy ファイルで指定可能な Web サービスの信頼性のあるメッセージング アサーションを示します。アサーションの指定順序は重要です。以下のアサーションを指定できますが、WS-Policy ファイルでは以下の一覧の順序どおりに指定する必要があります。
表 3-6 Web サービスの信頼性のあるメッセージング アサーション (バージョン 1.1)
アサーション | 説明 |
---|---|
<wsrmp:SequenceSTR> |
信頼性のあるシーケンスでメッセージを保護するため、ランタイムでは |
<wsrmp:SequenceTransportSecurity> |
信頼性のあるシーケンスでメッセージを保護するため、ランタイムでは |
<wsrm:DeliveryAssurance> |
Web サービスの配信保証レベル (配信品質)。有効な値は、 |
次の例では、簡単な Web サービスの信頼性のあるメッセージングの WS-Policy ファイルを示します。
<?xml version="1.0"?> <wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> <wsrmp:RMAssertion xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702"> <wsrmp:SequenceTransportSecurity/> <wsrmp:DeliveryAssurance> <wsp:Policy> <wsrmp:ExactlyOnce/> </wsp:Policy> </wsrmp:DeliveryAssurance> </wsrmp:RMAssertion> </wsp:Policy>
WS-Policy ファイルにある信頼性のあるメッセージング ポリシー アサーションの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「Web サービスの信頼性のあるメッセージングのポリシー アサーションに関するリファレンス」を参照してください。
この節では、http://schemas.xmlsoap.org/ws/2005/02/rm/WS-RMPolicy.pdf
である WS の信頼性のあるメッセージングのポリシー アサーション バージョン 1.0 に基づいている Web サービスの信頼性のあるメッセージング アサーションを含むカスタム WS-Policy ファイルを作成する方法について説明します。
注意 : 現在のリリースでは、信頼性のあるメッセージング ポリシー アサーションの多くが、JWS のアノテーションまたはコンフィグレーションを通じて管理されます。 |
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:
ネームスペースを使用するアサーションは、http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdf
である WS-ReliableMessaging 仕様で定義される標準的なアサーションです。beapolicy:
ネームスペースを使用するアサーションは、WebLogic 固有のものです。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「Web サービスの信頼性のあるメッセージングのポリシー アサーションに関するリファレンス」を参照してください。
次の表に、WS-Policy ファイルで指定可能な Web サービスの信頼性のあるメッセージング アサーションを示します。Web サービスの信頼性のあるメッセージングのアサーションは、すべて任意指定なので、デフォルト値が不適切なものだけを設定します。アサーションの指定順序は重要です。以下のアサーションを指定できますが、WS-Policy ファイルでは以下の一覧の順序どおりに指定する必要があります。
表 3-7 Web サービスの信頼性のあるメッセージング アサーション (バージョン 1.0)
アサーション | 説明 |
---|---|
<wsrm:InactivityTimeout> |
非アクティブ間隔を定義する、 |
<wsrm:BaseRetransmissionInterval> |
ソース エンドポイントがメッセージを送信してから、そのメッセージの確認応答を受け取っていない場合に再送信を行うまでの間隔 (ミリ秒単位)。デフォルト値は、ソース エンドポイントの WebLogic Server インスタンス上の SAF エージェントによって設定される。 |
<wsrm:ExponentialBackoff> |
再送信の間隔が、指数関数的なバックオフ アルゴリズムを使用して調整されることを指定する。この要素に属性はない。 |
<wsrm:AcknowledgmentInterval> |
送り先エンドポイントがスタンドアロンの確認応答を送信しなければならない最大間隔 (ミリ秒単位)。デフォルト値は、送り先エンドポイントの WebLogic Server インスタンス上の SAF エージェントによって設定される。 |
<beapolicy:Expires> |
信頼性のある Web サービスの有効期限が切れ、これ以上のシーケンス メッセージを受け付けなくなるまでの時間の長さ。デフォルト値では、有効期限が切れることはない。この要素には、 |
<beapolicy:QOS> |
表 3-9 で説明されている、配信保証レベル。この要素には |
次の例では、簡単な 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>
WS-Policy ファイルにある信頼性のあるメッセージング ポリシー アサーションの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「Web サービスの信頼性のあるメッセージングのポリシー アサーションに関するリファレンス」を参照してください。
カスタム ポリシー ファイルを作成することによって、単一の Web サービスに複数のポリシー選択肢 (適切なポリシー選択肢) をコンフィグレーションできます。実行時には、適用されるポリシーがそれらの中から自動的に選択されます。その際は、サポートされていないポリシーやアサーションが衝突しているポリシーが除外され、コンフィグレーションされている設定に基づいて、受信メッセージの検証と応答メッセージの構築に適したポリシーが選択されます。
次の例では、1.1 と 1.0 WS の信頼性のあるメッセージングの両方をサポートするセキュリティ ポリシーの例を示します。各ポリシー選択肢は、<wsp:All>
要素で囲まれています。
注意 : 1.0 の Web サービスの信頼性のあるメッセージング アサーションには、プレフィックスとしてwsrmp10 が付加されます。 |
<wsp:Policy xmlns:wsp="http://schemas.xmlsoap.org/ws/2004/09/policy"> <wsp:ExactlyOne> <wsp:All> <wsrmp10:RMAssertion xmlns:wsrmp10="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"> <wsrmp10:InactivityTimeout Milliseconds="1200000"/> <wsrmp10:BaseRetransmissionInterval Milliseconds="60000"/> <wsrmp10:ExponentialBackoff/> <wsrmp10:AcknowledgementInterval Milliseconds="800"/> </wsrmp10:RMAssertion> </wsp:All> <wsp:All> <wsrmp:RMAssertion xmlns:wsrmp="http://docs.oasis-open.org/ws-rx/wsrmp/200702"> <wsrmp:SequenceSTR/> <wsrmp:DeliveryAssurance> <wsp:Policy> <wsrmp:AtMostOnce/> </wsp:Policy> </wsrmp:DeliveryAssurance> </wsrmp:RMAssertion> </wsp:All> </wsp:ExactlyOne> </wsp:Policy>
複数のポリシー選択肢の詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービスのセキュリティ』の「メッセージレベルのセキュリティのコンフィグレーション」にある「Smart Policy の選択」を参照してください。
この節では、信頼性のある Web サービスを実装する JWS ファイルの作成方法を説明します。
信頼性のある Web サービスを実装する JWS ファイルでは、次の JWS アノテーションが使用されます。
表 3-8 信頼性のあるメッセージングの JWS アノテーション
アノテーション | 説明 |
---|---|
@weblogic.jws.Policy |
必須。信頼性のあるメッセージングのアサーションが含まれる WS-Policy ファイルを Web サービスに追加するよう指定する。「@Policy アノテーションの使用」を参照。 |
@javax.jws.Oneway |
信頼性のある Web サービス オペレーションを同期的に呼び出す (つまり、非同期の要求と応答の機能は使用しない) 場合にのみ必須。「@Oneway アノテーションの使用」を参照。 |
@weblogic.jws.BufferQueue |
任意。WebLogic Server が信頼性のあるメッセージを内部的に格納するために使用する JMS キューの JNDI 名を指定する。「@BufferQueue アノテーションの使用」を参照。 |
@weblogic.jws.ReliabilityBuffer |
任意。WebLogic Server による JMS キューから Web サービス実装へのメッセージ配信試行回数、およびサーバが待機すべき再試行間隔を指定する。「@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 { private static String onewaySavedInput = null; /** * helloWorldReturn に渡したメッセージの末尾と連結するために、 * 指定された文字列を保存する一方向の helloWorld メソッドです。 */ @WebMethod() @Oneway() @ReliabilityBuffer(retryCount=10, retryDelay="10 seconds") public void helloWorld(String input) { System.out.println(" Hello World " + input); onewaySavedInput = input; } /** * この echo メソッドは、提供されたメッセージの末尾に * helloWorld から保存されたメッセージを連結し、返します。 */ @WebMethod() @ReliabilityBuffer(retryCount=10, retryDelay="10 seconds") public String echo(String input2) { System.out.println(" Hello World " + input2 + onewaySavedInput); return input + onewaySavedInput; } }
このサンプルでは、カスタム ReliableHelloWorldPolicy.xml
ポリシー ファイルがクラス レベルで Web サービスに追加されています。つまり、ポリシー ファイルは Web サービスのすべてのパブリック オペレーションに適用されます。ポリシー ファイルは、リクエスト Web サービス メッセージ (信頼性のあるメッセージング機能によって要求される) のみに適用され、WSDL ファイルに追加されます。あらかじめパッケージ化されている利用可能なポリシーおよびカスタム ポリシーの作成の詳細につぃては、「Web サービスの信頼性のあるメッセージングの WS-Policy ファイルの作成」を参照してください。
WebLogic Server が、Web サービスの信頼性のあるメッセージングを有効化するために内部で使用する JMS キューの JNDI 名は、@BufferQueue
アノテーションで指定されているように、webservices.reliable.queue
です。
helloWorld()
メソッドは、@WebMethod
と @Oneway
、どちらの JWS アノテーションでもマークされています。これは、このメソッドが helloWorld
というパブリック オペレーションであるということです。@Policy
アノテーションがあるために、オペレーションを確実に呼び出すことができます。@ReliabilityBuffer
アノテーションに記述されているとおり、Web サービスのランタイムでは、最大で 10 回、10 秒間隔で、信頼性のあるメッセージをサービスに配信しようとします。たとえば、トランザクションがロールバックされる場合や、コミットしない場合などには、メッセージの再配信が必要となることがあります。
echo()
メソッドは、@WebMethod
と JWS アノテーションでもマークされています。これは、このメソッドが echo
というパブリック オペレーションであるということです。@Policy
アノテーションがあるために、オペレーションを確実に呼び出すことができます。helloWorld()
メソッドと同じような信頼性バッファ コンフィグレーションを使用します。
信頼性のあるメッセージングのアサーションが含まれる WS-Policy ファイルを Web サービスに追加するよう指定するには、JWS ファイルで @Policy
アノテーションを使用します。WebLogic Server では、あらかじめパッケージ化されている WS-Policy ファイルのセットが提供されます。「信頼性のあるメッセージング用にパッケージ化されている WS-Policy ファイル」を参照してください。
Web サービスの信頼性のあるメッセージングで @Policy
アノテーションを使用する場合は、次のガイドラインに従います。
uri
属性を使用して、ポリシー ファイルのビルド時の場所を以下のように指定します。
独自の WS-Policy ファイルを作成した場合は、JWS ファイルを基準として相対的に場所を指定する。次に例を示します。
@Policy(uri="ReliableHelloWorldPolicy.xml", direction=Policy.Direction.both, attachToWsdl=true)
この例では、ReliableHelloWorldPolicy.xml
ファイルが JWS ファイルと同じディレクトリに置かれています。
あらかじめパッケージ化されている WS-Policy ファイルの 1 つか、共有 Java EE ライブラリにパッケージ化されている WS-Policy ファイルを指定するには、そのポリシー ファイルの名前とパスと共に policy:
プレフィックスを使用する。この構文ではビルド時の jwsc
Ant タスクに、ファイル システムの実際のファイルを探させず、Web サービスが、サービスのデプロイ時に WebLogic Server から WS-Policy ファイルを取得することを通知しています。
注意 : 共有 Java EE ライブラリは、さまざまなエンタープライズ アプリケーション内にパッケージ化されている複数の Web サービスと WS-Policy ファイルを共有する場合に有用です。WS-Policy ファイルが共有 Java EE ライブラリのMETA-INF/policies または WEB-INF/policies ディレクトリに置かれている限り、ポリシー ファイルは Web サービスの同じアーカイブにパッケージ化されている場合と同様に指定できます。ライブラリの作成、および Web サービスがポリシー ファイルを見つけることができるようにするための環境設定については、『Oracle Fusion Middleware Oracle WebLogic Server アプリケーションの開発』の「共有 J2EE ライブラリおよびオプション パッケージの作成」を参照してください。 |
ポリシー ファイルを Web 上で公開するよう指定するには、次の例に示すとおり、URL と共に http:
プレフィックスを使用する。
@Policy(uri="http://someSite.com/policies/mypolicy.xml" direction=Policy.Direction.both, attachToWsdl=true)
デフォルトでは、WS-Policy ファイルは要求 (着信) と応答 (発信) の両方の SOAP メッセージに適用されます。このデフォルトの動作は、direction
属性を Policy.Direction.inbound
または Policy.Direction.outbound
に設定すると変更できます。
uri
で指定されるポリシー ファイル内で wsp:optional
属性を使用し、Web サービスでオペレーションが確実に呼び出され、その応答が確実に配信されるよう要求するかどうかを指定できます。
任意のオペレーションでの発信に対して optional
属性を false
に設定する場合 :
クライアントは、信頼性のある応答を送信する時使用できるように offer シーケンス を提供する必要がある。(http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdf
にある WS-ReliableMessaging 仕様で説明されている <wsrm: Offer...>
)
応答が必要なすべてのオペレーションに対して応答が確実に送信される。
すべてのオペレーションでの発信に対して optional
属性を true
に設定する場合 :
クライアントは offer シーケンスを提供する必要がない。
クライアントが offer シーケンスを提供する場合、応答は確実に送信され、提供しない場合、応答の送信には信頼性がない。
@Policy
アノテーションの attachToWsdl
属性を設定して、ポリシー ファイルを Web サービスのパブリック規約が記述された WSDL ファイルに付加するかどうかを指定できます。通常は、クライアント アプリケーションで Web サービスの信頼性のあるメッセージング機能が認識されるよう、パブリックなものとしてポリシーを公開します。そのため、この属性のデフォルト値は true
です。
@Policy
アノテーションの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「weblogic.jws.Policy」を参照してください。
信頼性のある 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 で明示的に作成する必要はあります。
@BufferQueue
アノテーションの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「weblogic.jws.BufferQueue」を参照してください。
@ReliabilityBuffer
アノテーションは、WebLogic Server による JMS キューから Web サービス実装へのメッセージ配信試行回数、およびサーバが待機すべき再試行間隔の指定に使用します。
再試行回数の指定には retryCount
属性を、待機時間の指定には retryDelay
属性を使用します。retryDelay
属性の形式としては、数字の後に以下の文字列のうち 1 つを続けます。
seconds
minutes
hours
days
years
たとえば、再試行回数を 20、再試行の遅延を 2 日と指定するには、次の構文を使用します。
@ReliabilityBuffer(retryCount=20, retryDelay="2 days")
再試行の回数と遅延のデフォルト値はそれぞれ、3 と 5 です。
@ReliabilityBuffer
アノテーションの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「weblogic.jws.ReliabilityBuffer」を参照してください。
必要に応じて、アプリケーションのデプロイメント プランを更新し、weblogic-webservices.xml
記述子に格納される、信頼性のある Web サービスの信頼性のあるメッセージ コンフィグレーション オプションを編集することができます。新しい値は、デプロイメント プランにより、現在のアプリケーションの記述子の特定の場所に関連付けられます。デプロイメント時に、デプロイメント プランは変数割り当ての値を、その変数のリンク先アプリケーション記述子内の場所に適用することによって、そのアプリケーション内の記述子に結合されます。
次の表に、信頼性のある Web サービスに対してコンフィグレーション可能な信頼性のあるメッセージング オプションをまとめます。詳細につぃては、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「Web サービスの信頼性のあるメッセージング」を参照してください。
表 3-9 信頼性のあるメッセージングのコンフィグレーション オプション
コンフィグレーション オプション | 説明 |
---|---|
[信頼性のあるコンフィグレーションの指定] |
WS-Reliable メッセージングが、Web サービス記述子またはデプロイメント プランでこのポートにコンフィグレーションされるかどうかを指定するフラグ。 注意 : このフラグは、直接 WSDL に指定される WS-RM ポリシーなどの他の形式では、信頼性のあるメッセージングのコンフィグレーションを反映しない。 |
[非アクティブ タイムアウト] |
非アクティブの間隔。非アクティブ タイムアウト間隔で、エンドポイント (RM 送信元と RM 送り先) がアプリケーションのメッセージまたは制御メッセージを受け取らなければ、エンドポイントは RM シーケンスが非アクティブなため終了したものと見なす場合がある。 指定する値は XML スキーマの期間を表す字句形式 ( |
[基本の再送信間隔] |
RM 送り先にメッセージの再送信を行うまでの時間間隔。 ソース エンドポイントは指定時間内にメッセージの確認応答を受け取らなかった場合、そのメッセージを再送信する。ソース エンドポイントは、メッセージのシーケンスの有効期間内の任意の時点で、この再送信間隔を変更することがある。 この要素を RetransmissionExponentialBackoff 要素と組み合わせて使用すると、再送信間隔を調整するアルゴリズムを指定できる。 指定する値は XML スキーマの期間を表す字句形式 ( |
[再送信間隔の指数関数的バックオフ] |
メッセージの再送信の間隔を、指数関数的なバックオフ アルゴリズムを使用して調整するかどうかを示すフラグ。 この要素は [基本の再送信間隔] 要素と組み合わせて使用する。送り先エンドポイントが、[基本の再送信間隔] で指定した時間内でメッセージのシーケンスを確認応答しなかった場合、メッセージが引き続き確認されなければ、連続再送信のタイミングに対して、ソース エンドポイントは指数関数的なバックオフ アルゴリズムを使用する。 指数関数的なバックオフ アルゴリズムは、連続再送信の間隔が、基本の再送信間隔を基に指数的に増えるように指定する。たとえば、基本の再送信間隔が 2 秒で、指数関数的なバックオフ要素が設定されている場合、連続再送信の間隔は、メッセージが確認されなければ、2、4、8、16、32 秒というように増えていく。 デフォルト値は false であり、連続再送信の間隔は指数的に増えず、同じ値が維持される。 |
[確認応答の間隔] |
送り先エンドポイントがスタンドアロンの確認応答を送信しなければならない最大間隔。 送り先エンドポイントは、ソース エンドポイントからメッセージを受信した直後に、返されたメッセージに対する確認応答を送信できる。また、スタンドアロンの確認応答で個別に確認応答を送信することもできる。返されたメッセージに対して確認応答を送信できない場合、送り先エンドポイントは、スタンドアロンの確認応答を送信するまで、確認応答の間隔に設定した時間範囲内で待機することができる。確認されたメッセージがない場合、送り先エンドポイントが確認応答を送信しないよう選択することもできる。 指定する値は XML スキーマの期間を表す字句形式 ( |
[シーケンスの有効期限] |
アクティビティにかかわらず、シーケンスが期限切れになるまでの時間。 指定する値は XML スキーマの期間を表す字句形式 ( |
[バッファの再試行回数] |
信頼性のある要求を再試行する回数。この値のデフォルトは 3。 |
[バッファの再試行遅延] |
信頼性のある要求を再試行するまでの待機時間。 再試行は JMS キュー上のクライアントの要求メッセージと Web サービス実装へのメッセージ配信の間で行われる。 指定する値は XML スキーマの期間を表す字句形式 ( |
信頼性のあるメッセージング コンフィグレーション オプションは、Administration Console や WLST を使用して設定できます。以降の節を参照してください。
Administration Console を使用してアプリケーションのデプロイメント プランを更新し、信頼性のあるメッセージングをコンフィグレーションするには、[コンフィグレーション|ポート コンポーネント] タブの下にある [デプロイメント] テーブルの信頼性のある Web サービスの信頼性のあるメッセージング コンフィグレーション オプションにアクセスします。Administration Console の呼び出しおよび Web サービス デプロイメントへのアクセスの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Administration Console の呼び出し」を参照してください。
信頼性のあるメッセージングをコンフィグレーションできるためにアプリケーションのデプロイメント計画を更新する WLST の使用方法の例と説明については、『Oracle Fusion Middleware Oracle WebLogic Scripting Tool ガイド』の「デプロイメント計画の更新」を参照してください。
以下の表に、WS-RM コンフィグレーション オプションの XPath 値を参考としてまとめます。
表 3-10 WS_RM コンフィグレーション変数名と XPath 値
コンフィグレーション オプション | 変数名の例 | XPath 値 |
---|---|---|
[非アクティブ タイムアウト] |
ReliabilityConfig_ InactivityTimeout |
/weblogic-webservices/webservice-description/ [webservice-description-name=" service_name"]/port-component/ [port-component-name="port_name"] /reliability-config/inactivity-timeout |
[基本の再送信間隔] |
ReliabilityConfig_ BaseRetransmission Interval |
/weblogic-webservices/webservice-description/ [webservice-description-name= "service_name"]/port-component/ [port-component-name="port-name"] /reliability-config/base-retransmission-interval |
[再送信間隔の指数関数的バックオフ] |
ReliabilityConfig_ Retransmission ExponentialBackoff |
/weblogic-webservices/webservice-description/ [webservice-description-name= "service_name"]/port-component/ [port-component-name="port-name"]/reliability- config/retransmission-exponential-backoff |
[確認応答の間隔] |
ReliabilityConfig_ AcknowledgementInterval |
/weblogic-webservices/webservice-description/ [webservice-description-name= "service_name"]/port-component/ [port-component-name="port-name"] /reliability-config/acknowledgement-interval |
[シーケンスの有効期限] |
ReliabilityConfig_ SequenceExpiration |
/weblogic-webservices/webservice-description/ [webservice-description-name= "service_name"]/port-component/ [port-component-name="port-name"] /reliability-config/sequence-expiration |
[バッファの再試行回数] |
ReliabilityConfig_ BufferRetryCount |
/weblogic-webservices/webservice-description/ [webservice-description-name= "service_name"]/port-component/ [port-component-name="port-name"] /reliability-config/buffer-retry-count |
[バッファの再試行遅延] |
ReliabilityConfig_ BufferRetryDelay |
/weblogic-webservices/webservice-description/ [webservice-description-name= "service_name"]/port-component/ [port-component-name="port-name"] /reliability-config/buffer-retry-delay |
WebLogic クライアント API を使用している場合は、信頼性のある Web サービスを Web サービス内から呼び出す必要があります。スタンドアロンのクライアント アプリケーションからは呼び出せません。
次の例では、「信頼性のある JWS ファイルに関するプログラミングのガイドライン」で説明した、サービスから信頼性のあるオペレーションを呼び出す Web サービス用の簡単な JWS ファイルを示します。
package examples.webservices.reliable; import java.rmi.RemoteException; import javax.jws.WebMethod; import javax.jws.WebService; import javax.xml.rpc.Stub; import weblogic.jws.WLHttpTransport; import weblogic.jws.ServiceClient; import weblogic.jws.ReliabilityErrorHandler; import weblogic.jws.AsyncFailure; import weblogic.jws.AsyncResponse; import examples.webservices.reliable.ReliableHelloWorldPortType; import weblogic.wsee.reliability.ReliabilityErrorContext; import weblogic.wsee.reliability.ReliableDeliveryException; import weblogic.wsee.reliability.WsrmUtils; @WebService(name="ReliableClientPortType", serviceName="ReliableClientService") @WLHttpTransport(contextPath="ReliableClient", serviceUri="ReliableClient", portName="ReliableClientServicePort") public class ReliableClientImpl { private static String responseMessage = null; @ServiceClient( serviceName="ReliableHelloWorldService", portName="ReliableHelloWorldServicePort") private ReliableHelloWorldPortType port; @WebMethod public void callHelloWorld(String input, String input2, String serviceUrl) throws RemoteException { ((Stub)port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, serviceUrl); port.helloWorld(input); System.out.println(" Invoked the ReliableHelloWorld.helloWorld operation reliably." ); WsrmUtils.setFinalMessage((Stub)port); port.echo(input2); System.out.println(" Invoked the ReliableHelloWorld.echo operation reliably." ); } @AsyncResponse(target = "port", operation = "echo") public void onEchoAsyncResponse(String msg) { System.out.println("ClientService: Got async response for request : " + msg); responseMessage = msg; } @AsyncFailure(target = "port", operation = "echo") public void onEchoAsyncFailure(Throwable t) { System.out.println("ClientService: Got async FAILURE for request : " + t); t.printStackTrace(); } @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;
エラー (信頼性のある Web サービスから受信したメッセージの確認応答をクライアント Web サービスで受信していない場合に発生するエラー) を処理するメソッド内で使用する WebLogic API をインポートする。
import weblogic.wsee.reliability.ReliabilityErrorContext; import weblogic.wsee.reliability.ReliableDeliveryException;
非同期の応答および障害のために使用する API をインポートする。
import weblogic.jws.AsyncFailure; import weblogic.jws.AsyncResponse;
呼び出したい信頼性のある Web サービスのポート タイプの JAX-RPC スタブをインポートする。このスタブは、jwsc
Ant タスクの <clientgen>
子要素によって後から作成されます。スタブ パッケージは、<clientgen>
の packageName
属性によって指定され、スタブの名前は呼び出された Web サービスの WSDL によって決まります。
import examples.webservices.reliable.ReliableHelloWorldPortType;
ライフサイクル管理に使用される API をインポートする (あとでプロパティを設定し、最終メッセージを指定するため)。
import javax.xml.rpc.Stub; import weblogic.wsee.reliability.WsrmUtils;
JWS ファイルの本文で、@ServiceClient
JWS アノテーションを使用して、呼び出したい信頼性のある Web サービスの名前とポートを指定する。このアノテーションは、プライベート変数のフィールド レベルで指定します。この変数のデータ型は、呼び出している Web サービスの JAX-RPC ポート タイプとなります。
@ServiceClient( serviceName="ReliableHelloWorldService", portName="ReliableHelloWorldServicePort") private ReliableHelloWorldPortType port;
port._setProperty
メソッドを使用して、対象サービス エンドポイント アドレスを Web サービス クライアント内で動的に指定する。詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Web サービスの実行時情報へのアクセス」を参照してください。
((Stub)port)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, serviceUrl);
@ServiceClient
アノテーションを付けたスタブを使用して、信頼性のあるオペレーション helloWorld
を呼び出す。
port.helloWorld(input);
オペレーションは一方向のものとしてマークされているので、値は返しません。
エラー (信頼性のある Web サービスが受信したメッセージの確認応答をクライアント Web サービスで受信していない場合に発生するエラー) を処理するメソッドを作成し、@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
を返します。
このエラー処理メソッドのプログラミングの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server Web サービス リファレンス』の「weblogic.jws.ReliabilityErrorHandler」を参照してください。
サービスは会話形式ではないため、ポート フィールドに保持されている状態は、このメソッドが戻されると失われる。信頼性のあるメッセージングの場合、この状態には、メッセージの送信に使用されている信頼性のあるシーケンスの ID が含まれます。setFinalMessage
メソッドは、このメッセージがこのシーケンスで送信される最終メッセージであることを指定します。これにより、信頼性のあるメッセージング サブシステムは、信頼性のあるシーケンスをタイムアウトさせる前にクリーンアップすることができます。
WsrmUtils.setFinalMessage((Stub)port);
@ServiceClient
アノテーションを付けたスタブを使用して、信頼性のあるオペレーション echo
を呼び出す。
port.echo(input2);
非同期応答またはエラーを処理するメソッドを作成する。@weblogic.jws.AsyncResponse
と @weblogic.jws.AsyncFailure
アノテーションを使用する。
@AsyncResponse(target = "port", operation = "echo") public void onEchoAsyncResponse(String msg) { System.out.println("ClientService: Got async response for request : " + msg); responseMessage = msg; } @AsyncFailure(target = "port", operation = "echo") public void onEchoAsyncFailure(Throwable t) { System.out.println("ClientService: Got async FAILURE for request : " + t); t.printStackTrace(); }
非同期の応答および障害のメソッドの生成方法については、「非同期の JWS ファイルの記述」を参照してください。
クライアント Web サービスをプログラミングする際、以下のガイドラインに従います。
関連付けられた WS-Policy ファイル内で、信頼性のあるメッセージング アノテーション (ただし @ReliabilityErrorHandler
を除く) を指定したり、信頼性のあるメッセージング アサーションを使用しない。
@ServiceClient
アノテーションの wsdlLocation
属性を指定しない。これは、指定した WSDL の実行時の取得に失敗する可能性があり、ローカルの WSDL ファイルが使用されるようにしておいたほうがよいためです。
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 ファイルでインポートして使用するためです。
次に、信頼性のある Web サービスを実装し、MTOM/XOP を使用して SOAP メッセージ内の xs:base64Binary
型の XML データの転送を最適化する簡単な JWS ファイルの例を示します。コーディング ガイドラインとして、サンプル コードの後の説明を参照してください。このガイドラインは Java コード内の太字部分に対応しています。このサンプルは、「信頼性のある Web サービスを呼び出す JWS ファイルに関するプログラミングのガイドライン」のサンプルを元に作成しています。
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; import weblogic.jws.Policies; /** * 簡単な信頼性のある Web サービス */ @WebService(name="ReliableHelloWorldPortType", serviceName="ReliableHelloWorldService") @WLHttpTransport(contextPath="ReliableHelloWorld", serviceUri="ReliableHelloWorld", portName="ReliableHelloWorldServicePort") @Policies({@Policy(uri="ReliableHelloWorldPolicy.xml", direction=Policy.Direction.both, attachToWsdl=true), @Policy(uri = "policy:Mtom.xml")}) @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); } @WebMethod public byte[] echoBinary(byte[] bytes) { return bytes; } }
MTOM を使用して信頼性のある Web サービスを呼び出す JWS ファイルをプログラミングする際は、以下のガイドラインに従います。ガイドラインのサンプル コードは、上述のサンプル内では太字で示されています。
あらかじめパッケージ化されている Mtom.xml
ファイルを現在の Web サービスに適用するには、@weblogic.jws.Policy アノテーションを使用する。複数の WS-Policy ファイル (信頼性のあるメッセージング ポリシー ファイルや MTOM ポリシー ファイルを含む) をグループ化するには、@weblogic.jws.Policies アノテーションを使用します。
@Policies({@Policy(uri="ReliableHelloWorldPolicy.xml", direction=Policy.Direction.both, attachToWsdl=true), @Policy(uri = "policy:Mtom.xml")})
結果として得られる SOAP メッセージで MTOM/XOP を使用してバイナリ データの送受信を行う場合は必ず、Web サービス オペレーションで Java byte[]
データ型を戻り値または入力パラメータとして使用する。
public byte[] echoBinary(byte[] bytes) { return bytes; }
注意 : このリリースの WebLogic Server では、MTOM/XOP 使用時にサポートされる Java データ型はbyte[] のみです。その他のバイナリ データ型 (image など) はサポートされていません。 |
WebLogic Server では、プロダクションの再デプロイメントがサポートされています。つまり、信頼性のある WebLogic Web サービスの更新後の新しいバージョンを、同じ Web サービスの古いバージョンと並行してデプロイできます。
WebLogic Server では、新しいクライアントのリクエストのみが新しいバージョンに転送されるように、クライアント接続が自動的に管理されます。再デプロイメント時にすでに Web サービスに接続していたクライアントは、作業が完了するまで古いバージョンのサービスを使用し続けます。作業が完了した時点で、自動的に古い Web サービスが廃止されます。クライアントが信頼性のある Web サービスに接続されている場合は、既存の信頼性のあるメッセージ シーケンスがクライアントによって明示的に終了されるか、またはタイムアウトになったときに、そのクライアントの作業が完了したと見なされます。
プロダクションの再デプロイメントと Web サービス クライアントの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービス入門』の「Web サービスを再デプロイする際にクライアントで考慮すべき事項」を参照してください。
信頼性のある Web サービスを呼び出すクライアント アプリケーションでは、直接オペレーションを呼び出すのではなく、プロキシ サーバを使用することがあります。プロキシを使用する理由としては、ファイアウォールの存在や、呼び出された Web サービスのクラスタへのデプロイメントなどがあります。
この場合、呼び出された Web サービスをホストする WebLogic Server インスタンスは、プロキシ サーバのアドレスとポートでコンフィグレーションされる必要があります。Web サービスがクラスタにデプロイされている場合は、そのクラスタ内のすべてのサーバをコンフィグレーションすることが必要です。
この手順では、ネットワーク接続を管理するためのコンフィグレーション可能な WebLogic Server の主要リソースであるネットワーク チャネルの作成方法について説明します。ネットワーク チャネルにより、クラスタのフロントエンド アドレスへのアクセスするための一貫性のある方法を提供できます。ネットワーク チャネルの詳細については、『Oracle Fusion Middleware Oracle WebLogic Server サーバ環境のコンフィグレーション』の「ネットワーク チャネルについて」を参照してください。
各サーバ インスタンスについて、以下の手順を実行します。
Web サービスの呼び出しに使用するプロトコル用のネットワーク チャネルを作成します。ネットワーク チャネルの名前は、weblogic-wsee-proxy-channel-
XXX
とする必要があります。XXX
は、プロトコルを表します。たとえば、HTTPS 用のネットワーク チャネルを作成する場合、weblogic-wsee-proxy-channel-https
という名前にします。
ネットワーク チャネルの作成に関する全般的な情報については、『Oracle Fusion Middleware Oracle WebLogic Server Administration Console ヘルプ』の「カスタム ネットワーク チャネルのコンフィグレーション」を参照してください。
[外部リスン アドレス] および [外部リスン ポート] フィールドを、それぞれプロキシ サーバのアドレスおよびポートで更新して、ネットワーク チャネルをコンフィグレーションします。
-Dweblogic.wsee.skip.async.response=true
Java システム プロパティを使用して WebLogic Server インスタンスを起動することによって、WebLogic Server プロキシ サーバ上の非同期応答サービスを無効にします。
デフォルトでは、すべての WebLogic Server インスタンスに、非同期の要求と応答機能を処理する内部非同期 Web サービスがデプロイされます。このシステム プロパティを指定しない場合、プロキシ サーバ上の非同期サービスが非同期メッセージを消費するため、非同期メッセージは要求したとおりにクラスタに到着しません。