第13章 SOAP Over JMS の使用

概要

Apache CXF は、W3C 標準の SOAP/JMS トランスポートを実装しています。この標準は、SOAP/HTTP サービスのより堅牢な代替手段を提供することを目的としています。このトランスポートを使用する Apache CXF アプリケーションは、SOAP/JMS 標準も実装するアプリケーションと相互運用できる必要があります。トランスポートは、エンドポイントの WSDL で直接設定されます。

: JMS 1.0.2 API のサポートは、CXF 3.0 で削除されました。Red Hat JBoss Fuse 6.2 以降 (CXF 3.0 を含む) を使用している場合、JMS プロバイダーは JMS 1.1 API をサポートする必要があります。

13.1. 基本設定

概要

SOAP over JMS プロトコル は、World Wide Web Consortium (W3C) によって、ほとんどのサービスで使用される通常の SOAP/HTTP プロトコルにさらに信頼性の高いトランスポート層を提供する方法として定義されています。Apache CXF の実装は仕様に完全に準拠しており、準拠しているすべてのフレームワークと互換性がある必要があります。

このトランスポートは、JNDI を使用して JMS 宛先を検索します。操作が呼び出されると、要求は SOAP メッセージとしてパッケージ化され、JMS メッセージの本文で指定された宛先に送信されます。

SOAP/JMS トランスポートを使用するには:

  1. トランスポートタイプが SOAP/JMS であることを指定します。
  2. JMS URI を使用してターゲット宛先を指定します。
  3. 必要に応じて、JNDI 接続を設定します。
  4. オプションで、JMS 設定を追加します。

JMS トランスポートタイプの指定

WSDL バインディングを指定するときに JMS トランスポートを使用するように SOAP バインディングを設定します。soap:binding 要素の トランスポート 属性を http://www.w3.org/2010/soapjms/ に設定します。例13.1「SOAP over JMS バインディング仕様」 は、SOAP/JMS を使用する WSDL バインディングを示しています。

例13.1 SOAP over JMS バインディング仕様

<wsdl:binding ... >
  <soap:binding style="document"
                transport="http://www.w3.org/2010/soapjms/" />
  ...
</wsdl:binding>

ターゲット宛先の指定

エンドポイントの WSDL ポートを指定するときに、JMS ターゲット宛先のアドレスを指定します。SOAP/JMS エンドポイントのアドレス仕様は、SOAP/HTTP エンドポイントと同じ soap:address 要素および属性を使用します。相違点はアドレス指定です。JMS エンドポイントは、URI Scheme for JMS 1.0 で定義されている JMS URI を使用します。例13.2「JMS URI 構文」 は、JMS URI の構文を示しています。

例13.2 JMS URI 構文

jms:variant:destination?options

表13.1「JMS URI バリアント」 JMS URI で利用可能なバリアントを説明します。

表13.1 JMS URI バリアント

バリアント説明

jndi

宛先名が JNDI キュー名であることを指定します。このバリアントを使用する場合は、JNDI プロバイダーにアクセスするための設定を提供する必要があります。

jndi-topic

宛先名が JNDI トピック名であることを指定します。このバリアントを使用する場合は、JNDI プロバイダーにアクセスするための設定を提供する必要があります。

queue

宛先が JMS を使用して解決されたキュー名であることを指定します。提供される文字列は Session.createQueue() に渡され、宛先の表現を作成します。

topic

宛先が JMS を使用して解決されたトピック名であることを指定します。提供される文字列は Session.createTopic() に渡され、宛先の表現を作成します。

JMS URI の オプション 部分は、トランスポートを設定するために使用され、「JMS URI」 で説明されています。

例13.3「SOAP/JMS エンドポイントアドレス」 は、JNDI を使用してターゲットの宛先が検索される SOAP/JMS エンドポイントの WSDL ポートエントリーを示しています。

例13.3 SOAP/JMS エンドポイントアドレス

<wsdl:port ... >
  ...
  <soap:address location="jms:jndi:dynamicQueues/test.cxf.jmstransport.queue" />
</wsdl:port>

JNDI および JMS トランスポートの設定

SOAP/JMS は、JNDI 接続と JMS トランスポートを設定するためのいくつかの方法を提供します。