13.3. WSDL 拡張機能

概要

バインディングスコープ、サービススコープ、またはポートスコープのいずれかで WSDL 拡張要素をコントラクトに挿入することにより、JMS トランスポートの基本設定を指定できます。WSDL 拡張機能を使用すると、JNDI InitialContext ブートストラップのプロパティーを指定でき、JMS 宛先の検索に使用できます。JMS トランスポート層の動作に影響を与えるプロパティーの一部を設定することもできます。

SOAP/JMS namespace

SOAP/JMS WSDL エクステンションは、http://www.w3.org/2010/soapjms/ namespace で定義されます。WSDL コントラクトでそれらを使用するには、次の設定を wsdl:definitions 要素に追加します。

<wsdl:definitions ...
    xmlns:soapjms="http://www.w3.org/2010/soapjms/"
  ... >

WSDL 拡張要素

表13.4「SOAP/JMS WSDL extension 要素」 は、JMS トランスポートの設定に使用できる WSDL 拡張要素すべてを示しています。

表13.4 SOAP/JMS WSDL extension 要素

要素デフォルト説明

soapjms:jndiInitialContextFactory

 

JNDI プロバイダーの完全修飾 Java クラス名を指定します。java.naming.factory.initial Java システムプロパティーの設定と同等です。

soapjms:jndiURL

 

JNDI プロバイダーを初期化する URL を指定します。java.naming.provider.url Java システムプロパティーの設定と同等です。

soapjms:jndiContextParameter

 

JNDI InitialContext を作成する追加のプロパティーを指定します。name および value 属性を使用してプロパティーを指定します。

soapjms:jndiConnectionFactoryName

 

JMS 接続ファクトリーの JNDI 名を指定します。

soapjms:deliveryMode

PERSISTENT

JMS PERSISTENT または NON_PERSISTENT メッセージセマンティクスを使用するかどうかを指定します。PERSISTENT 配信モードの場合、JMS ブローカーはメッセージを承認する前に永続ストレージに保存します。一方、NON_PERSISTENT メッセージはメモリーにのみ保持されます。

soapjms:replyToName

 

[任意] キューメッセージの応答先を指定します。応答宛先が JMSReplyTo ヘッダーに表示されます。このプロパティーを設定することは、要求/応答セマンティクスを持つアプリケーションに推奨されます。これは、JMS プロバイダーが一時応答キューが指定されていない場合に割り当てるためです。

このプロパティーの値は、JMS URI で指定されたバリアントに従って解釈されます。

  • jndi バリアント - JNDI によって解決された宛先キューの名前
  • queue バリアント - JMS を使用して解決された宛先キューの名前

soapjms:priority

4

0(最低) から 9(最高) の範囲の JMS メッセージ優先度を指定します。

soapjms:timeToLive

0

ミリ秒単位の時間。その後、JMS プロバイダーはメッセージを破棄します。0 の値は無限の有効期間を表します。

設定スコープ

WSDL コントラクトに WSDL エレメントを配置すると、コントラクトで定義されたエンドポイントの設定変更のスコープに影響します。SOAP/JMS WSDL 要素は、wsdl:binding 要素、wsdl:service 要素、または wsdl:port 要素のいずれかの子として配置できます。SOAP/JMS 要素の親は、設定が配置されるスコープを次のスコープのどれに決定するかを決定します。

バインディングスコープ
wsdl:binding 要素内にエクステンション要素を配置することで、バインディングスコープ で JMS トランスポートを設定できます。このスコープの要素は、このバインディングを使用するすべてのエンドポイントのデフォルト設定を定義します。バインディングスコープの設定は、サービススコープまたはポートスコープで上書きできます。
サービス範囲
wsdl:service 要素内に extension 要素を配置することで、service scopeで JMS トランスポートを設定できます。このスコープの要素は、このサービスのすべてのエンドポイントのデフォルト設定を定義します。サービススコープの設定は、ポートスコープで上書きできます。
ポートのスコープ
wsdl:port 要素内に extension 要素を配置することで、ポートスコープで JMS トランスポートを設定できます。ポートスコープの要素は、このポートの設定を定義します。これらは、サービススコープまたはバインディングスコープで定義された同じ拡張要素のデフォルトをオーバーライドします。

例13.9「SOAP/JMS 設定との WSDL コントラクト」 は、SOAP/JMS サービスの WSDL コントラクトを示しています。バインディングスコープで JNDI レイヤーを設定し、サービススコープでメッセージ配信の詳細を設定し、ポートスコープで応答先を設定します。

例13.9 SOAP/JMS 設定との WSDL コントラクト

<wsdl:definitions ...
    xmlns:soapjms="http://www.w3.org/2010/soapjms/"
  ... >
  ...
  <wsdl:binding name="JMSGreeterPortBinding" type="tns:JMSGreeterPortType">
    ...
    <soapjms:jndiInitialContextFactory>
      org.apache.activemq.jndi.ActiveMQInitialContextFactory
    </soapjms:jndiInitialContextFactory>
    <soapjms:jndiURL>tcp://localhost:61616</soapjms:jndiURL>
    <soapjms:jndiConnectionFactoryName>
      ConnectionFactory
    </soapjms:jndiConnectionFactoryName>
    ...
  </wsdl:binding>
  ...
  <wsdl:service name="JMSGreeterService">
    ...
    <soapjms:deliveryMode>NON_PERSISTENT</soapjms:deliveryMode>
    <soapjms:timeToLive>60000</soapjms:timeToLive>
    ...
    <wsdl:port binding="tns:JMSGreeterPortBinding" name="GreeterPort">
      <soap:address location="jms:jndi:dynamicQueues/test.cxf.jmstransport.queue" />
      <soapjms:replyToName>
        dynamicQueues/greeterReply.queue
      </soapjms:replyToName>
      ...
    </wsdl:port>
    ...
  </wsdl:service>
  ...
</wsdl:definitions>

例13.9「SOAP/JMS 設定との WSDL コントラクト」 の WSDL は以下を行います。

SOAP/JMS エクステンションの namespace を宣言します。

バインディングスコープで JNDI 接続を設定します。

JMS 配信スタイルを非永続に設定し、各メッセージを 1 分間存続させます。

ターゲットの宛先を指定します。

応答メッセージが greeterReply.queue キューで配信されるように JMS トランスポートを設定します。