Menu Close

第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 プロトコル は、ほとんどのサービスで使用される慣習的な SOAP/HTTP プロトコルに、より信頼性の高いトランスポート層を提供する方法として、World Wide Web Consortium (W3C) によって定義されています。Apache CXF の実装は、仕様に完全に準拠しており、準拠しているフレームワークと互換性があるはずです。

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

SOAP/JMS トランスポートを使用するには、以下を実行します。

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

JMS トランスポート型の指定

WSDL バインディングを指定する際に、SOAP バインディングが JMS トランスポートを使用するように設定します。soap:binding 要素の transport 属性を 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 エンドポイントは、JMS 1.0 の URI スキーム で定義された 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 トランスポートを設定するための複数の方法が用意されています。