Menu Close

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 エクステンション要素」 は、JMS トランスポートを設定するために使用できる WSDL エクステンション要素をすべて示しています。

表13.4 SOAP/JMS WSDL エクステンション要素

要素デフォルト説明

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 要素の親によって、設定が配置されるスコープが次のうちどれであるかが決まります。

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

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

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

<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「WSDL コントラクトと SOAP/JMS 設定」 の WSDL では以下を行います。

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

バインディングスコープで JNDI コネクションを設定します。

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

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

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