第7章 WS-Reliable Messaging の使用
JBoss WS-CXF/CXF において 2 つのポイント間で信頼できるメッセージングを確立するには、CXF RM とアドレスインターセプタをインターセプタチェーンに追加する必要があります。これは、以下に示されたいずれかの方法で実現できます。
RMAssertion および CXF WS-Policy フレームワーク
RM インターセプタは、以下のことが行われた場合にポリシーフレームワークによって各インターセプタチェーンに自動的に追加されます。
- RMAssertion 要素を持つポリシーは
wsdl:service
要素 (または、WS-Policy 添付のルールに従った、Policy または PolicyReference 要素の添付ポイントである他の WSDL 要素) に添付されます。 - CXF WS-Policy フレームワークが有効になります。
アサーション属性はソースまたは宛先の動作を制御します。たとえば、サーバーサイドで WS-Policy フレームワークを有効にする場合、設定ファイルは以下のようになります。
<jaxws:endpoint ...> <jaxws:features> <p:policies/> </jaxws:features> </jaxws:endpoint>
WSDL は以下のようになります。
<wsp:Policy wsu:Id="RM" 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"> <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="10000"/> </wsrmp:RMAssertion> </wsp:Policy> ... <wsdl:service name="ReliableGreeterService"> <wsdl:port binding="tns:GreeterSOAPBinding" name="GreeterPort"> <soap:address location="http://localhost:9020/SoapContext/GreeterPort"/> <wsp:PolicyReference URI="#RM" xmlns:wsp="http://www.w3.org/2006/07/ws-policy"/> </wsdl:port> </wsdl:service>
PolicyReference を
wsdl:port
要素に添付する代わりに、含まれるポリシーの子要素 (サーバーエンドポイントなど) として指定できます。
<wsp:Policy wsu:Id="="RM" xmlns:wsp="http://www.w3.org/2006/07/ws-policy" ...> </wsp:Policy> <jaxws:endpoint ...> <jaxws:features> <p:policies> <wsp:PolicyReference URI="#RM" xmlns:wsp="http://www.w3.org/2006/07/ws-policy"/> </p:policies> </jaxws:features> </jaxws:endpoint>
信頼できるメッセージング機能の使用
WS-Policy フレームワークを使用しない、シーケンス終了ポリシーや永続ストアなどの追加パラメータを設定しない場合は、ReliableMessaging 機能を使用できます。サポートされる子要素は以下のとおりです。
- RMAssertion
- タイプ RMAssertion の要素。
- deliveryAssurance
- 適用すべき配信保証を定義するタイプ DeliveryAssuranceType の要素 (
AtMostOnce
、AtLeastOnce
、InOrder
)。 - sourcePolicy
- RM ソースの詳細 (オファーを
CreateSequence
要求またはシーケンス終了ポリシーに常に含める必要があるかどうかなど) を設定できるタイプ SourcePolicyType の要素。 - destinationPolicy
- RM 宛先の詳細 (受信オファーを受け入れるかどうかなど) を設定できるタイプ DestinationPolicyType の要素。
- ストア
- 使用するストア (デフォルト値:
null
)。これは、タイプ jdbcStore の要素 (同じネームスペース内)、Bean、または RMStore インターフェースを実装する Bean の参照である必要があります。
jbdcStore 要素タイプは以下のように定義されます。
以下の例はバスレベルで適用されます。
<cxf:bus> <cxf:features> <wsa:addressing/> <wsrm-mgr:reliableMessaging> <wsrm-policy:RMAssertion> <wsrm-policy:BaseRetransmissionInterval Milliseconds="4000"/> <wsrm-policy:AcknowledgementInterval Milliseconds="2000"/> </wsrm-policy:RMAssertion> <wsrm-mgr:sourcePolicy> <wsrm-mgr:sequenceTerminationPolicy maxLength="5"/> </wsrm-mgr:sourcePolicy> <wsrm-mgr:destinationPolicy acceptOffers="false"> <wsrm:store> <ref bean="myStore"/> </wsrm:store> </wsrm-mgr:reliableMessaging> </cxf:features> </cxf:bus>
信頼できるメッセージングストアの設定
永続性を有効にするには、RM の永続ストアを実装するオブジェクトを指定する必要があります。独自のオブジェクトを開発したり、CXF に同梱される JDBC ベースのストア (class org.apache.cxf.ws.rm.persistence.jdbc.RMTxStore
) を使用したりできます。JDBC ベースのストアは、カスタム jdbcStore Bean を使用して設定できます。サポートされる属性は以下の表に示されています。
表7.1 属性
属性名 | 文字列 | デフォルト値 |
---|---|---|
driverClassName | 文字列 | org.apache.derby.jdbc.EmbeddedDriver |
userName | 文字列 | null |
passWord | 文字列 | null |
url | 文字列 | jdbc:derby:rmdb;create=true |
例を以下に示します。
<wsrm-mgr:jdbcStore id="myStore" driverClassName="org.apache.derby.jdbc.ClientDriver" url="jdbc:derby://localhost:1527/rmdb;create=true" password="password"/>
信頼できるメッセージングマネージャを手動で設定
RM マネージャのプロパティを設定するには、RMManager 要素を使用します。同じ子要素は上記の ReliableMessaging 機能としてサポートされます。たとえば、機能を使用せずに、以下のようにシーケンスが最大長を持つように決定できます。
<wsrm-mgr:rmManager xmlns:wsrm-mgr="http://cxf.apache.org/ws/rm/manager"> <wsrm-mgr:sourcePolicy> <wsrm-mgr:sequenceTerminationPolicy maxLength="5"/> </wsrm-mgr:sourcePolicy> </wsrm-mgr:rmManager>