21.5. WS-RM の設定
21.5.1. Apache CXF 固有の WS-RM 属性の設定
概要
Apache CXF 固有の属性を設定するには、rmManager
Spring Bean を使用します。以下を設定ファイルに追加します。
-
名前空間のリストへの
http://cxf.apache.org/ws/rm/manager
名前空間。 -
設定する特定の属性用の
rmManager
Spring Bean。
例21.4「Apache CXF 固有の WS-RM 属性の設定」 簡単な例を示します。
例21.4 Apache CXF 固有の WS-RM 属性の設定
<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://cxf.apache.org/ws/rm/manager http://cxf.apache.org/schemas/configuration/wsrm-manager.xsd"> ... <wsrm-mgr:rmManager> <!-- ...Your configuration goes here --> </wsrm-mgr:rmManager>
rmManager Spring bean の子
表21.2「rmManager Spring Bean の子」 は、http://cxf.apache.org/ws/rm/manager
namespace で定義される rmManager
Spring Bean の子要素を表示します。
要素 | 説明 |
---|---|
|
|
|
適用すべき配信保証を記述する |
|
RM ソースの詳細を設定できるようにするタイプ |
|
RM 宛先の詳細を設定できるようにするタイプ |
例
例は、「未確認メッセージの最大しきい値」 を参照してください。
21.5.2. 標準の WS-RM ポリシー属性の設定
概要
次のいずれかの方法で、標準の WS-RM ポリシー属性を設定できます。
WS-Policy RMAssertion の子
表21.3「WS-Policy RMAssertion 要素の子」 は、http://schemas.xmlsoap.org/ws/2005/02/rm/policy
名前空間で定義される要素を表示します。
名前 | 説明 |
---|---|
| エンドポイントが非アクティブのために RM シーケンスが終了したと見なす前に、メッセージを受信せずに経過する必要がある時間を指定します。 |
|
特定のメッセージについて RM ソースが確認応答を受信する必要がある間隔を設定します。 |
| 一般的に知られている指数バックオフアルゴリズム (Tanenbaum) を使用して再送信間隔が調整されることを示します。 詳細は、Computer Networks、Andrew S. Tanenbaum、Prentice Hall PTR、2003 を参照してください。 |
| WS-RM では、確認応答は返信メッセージで送信されるか、スタンドアロンで送信されます。確認応答を送信するための返信メッセージが利用できない場合、RM 宛先は、スタンドアロン確認応答を送信する前に、確認応答間隔まで待機できます。確認応答されていないメッセージがない場合、RM 宛先は確認応答を送信しないことを選択できます。 |
より詳細な参照情報
各要素のサブ要素と属性の説明を含む、より詳細な参照情報は、http://schemas.xmlsoap.org/ws/2005/02/rm/wsrm-policy.xsd を参照してください。
rmManager Spring bean の RMAssertion
標準の WS-RM ポリシー属性を設定するには、Apache CXF rmManager
Spring Bean 内に RMAssertion
を追加します。これは、すべての WS-RM 設定を同じ設定ファイルに保持する場合に最適なアプローチです。つまり、Apache CXF 固有の属性と標準の WS-RM ポリシー属性を同じファイルで設定する場合です。
たとえば、例21.5「rmManager Spring Bean で RMAssertion を使用して WS-RM 属性を設定する」 の設定では次を示します。
-
rmManager
Spring Bean 内でRMAssertion
を使用して設定された標準の WS-RM ポリシー属性であるBaseRetransmissionInterval
。 -
同じ設定ファイルで設定された Apache CXF 固有の RM 属性
intraMessageThreshold
。
例21.5 rmManager Spring Bean で RMAssertion を使用して WS-RM 属性を設定する
<beans xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy" xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager" ...> <wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager"> <wsrm-policy:RMAssertion> <wsrm-policy:BaseRetransmissionInterval Milliseconds="4000"/> </wsrm-policy:RMAssertion> <wsrm-mgr:destinationPolicy> <wsrm-mgr:acksPolicy intraMessageThreshold="0" /> </wsrm-mgr:destinationPolicy> </wsrm-mgr:rmManager> </beans>
機能内のポリシー
例21.6「機能内のポリシーとしての WS-RM 属性の設定」 に示すように、機能内で標準の WS-RM ポリシー属性を設定できます。
例21.6 機能内のポリシーとしての WS-RM 属性の設定
<xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:wsa="http://cxf.apache.org/ws/addressing" xmlns:wsp="http://www.w3.org/2006/07/ws-policy" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd" xmlns:jaxws="http://cxf.apache.org/jaxws" xsi:schemaLocation=" http://www.w3.org/2006/07/ws-policy http://www.w3.org/2006/07/ws-policy.xsd http://cxf.apache.org/ws/addressing http://cxf.apache.org/schema/ws/addressing.xsd http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd"> <jaxws:endpoint name="{http://cxf.apache.org/greeter_control}GreeterPort" createdFromAPI="true"> <jaxws:features> <wsp:Policy> <wsrm:RMAssertion xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"> <wsrm:AcknowledgementInterval Milliseconds="200" /> </wsrm:RMAssertion> <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata"> <wsp:Policy> <wsam:NonAnonymousResponses/> </wsp:Policy> </wsam:Addressing> </wsp:Policy> </jaxws:features> </jaxws:endpoint> </beans>
WSDL ファイル
WS-Policy フレームワークを使用して WS-RM を有効にする場合は、WSDL ファイルで標準の WS-RM ポリシー属性を設定できます。これは、サービスを相互運用して、他のポリシー対応 Web サービススタックにデプロイされたコンシューマーとシームレスに WS-RM を使用する場合に適したアプローチです。
例は、「WS-Policy フレームワーク。暗黙的にインターセプターを追加する」を参照してください。ここで、基本再送信間隔は WSDL ファイルで設定されます。
外部アタッチメント
標準の WS-RM ポリシー属性を外部の添付ファイルで設定できます。これは、WSDL ファイルを変更できない、または変更したくない場合に適したアプローチです。
例21.7「外部アタッチメントでの WS-RM の設定」 は、特定の EPR に対して WS-A と WS-RM の両方 (基本再送信間隔 30 秒) を有効にする外部接続を示しています。
例21.7 外部アタッチメントでの WS-RM の設定
<attachments xmlns:wsp="http://www.w3.org/2006/07/ws-policy" xmlns:wsa="http://www.w3.org/2005/08/addressing"> <wsp:PolicyAttachment> <wsp:AppliesTo> <wsa:EndpointReference> <wsa:Address>http://localhost:9020/SoapContext/GreeterPort</wsa:Address> </wsa:EndpointReference> </wsp:AppliesTo> <wsp:Policy> <wsam:Addressing xmlns:wsam="http://www.w3.org/2007/02/addressing/metadata"> <wsp:Policy/> </wsam:Addressing> <wsrmp:RMAssertion xmlns:wsrmp="http://schemas.xmlsoap.org/ws/2005/02/rm/policy"> <wsrmp:BaseRetransmissionInterval Milliseconds="30000"/> </wsrmp:RMAssertion> </wsp:Policy> </wsp:PolicyAttachment> </attachments>/
21.5.3. WS-RM 設定のユースケース
概要
このサブセクションでは、ユースケースの観点から WS-RM 属性を設定することに焦点を当てます。属性が http://schemas.xmlsoap.org/ws/2005/02/rm/policy/ namespace で定義された標準の WS-RM ポリシー属性である場合、rmManager
Spring Bean 内の RMAssertion
で設定する例のみが表示されます。機能内のポリシーなどの属性を設定する方法の詳細は、WSDL ファイルまたは外部添付ファイルで、「標準の WS-RM ポリシー属性の設定」 を参照してください。
次のユースケースを説明します。
基本再送間隔
BaseRetransmissionInterval
要素は、まだ確認されていないメッセージを RM ソースが再送信する間隔を指定します。これは、http://schemas.xmlsoap.org/ws/2005/02/rm/wsrm-policy.xsd スキーマファイルで定義されています。デフォルト値は 3000 ミリ秒です。
例21.8「WS-RM ベースの再送間隔の設定」 WS-RM ベースの再送間隔を設定する方法を示します。
例21.8 WS-RM ベースの再送間隔の設定
<beans xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy ...> <wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager"> <wsrm-policy:RMAssertion> <wsrm-policy:BaseRetransmissionInterval Milliseconds="4000"/> </wsrm-policy:RMAssertion> </wsrm-mgr:rmManager> </beans>
再送信の指数バックオフ
ExponentialBackoff
要素は、承認されていないメッセージの連続する再送信試行が指数関数間隔で実行されるかどうかを判断します。
ExponentialBackoff
要素が存在すると、この機能が有効になります。デフォルトで 2
の指数バックオフ比率が使用されます。ExponentialBackoff
はフラグです。要素が存在する場合、指数バックオフが有効になります。要素が存在しない場合、指数バックオフは無効になります。値は必要ありません。
例21.9「WS-RM 指数バックオフプロパティーの設定」 は、再送信のために WS-RM 指数バックオフを設定する方法を示しています。
例21.9 WS-RM 指数バックオフプロパティーの設定
<beans xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy ...> <wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager"> <wsrm-policy:RMAssertion> <wsrm-policy:ExponentialBackoff/> </wsrm-policy:RMAssertion> </wsrm-mgr:rmManager> </beans>
確認間隔
AcknowledgementInterval
要素は、WS-RM 宛先が非同期確認応答を送信する間隔を指定します。これらは、着信メッセージの受信時に送信する同期確認応答に追加されます。デフォルトの非同期確認間隔は 0
ミリ秒です。つまり、AcknowledgementInterval
が特定の値に設定されていない場合、確認応答は即座に送信されます (つまり、利用可能な最初の機会)。
非同期確認応答は、次の両方の条件が満たされた場合にのみ RM 宛先によって送信されます。
-
RM 宛先は匿名以外の
wsrm:acksTo
エンドポイントを使用しています。 - 応答メッセージに確認応答をピギーバックする機会は、確認応答間隔が満了する前には発生しません。
例21.10「WS-RM 確認応答間隔の設定」 WS-RM 確認応答間隔を設定する方法を示します。
例21.10 WS-RM 確認応答間隔の設定
<beans xmlns:wsrm-policy="http://schemas.xmlsoap.org/ws/2005/02/rm/policy ...> <wsrm-mgr:rmManager id="org.apache.cxf.ws.rm.RMManager"> <wsrm-policy:RMAssertion> <wsrm-policy:AcknowledgementInterval Milliseconds="2000"/> </wsrm-policy:RMAssertion> </wsrm-mgr:rmManager> </beans>
未確認メッセージの最大しきい値
maxUnacknowledged
属性は、シーケンスが終了する前に、シーケンスごとにアクセッジできる承認されていないメッセージの最大数を設定します。
例21.11「WS-RM の未確認メッセージの最大しきい値の設定」 は、WS-RM の未確認メッセージの最大しきい値を設定する方法を示しています。
例21.11 WS-RM の未確認メッセージの最大しきい値の設定
<beans xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager ...> <wsrm-mgr:reliableMessaging> <wsrm-mgr:sourcePolicy> <wsrm-mgr:sequenceTerminationPolicy maxUnacknowledged="20" /> </wsrm-mgr:sourcePolicy> </wsrm-mgr:reliableMessaging> </beans>
RM シーケンスの最大長
maxLength
属性は、WS-RM シーケンスの最大長を設定します。デフォルト値は 0
で、WS-RM シーケンスの長さがバインドされないことを意味します。
この属性が設定されている場合、RM エンドポイントは、制限に達したとき、および以前に送信されたメッセージのすべての確認応答を受信した後に、新しい RM シーケンスを作成します。新しいメッセージは、newsequence を使用して送信されます。
例21.12「WS-RM メッセージシーケンスの最大長の設定」 RM シーケンスの最大長を設定する方法を示します。
例21.12 WS-RM メッセージシーケンスの最大長の設定
<beans xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager ...> <wsrm-mgr:reliableMessaging> <wsrm-mgr:sourcePolicy> <wsrm-mgr:sequenceTerminationPolicy maxLength="100" /> </wsrm-mgr:sourcePolicy> </wsrm-mgr:reliableMessaging> </beans>
メッセージ配信保証ポリシー
次の配信保証ポリシーを使用するように RM 宛先を設定できます。
-
AtMostOnce
: RM 宛先はメッセージを 1 度のみアプリケーションの宛先に配信します。メッセージが複数回配信されると、エラーが発生します。シーケンス内の一部のメッセージが配信されない可能性があります。 -
AtLeastOnce
: RM 宛先は少なくとも 1 回アプリケーションの宛先にメッセージを配信します。送信されたすべてのメッセージが配信されるか、エラーが発生します。一部のメッセージは複数回配信される場合があります。 -
InOrder
: RM 宛先は、送信順にアプリケーションの宛先にメッセージを配信します。この配信保証は、AtMostOnce
またはAtLeastOnce
保証と組み合わせることができます。
例21.13「WS-RM メッセージ配信保証ポリシーの設定」 WS-RM メッセージ配信保証を設定する方法を示します。
例21.13 WS-RM メッセージ配信保証ポリシーの設定
<beans xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager ...> <wsrm-mgr:reliableMessaging> <wsrm-mgr:deliveryAssurance> <wsrm-mgr:AtLeastOnce /> </wsrm-mgr:deliveryAssurance> </wsrm-mgr:reliableMessaging> </beans>