プライマリ・コンテンツに移動
Oracle® Fusion Middleware Oracle WebLogic Server JAX-WS Webサービスの開発
12c (12.2.1)
E69970-01
  目次へ移動
目次

前
 
次
 

17 SOAP Over JMSトランスポートの使用

この章では、Java API for XML Web Services (JAX-WS)を使用するWebLogic Webサービスの接続プロトコルとして、SOAP over Java Messaging Service (JMS)トランスポートを使用する方法について説明します。


注意:

SOAP over JMSトランスポートは、Webサービス機能のうち、信頼性のあるメッセージングおよびHTTPトランスポート固有のセキュリティとは互換性がありません。

この章の内容は次のとおりです:

SOAP Over JMSトランスポートの概要

通常、Webサービスおよびクライアントは、接続プロトコルとしてSOAP over HTTP/Sを使用して通信します。ただし、クライアント・アプリケーションがトランスポートとしてJMSを使用するようにWebLogic Webサービスを構成することもできます。

SOAP over JMSトランスポートを使用すると、WebサービスとクライアントがHTTP接続ではなくJMS宛先を使用して通信するようになるため、次のような利点があります。

  • 信頼性

  • スケーラビリティ

  • サービス品質

Webサービスの信頼性のあるメッセージングの場合と同様に、メソッド呼出しがまだキューに入っているときにWebLogic Serverが停止しても、再起動すればすぐに処理が行われます。クライアントは、Webサービスを呼び出す際にレスポンスを待機しないため、クライアントの実行は続行可能です。ただし、SOAP over JMSトランスポートを使用する場合は、HTTP/Sより若干オーバーヘッドが大きくなり、プログラムが複雑になります。

指定する各トランスポートに対し、WebLogic ServerはWSDL内に追加のポートを生成します。このため、Webサービス呼出し時に使用できるトランスポート(JMS、HTTPまたはHTTPS)をクライアント・アプリケーションで選択できるようにするには、明示的に各トランスポートを構成する必要があります。トランスポートは、JWSアノテーションか、jwsc Antタスクの子要素を使用して構成します。

JMSトランスポートのみを構成する場合、HTTPを使用してWebサービスを呼び出すことはできませんが、HTTPを使用してそのWebサービスのWSDLを参照できます。これにより、clientgenはやはりWebサービスのJAX-WSスタブを生成できます。


注意:

JMSトランスポートの使用は、WebLogicの特徴です。.NETクライアントなど、WebLogic以外のクライアント・アプリケーションでは、JMSポートを使用してWebサービスを呼び出すことができない場合があります。

図17-1は、SOAP over JMSトランスポートを使用したWebサービスの呼出しのリクエストおよびレスポンス・メッセージのフローを示しています。

  • クライアント・スタブはWebサービスを呼び出し、JMSリクエスト・キュー経由でSOAPリクエスト・メッセージをWebサービスに送信して、レスポンスを待機します。

  • サーバー側で、MDBリスナーがリクエストを受け取り、サービス・エンドポイントを呼び出します。

  • 処理が行われると、サービス・エンドポイントはレスポンスをJMSレスポンス・キューに送信します。

  • クライアント側のJMSリスナーがレスポンスを受け取り、これをクライアントに渡します。

  • クライアントがjava.io.Closable.close()コマンドを発行すると、JMSレスポンス・エンドポイントおよびリスナーが削除されます。

図17-1 SOAP Over JMSトランスポートを使用したWebサービスの呼出し

図17-1の説明が続きます
「図17-1 SOAP Over JMSトランスポートを使用したWebサービスの呼出し」の説明

図17-2は、SOAP over JMSトランスポートを使用した非同期Webサービスの呼出しのリクエストおよびレスポンス・メッセージのフローを示しています。

  • クライアント・スタブは非同期にWebサービスを呼び出し、JMSリクエスト・キュー経由でSOAPリクエスト・メッセージをWebサービスに送信します。クライアント・スタブはjavax.xml.ws.Responseまたはjava.util.concurrent.Future<T>インスタンスを戻し、レスポンスを待機しません。

  • サーバー側で、MDBリスナーがリクエストを受け取り、サービス・エンドポイントを呼び出します。

  • 処理が行われると、サービス・エンドポイントはレスポンスをJMSレスポンス・キューに送信します。

  • JMSリスナーはレスポンス・エンドポイントを呼び出し、これにより、クライアントのResponseまたはFuture<T>インスタンスが移入されます。

  • クライアントがjava.io.Closable.close()コマンドを発行すると、JMSレスポンス・エンドポイントおよびリスナーが削除されます。

図17-2 SOAP Over JMSトランスポートを使用した非同期Webサービスの呼出し

図17-2の説明が続きます
「図17-2 SOAP Over JMSトランスポートを使用した非同期Webサービスの呼出し」の説明

JMS宛先にリクエスト・メッセージを送信する前に、クライアントは表17-1で定義しているJMSメッセージ・プロパティを設定します。

表17-1 リクエスト・メッセージで定義されるJMSメッセージ・プロパティ

JMSメッセージ・プロパティ 説明

SOAPJMS_bindingVersion

SOAP JMSバインディングのバージョン。このリリースでは、この値は1.0に設定する必要があります。

SOAPJMS_contentType

メッセージのMIMEコンテンツ・タイプ。

SOAPJMS_requestURI

JMSリクエストURI。値の構成方法の詳細は、「JMSリクエストURIの構成」を参照してください。

SOAPJMS_soapAction

リクエストの目的を定義するSOAPアクション。

SOAPJMS_targetService

Webサービスのポート・コンポーネント名。

messageType

リクエスト・メッセージで使用するメッセージ・タイプ。BYTESの値は、com.oracle.webservices.api.jms.JMSMessageType.BYTESオブジェクトが使用されることを示します。TEXTの値は、com.oracle.webservices.api.jms.JMSMessageType.TEXTオブジェクトが使用されることを示します。この値のデフォルトはBYTESです。

JMSMessageID

JMSメッセージを一意に識別し、レスポンス・メッセージとリクエストとの相互関連付けに使用されるID。レスポンス・メッセージのJMSCorrelationIDプロパティは、リクエスト・メッセージのJMSMessageIDと一致していることが必要です。

ECIDContext

実行コンテキスト識別子(ECID)、ラッパー・コードおよびエンコーディングの詳細。この内容は、HTTPヘッダーに指定するものと似ており、クライアントのみに必要となります。


JMS宛先にレスポンス・メッセージを送信する前に、サービスは表17-1で定義しているJMSメッセージ・プロパティを設定します。

表17-2 レスポンス・メッセージで定義されるJMSメッセージ・プロパティ

JMSメッセージ・プロパティ 説明

SOAPJMS_bindingVersion

SOAP JMSバインディングのバージョン。このリリースでは、この値は1.0に設定する必要があります。

SOAPJMS_contentType

メッセージのMIMEコンテンツ・タイプ。

JMSCorrelationID

リクエスト・メッセージとレスポンス・メッセージの相互関連付けに使用されるID。JMSCorrelationIDは、リクエスト・メッセージのJMSMessageIDと一致していることが必要です。

JMSMessageID

JMSメッセージを一意に識別し、レスポンス・メッセージとリクエストとの相互関連付けに使用されるID。


JMSトランスポート用のWebLogic Serverドメインの構成

表17-3は、WebLogic ServerドメインでJMSトランスポートによりデフォルトで使用されるリソースを示します。

表17-3 JMSトランスポートにより使用されるデフォルトのリソース

リソース名(デフォルト) リソース・タイプ 説明

WseeSoapjmsJmsServer

JMSサーバー

JMSサーバー管理コンテナ。

JMSサーバーを手動で構成するには、『Oracle WebLogic Server JMSリソースの管理』のJMS構成に関する項を参照してください。

WseeSoapjmsFileStore

ファイル・ストア

I/O操作を処理し、データを保存したり、物理ストレージ(ファイル、DBMSなど)から取得したりするためにWeb Serverが使用するファイル・ストアまたは物理ストア。

ファイル・ストアを手動で構成するには、WebLogic永続ストアの管理を参照してください。

WseeSoapjmsJmsModule

JMSモジュール

SOAP over JMSトランスポートに必要なJMSリソースを定義するJMSモジュール。

JMSモジュールを手動で構成するには、『Oracle WebLogic Server JMSリソースの管理』のJMS構成に関する項を参照してください。

WseeSoapjmsJmsServerSub

JMSサブデプロイメント

JMSリソースのターゲットをWseeSoapJmsServerに指定するJMSサブデプロイメント。

JMSサブデプロイメントを手動で構成するには、『Oracle WebLogic Server JMSリソースの管理』のJMS構成に関する項を参照してください。

com.oracle.webservices.api.jms.ConnectionFactory

JMS接続ファクトリ

SOAP over JMSトランスポートの接続の作成に使用するデフォルトのJMS接続ファクトリ。

jndiConnectionFactoryName JMSトランスポート・プロパティを使用して別の接続ファクトリを構成することもできます。「JMSトランスポート・プロパティの構成」を参照してください。

com.oracle.webservices.api.jms.RequestQueue

JMSキュー

デフォルトのJMSリクエスト・キュー。

destinationName JMSトランスポート・プロパティを使用して別のJMSリクエスト・キューを構成することもできます。「JMSトランスポート・プロパティの構成」を参照してください。

com.oracle.webservices.api.jms.ResponseQueue

JMSキュー

デフォルトのJMSレスポンス・キュー。

別のJMSレスポンス・キューを構成することもできます。「JMSレスポンス・キューの構成」を参照してください。


ドメインを作成または拡張する際には、WebLogic JAX-WS SOAP/JMS拡張テンプレート(wls_webservice_soapjms.jar)を適用して、JMSトランスポートのサポートに必要なJMSリソースを自動的に構成できます。

JMSトランスポートのサポートに必要なJMSリソースを自動的に構成するには、次のいずれかの方法を使用します。

  • 『Oracle Fusion Middleware構成ウィザードによるWebLogicドメインの作成』で説明されているように、構成ウィザードを使用してドメインを作成または拡張します。ドメインを作成または拡張するのに使用するテンプレートの指定を要求されたらWebLogic JAX-WS SOAP/JMS拡張テンプレートを選択します。

  • 『WebLogic Scripting Toolの理解』のWebLogicドメインの編集(オフライン)に関する項の説明に従ってWLSTを使用し、wls_webservice_soapjms.jar拡張テンプレートJARファイルによりドメインを拡張します。

この拡張テンプレートの使用は必須ではありませんが、使用すると必要なリソースの構成が格段に容易になります。もう1つの方法として、Oracle WebLogic Server管理コンソールまたはWLSTを使用し、必要なリソースを手動で構成することも可能です。

JMSトランスポートのサポートに必要なリソースを手動で構成するには、次のいずれかの方法を使用します。

  • WebLogic Server管理コンソールを使用し、表17-3で説明されているリソースを作成する。詳細は、『Oracle WebLogic Server JMSリソースの管理』のJMS構成に関する項を参照してください。

  • WLSTを使用し、表17-3で定義されているリソースを作成する。詳細は、『WebLogic Scripting Toolの理解』の既存のWebLogicドメインの作成に関する項を参照してください。

JMSトランスポートを使用したWebサービスの開発: Javaからの開始

Javaから開始する際にWebサービスにJMSトランスポートを使用するには、次の少なくとも1つのタスクを実行する必要があります。

  • JWSファイルに@com.oracle.webservices.api.jms.JMSTransportServiceアノテーションを追加する。

  • jwsc Antタスクの<jws>要素に<jmstransportservice>子要素を追加する。この設定は、JWSファイルで定義されたトランスポートをオーバーライドします。

次の手順では、Javaから開始する際に、JMSトランスポートを使用して現在のWebサービスを呼び出すために必要なすべての手順について説明します。

表17-4 JMSトランスポートを使用したWebサービスの開発手順: Javaからの開始

#
手順 説明

1

前提条件を完了します。

Webサービスを実装する基本的なJWSファイルが作成されており、JMSトランスポートを使用して呼び出すWebサービスを構成することが前提となっています。

また、Antベースの開発環境を設定済であり、かつjwsc Antタスクを実行してサービスをデプロイするためのターゲットを含む、作業用のbuild.xmlファイルがあることも前提となっています。

詳細は、第3章「JAX-WS Webサービスの開発」を参照してください。

2

必要なJMSコンポーネント用にWebLogic Serverドメインを構成します。

「JMSトランスポート用のWebLogic Serverドメインの構成」を参照してください。

3

JWSファイルに@com.oracle.webservices.api.jms.JMSTransportServiceアノテーションを追加する。(オプション)

この手順はオプションです。JWSファイルに@JMSTransportServiceアノテーションを追加しない場合、<jmstransportservice>子要素をjwsc Antタスクの<jws>要素に追加する必要があります(手順4を参照)。

「@JMSTransportServiceアノテーションの使用」を参照してください。

4

jwsc Antタスクに<jmstransportservice>子要素を追加します。(オプション)

<jmstransportservice>子要素を使用して、JWSファイルで定義されているトランスポートをオーバーライドします。

この手順は、手順3で@JmsTransportServiceアノテーションをJWSファイルに追加しなかった場合に必要となります。それ以外の場合、この手順は省略可能です。

詳細は、「Ant build.xmlファイルでの<jmstransportservice>子要素の使用」を参照してください。

5

jwscタスクを呼び出すbuild.xml Antファイル内のターゲットを実行することにより、Webサービスをビルドします。

たとえば、jwsc Antタスクを呼び出すターゲットがbuild-serviceというものであれば、以下を実行します。

prompt> ant build-service

「jwsc WebLogic WebサービスAntタスクの実行」を参照してください。

6

WebサービスをWebLogic Serverにデプロイします。

「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。


JMSトランスポートを使用してWebサービスを呼び出すようにクライアント・アプリケーションを更新する方法については、「JMSトランスポートを使用したWebLogic Webサービスの呼出し」を参照してください。

@JMSTransportServiceアノテーションの使用

JWSファイルをプログラミングする時点で、Webサービスの呼出しにクライアント・アプリケーションで(HTTP/Sではなく) JMSトランスポートを使用することが決まっている場合は、@com.oracle.webservices.api.jms.JMSTransportServiceを使用してその呼出しの詳細を指定できます。

JWSファイルに含めることができる@JMSTransportServiceアノテーションは1つのみです。

必要に応じて、@JMSTransportServiceアノテーションを使用して、宛先名、接続ファクトリ、配信モードなどのJMSトランスポート・プロパティを構成できます。詳細は、「JMSトランスポート・プロパティの構成」を参照してください。

後のビルド時に、"jwsc" jwsc Antタスクの<jws>要素に<jmstransportservice>子要素を指定することにより、JWSファイルで定義されている呼出しをオーバーライドし、JMSトランスポート指定を追加できます。「Ant build.xmlファイルでの<jmstransportservice>子要素の使用」を参照してください。

例17-1は、ステートレスEJBとして実装された、@JMSTransportServiceアノテーションを使用するJWSファイルからの抜粋を示しています。関連するコードについては太字で示されています。

例17-1 @JMSTransportServiceアノテーションを使用したステートレスEJBに対するJMSトランスポートの有効化

package jaxws.ejb;
...
import javax.ejb.Stateless;
import javax.jws.WebService;
import com.oracle.webservices.api.jms.JMSTransportService;
 
@WebService(name = "Simple", targetNamespace = "http://example.org")
@JMSTransportService(
  targetService="SimpleEjbService",
  destinationName="com.oracle.webservices.api.jms.RequestQueue",
  jndiConnectionFactoryName="weblogic.jms.ConnectionFactory",
  mdbPerDestination=false,
  activationConfig=("transAttribute=Never;maxBeansInFreePool=1000;
                     dispatchPolicy=weblogic.wsee.jaxws.mdb.DispatchPolicy"
  )
@Stateless
public class SimpleEjb { ... }

例17-2は、@JMSTransportServiceアノテーションを使用するプロバイダベースのWebサービスからの抜粋を示しています。関連するコードについては太字で示されています。

例17-2 @JMSTransportServiceアノテーションを使用したプロバイダベースのWebサービスに対するJMSトランスポートの有効化

package examples.webservices.jaxws;
...
import javax.xml.transform.Source;
import javax.xml.ws.Provider;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.WebServiceProvider;
import javax.xml.ws.Service;
import java.io.ByteArrayInputStream;
import com.oracle.webservices.api.jms.JMSTransportService;

@ServiceMode(value=Service.Mode.PAYLOAD)
@WebServiceProvider(portName="WarehouseServicePort", 
                    serviceName="WarehouseService",targetNamespace="http://examples.org/")
@JMSTransportService(destinationName="myQueue")
public class WarehouseServiceImpl implements Provider<Source> {
 
    public Source invoke(Source source) { ... }
}

Ant build.xmlファイルでの<jmstransportservice>子要素の使用

JMSトランスポートは、jwsc Antタスクの<jws>要素に<jmstransportservice>子要素を追加することにより、ビルド時に指定できます。ビルド時にJMSトランスポートを構成するのは、次のいずれかの場合です。

  • @JMSTransportServiceアノテーションを使用してJWSファイルに指定された属性値をオーバーライドする。

  • JWSファイルに@JMSTransportServiceアノテーションが含まれず、クライアントがJMSトランスポートを使用してWebサービスを呼び出すようにすることをビルド時に決定する。

jwsc Antタスクの<jmstransportservice>子要素は、JWSファイルの@JMSTransportServiceトランスポート・アノテーションより優先されます。

必要に応じて、<jmstransportservice>要素を使用して、宛先名、宛先タイプ、配信モードなどのJMSトランスポート・プロパティを構成できます。サポートされるJMSトランスポート・プロパティの完全なリストは、「JMSトランスポート・プロパティの構成」を参照してください。

例17-3は、jwsc Antタスクの<jws>要素に<jmstransportservice>子要素を使用して、JMSトランスポートを有効化および構成する方法を示すbuild.xmlファイルからの抜粋を示しています。関連するコードは太字で示されています。

例17-3 <jmstransportservice>子要素を使用したJMSトランスポートの有効化

<?xml version="1.0"?>
<project name="jaxws.jms.jwsc" default="all">
   <import file="../build-jms.xml"/>
      <path id="client.class.path">
         <pathelement path="${clientclasses.dir}"/>
         <pathelement path="${java.class.path}"/>
      </path>
   <target name="jwsc">
      <jwsc srcdir="." sourcepath="client" destdir="${output.dir}" debug="on" 
            keepGenerated="yes">
         <jws file="JWSCEndpoint.java" type="JAXWS" explode="true">
            <jmstransportservice
               targetService="JWSCEndpointService"
               destinationName="com.oracle.webservices.api.jms.RequestQueue"
               jndiInitialContextFactory="weblogic.jndi.WLInitialContextFactory"
               jndiConnectionFactoryName="weblogic.jms.XAConnectionFactory"
               jndiURL="t3://localhost:7001"
               deliveryMode=com.oracle.webservices.api.jms.JMSDeliveryMode.PERSISTENT
               timeToLive=60000
               priority=1
               messageType=com.oracle.webservices.api.jms.JMSMessageType.BYTES
               activationConfig = "transAttribute=Supports"
            />
      </jws>
   </jwsc>
</target>
</project>

jwsc Antタスクの使用方法の詳細は、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』のjwscに関する項を参照してください。

JMSトランスポートを使用したWebサービスの開発: WSDLからの開始

WSDLから開始する際にWebサービスにJMSトランスポートを使用するには、次の少なくとも1つのタスクを実行する必要があります。

  • wsdlc Antタスクを実行する前に、JMSトランスポートを使用するようにWSDLを更新します。

  • @com.oracle.webservices.api.jms.JMSTransportServiceアノテーションを追加するように、wsdlc Antタスクによって生成される途中まで作成済のJWS実装ファイルを更新します。

  • JWS実装ファイルの作成に使用されるjwsc Antタスクの<jws>要素に、<jmstransportservice>子要素を追加します。この設定は、JWSファイルで定義されたトランスポートをオーバーライドします。

次の手順では、WSDLから開始する際に、JMSトランスポートを使用して現在のWebサービスを呼び出すために必要なすべての手順について説明します。

表17-5 JMSトランスポートを使用したWebサービスの開発手順: WSDLからの開始

#
手順 説明

1

前提条件を完了します。

この手順では既存のWSDLファイルがあることを前提としています。

2

必要なJMSコンポーネント用にWebLogic Serverドメインを構成します。

「JMSトランスポート用のWebLogic Serverドメインの構成」を参照してください。

3

JMSトランスポートを使用するようWSDLを更新する(オプション)

この手順はオプションです。JMSトランスポートを使用するようWSDLを更新しなかった場合、以下の少なくとも1つの作業を行う必要があります。

  • 途中まで作成済のJWSファイルを編集して@JMSTransportServiceアノテーションをJWSファイルに追加します(手順5を参照)。

  • jwsc Antタスクの<jws>要素に<jmstransportservice>子要素を追加します(手順7を参照)。

「JMSトランスポートを使用するためのWSDLの更新」を参照してください。

4

WSDLファイルに対してwsdlc Antタスクを実行します。

たとえば、wsdlc Antタスクを呼び出すターゲットがgenerate-from-wsdlというものであれば、以下を実行します。

prompt> ant generate-from-wsdl

「wsdlc WebLogic WebサービスAntタスクの実行」を参照してください。

5

途中まで作成済みのJWSファイルを更新します。

wsdlc Antタスクにより途中まで作成済のJWSファイルが生成されます。必要な動作をWebサービスに実装するには、独自のビジネス・コードをWebサービスに追加する必要があります。「wsdlcで生成される途中まで作成済のJWS実装クラス・ファイルの更新」を参照してください。

手順3で、JMSトランスポートを使用するようにWSDLを更新した場合、JWSファイルには、JMSトランスポートを定義する@JMSTransportServiceアノテーションが含まれます。@JMSTransportServiceアノテーションがJWSファイルに含まれない場合、次の少なくとも1つの作業を行う必要があります。

  • JWSファイルを編集して、@JMSTransportServiceアノテーションをJWSファイルに追加します(「@JMSTransportServiceアノテーションの使用」を参照)。

  • jwsc Antタスクの<jws>要素に<jmstransportservice>子要素を追加します(手順7を参照)。

6

jwsc Antタスクに<jmstransportservice>子要素を追加します。(オプション)

<jmstransportservice>子要素を使用して、JWSファイルで定義されているトランスポートをオーバーライドします。この手順は、JWSファイルに@JMSTransportServiceアノテーションが含まれない場合には必須です(手順5を参照)。それ以外の場合、この手順は省略可能です。

詳細は、「Ant build.xmlファイルでの<jmstransportservice>子要素の使用」を参照してください。

7

JWSファイルに対してjwsc Antタスクを実行し、Webサービスをビルドします。

wsdlc Antタスクによって生成されたアーティファクトと更新したJWS実装ファイルを指定して、Webサービスを実装するエンタープライズ・アプリケーションを生成します。

「jwsc WebLogic WebサービスAntタスクの実行」を参照してください。

8

WebサービスをWebLogic Serverにデプロイします。

「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください。


JMSトランスポートを使用してWebサービスを呼び出すようにクライアント・アプリケーションを更新する方法については、「JMSトランスポートを使用したWebLogic Webサービスの呼出し」を参照してください。

JMSトランスポートを使用するためのWSDLの更新

JMSトランスポートを使用するようにWSDLを更新するには、JMSトランスポート情報を定義する<wsdl:binding>定義を追加する必要があります。複数のトランスポート・オプションを指定するかどうかにより、次のいずれかの方法で定義を追加できます。

  • 既存のHTTP <wsdl:binding>定義を編集する。

  • WSDLで複数のトランスポート・オプション(HTTPやJMSトランスポートなど)を指定する場合は、既存のHTTP <wsdl:binding>定義をコピーし、JMSトランスポートを使用するように編集する。

必要に応じて、バインディングまたはJMS URIレベルでJMSトランスポート・プロパティを構成できます。

次の各項では、JMSトランスポートを使用するためにWSDLを更新する方法について説明します。

WSDLバインディング・レベルでのJMSトランスポートの有効化

WSDLバインディング・レベルでJMSトランスポートを有効にするには、<wsdl:binding>要素の<soapwsdl:binding>子要素のtransport属性をhttp://www.w3.org/2010/soapjmsに設定します。

必要に応じて、<wsdl:binding>要素定義内にJMSトランスポート・プロパティを構成できます。「WSDLでのJMSトランスポート・プロパティの構成」を参照してください。

例17-4は、JMSトランスポートの<wsdl:binding>要素の例を示します。この例では、HTTPバインディングも定義されます。

例17-4 WSDLバインディング・レベルでのJMSトランスポートの有効化

...
<binding xmlns:soapjms="http://www.w3.org/2010/soapjms/" 
     name="AddNumbersJMSBinding" type="tns:AddNumbersPortType">
    <soap:binding transport="http://www.w3.org/2010/soapjms/" style="document" />
    <operation name="addNumbers">
        <soap:operation soapAction="" />
            <input>
                <soap:body use="literal" />
            </input>
            <output>
                <soap:body use="literal" />
             </output>
    </operation>
</binding>
<binding name="AddNumbersSOAPBinding" type="tns:AddNumbersPortType">
    <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" />
     ...
</binding>
...

WSDLでのJMSトランスポート・プロパティの構成

必要に応じて、次のWSDL要素内に、JMSトランスポート・プロパティのサブセットを構成できます。

  • <wsdl:binding>要素: バインディングを使用するすべてのポートに伝播します。

  • JMS URI(「JMS URIの構成」を参照)。

具体的には、WSDLで次のJMSトランスポート・プロパティを構成できます。各プロパティの説明は、表17-6「JMSトランスポート構成プロパティの説明」を参照してください。

  • deliveryMode

  • jndiConnectionFactoryName

  • jndiContextParameters

  • jndiInitialContextFactory

  • jndiURL

  • priority

  • replyToName

  • timeToLive

例17-5は、JMSトランスポート・プロパティが定義されている<wsdl:binding>要素の例を示します。この場合、JMSトランスポート・プロパティは、バインディングを使用するすべてのポートに伝播します。

例17-5 WSDLでのJMSトランスポート・プロパティの構成

...
<binding xmlns:soapjms="http://www.w3.org/2010/soapjms/" 
     name="AddNumbersBinding" type="tns:AddNumbersPortType">
   <soap:binding transport="http://www.w3.org/2010/soapjms/" 
                 style="document" />
      <soapjms:jndiInitialContextFactory>
         weblogic.jndi.WLInitialContextFactory
      </soapjms:jndiInitialContextFactory>
      <soapjms:jndiConnectionFactoryName>
         weblogic.jms.XAConnectionFactory 
      </soapjms:jndiConnectionFactoryName>
      <soapjms:bindingVersion>1.0</soapjms:bindingVersion>
      <soapjms:destinationName>
         com.oracle.webservices.api.jms.RequestQueue 
      </soapjms:destinationName>
      <soapjms:targetService>AddNumbersService</soapjms:targetService>
      <soapjms:deliveryMode>
         com.oracle.webservices.api.jms.JMSDeliveryMode.PERSISTENT
      </soapjms:deliveryMode>
      <soapjms:priority>0</soapjms:priority>
      <soapjms:messageType>
         com.oracle.webservices.api.jms.JMSMessageType.BYTES
      </soapjms:messageType>
      <soapjms:destinationType>
         com.oracle.webservices.api.jms.JMSDestinationType.QUEUE
      </soapjms:destinationType>
            <operation name="addNumbers">
               <soap:operation soapAction="" />
                  <input>
                     <soap:body use="literal" />
                  </input>
                  <output>
                     <soap:body use="literal" />
                  </output>
                </operation>
</binding>
...

WSDLでのJMSトランスポートの有効化の例

例17-6は、SOAP over JMSトランスポート用に構成されるWSDLの例を示します。

例17-6 WSDLでのJMSトランスポートの有効化

<?xml version="1.0" encoding="UTF-8"?>
 
<definitions
   name="AddNumbers"
   targetNamespace="http://example.org"
   xmlns:tns="http://example.org"
   xmlns="http://schemas.xmlsoap.org/wsdl/"
   xmlns:xsd="http://www.w3.org/2001/XMLSchema"
   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
   <types>
      <xsd:schema
         xmlns="http://www.w3.org/2001/XMLSchema"
         targetNamespace="http://example.org"
         elementFormDefault="qualified">
 
         <complexType name="addNumbersResponse"
            <sequence>
               <element name="return" type="xsd:int" />
            </sequence>
         </complexType>
         <element name="addNumbersResponse" type="tns:addNumbersResponse"/>
 
         <complexType name="addNumbers">
            <sequence>
               <element name="arg0" type="xsd:int" />
               <element name="arg1" type="xsd:int" />
            </sequence>
         </complexType>
         <element name="addNumbers" type="tns:addNumbers"/>
      </xsd:schema>
   </types>
   <message name="addNumbers">
      <part name="parameters" element="tns:addNumbers" />
   </message>
   <message name="addNumbersResponse">
      <part name="result" element="tns:addNumbersResponse" />
   </message>
   <portType name="AddNumbersPortType">
      <operation name="addNumbers">
         <input message="tns:addNumbers" />
         <output message="tns:addNumbersResponse" />
      </operation>
   </portType>
         <binding xmlns:soapjms="http://www.w3.org/2010/soapjms/" name="AddNumbersBinding" 
            type="tns:AddNumbersPortType">
            <soap:binding transport="http://www.w3.org/2010/soapjms/" style="document" />
            <soapjms:jndiInitialContextFactory>weblogic.jndi.WLInitialContextFactory
            </soapjms:jndiInitialContextFactory>
            <soapjms:jndiConnectionFactoryName>weblogic.jms.XAConnectionFactory 
            </soapjms:jndiConnectionFactoryName>
            <soapjms:bindingVersion>1.0</soapjms:bindingVersion>
            <soapjms:destinationName>com.oracle.webservices.api.jms.RequestQueue 
            </soapjms:destinationName>
            <soapjms:targetService>AddNumbersService</soapjms:targetService>
            <soapjms:deliveryMode>com.oracle.webservices.api.jms.JMSDeliveryMode.PERSISTENT
            </soapjms:deliveryMode>
            <soapjms:priority>0</soapjms:priority>
            <soapjms:messageType>com.oracle.webservices.api.jms.JMSMessageType.BYTES
            </soapjms:messageType>
            <soapjms:destinationType>com.oracle.webservices.api.jms.JMSDestinationType.QUEUE
            </soapjms:destinationType>
               <operation name="addNumbers">
                  <soap:operation soapAction="" />
                     <input>
                        <soap:body use="literal" />
                     </input>
                     <output>
                        <soap:body use="literal" />
                     </output>
                   </operation>
      </binding>
      <service name="AddNumbersService">
         <port name="AddNumbersPort" binding="tns:AddNumbersBinding">
            <soap:address location="jms:jndi:com.oracle.webservices.api.jms.RequestQueue?targetService=AddNumbersService&amp;jndiInitialContextFactory=weblogic.jndi.WLInitialContextFactory&amp;jndiConnectionFactoryName=weblogic.jms.XAConnectionFactory"/>
 
      </port>
   </service>
</definitions>

JMSトランスポートを使用したWebLogic Webサービスの呼出し

HTTPトランスポートを使用して記述したときと同様にして、JMSトランスポートを使用し、Webサービスを呼び出すクライアント・アプリケーションを記述します。JMSトランスポートの場合、クライアントはSOAPリクエスト・メッセージをJMSリクエストの宛先に送信し、JMSレスポンスの宛先からSOAPレスポンス・メッセージを受信します。Webサービスの呼出しの例は、第9章「JAX-WS Webサービス・クライアントの開発例」を参照してください。

次のいずれかの方法を使用して、Webサービス・クライアントでJMSトランスポートを有効にし、必要に応じて構成します。

Ant build.xmlファイルでの<jmstransportclient>要素の使用

clientgenツールでは、JMSトランスポート・バインディングを含むWSDLファイルから、JMSトランスポート・クライアント・プロキシが生成されます。clientgenを使用してクライアント・プロキシを生成する際、clientgen Antタスクに<jmstransportclient>要素を追加することにより、JMSトランスポートを有効にできます。


注意:

HTTPを使用してJMSトランスポートで構成されたWebサービスを呼び出すことはできませんが、HTTPを使用してそのWebサービスのWSDLを参照することはできます。これにより、clientgen AntタスクはやはりWebサービスのJAX-WSアーティファクトを作成できます。

必要に応じて、<jmstransportclient>要素を使用して、宛先名、宛先タイプ、配信モード、リクエストおよびレスポンス・キューなどのJMSトランスポート・プロパティを構成できます。サポートされるJMSトランスポート・プロパティの完全なリストは、「JMSトランスポート・プロパティの構成」を参照してください。

例17-7は、clientgen Antタスクの<jmstransportclient>要素を使用して、JMSトランスポートを有効化および構成する方法を示すbuild.xmlファイルからの抜粋を示しています。関連するコードは太字で示されています。

例17-7 Ant build.xmlファイルでの<jmstransportclient>要素の使用

<target name="clientgen">
<clientgen
      wsdl="./WarehouseService.wsdl"
      destDir="clientclasses"
      packageName="client.warehouse"
      type="JAXWS">
      <jmstransportclient
                targetService="JWSCEndpointService"
                destinationName="com.oracle.webservices.api.jms.RequestQueue"
                jndiInitialContextFactory="weblogic.jndi.WLInitialContextFactory"
                jndiConnectionFactoryName="weblogic.jms.ConnectionFactory"
                jndiURL="t3://localhost:7001"
                timeToLive=60000
                priority=1
                messageType=com.oracle.webservices.api.jms.JMSMessageType.TEXT
                replyToName="com.oracle.webservices.api.jms.ResponseQueue"
     />
</clientgen>

clientgen Antタスクの使用の詳細は、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』のclientgenに関する項を参照してください。

@JMSTransportClientアノテーションの使用

clientgenを実行してWSDLファイルからWebサービス・クライアント・アーティファクトを生成すると、ビルド・ファイルで<jmstransportclient>を使用してJMSトランスポートが有効化されている場合、生成されたクライアント・プロキシに自動的に@com.oracle.webservices.api.jms.JMSTransportClientアノテーションが含まれます(「Ant build.xmlファイルでの<jmstransportclient>要素の使用」を参照)。

clientgenにより自動的に@JMSTransportClientアノテーションが構成されない場合は、これを手動でファイルに追加できます。

必要に応じて、@JMSTransportClientアノテーションを使用して、次のJMSトランスポート・プロパティを構成できます。各プロパティの説明は、表17-6「JMSトランスポート構成プロパティの説明」を参照してください。

  • destinationName

  • destinationType

  • enabled

  • jmsMessageHeader

  • jmsMessageProperty

  • jndiConnectionFactoryName

  • jndiContextParameters

  • jndiInitialContextFactory

  • jndiURL

  • messageType

  • priority

  • replyToName

  • targetService

  • timeToLive

例17-8は、@JMSTransportClientアノテーションを使用するクライアント・ファイルからの抜粋を示しています。関連するコードについては太字で示されています。

例17-8 @JMSTransportClientアノテーションを使用したクライアント・プロキシに対するJMSトランスポートの有効化

...
import javax.xml.ws.WebServiceClient;
import com.oracle.webservices.api.jms.JMSTransportClient;
...
@WebServiceClient(name = "WarehouseService", targetNamespace = "http://oracle.com/samples/", 
                  wsdlLocation="WarehouseService.wsdl")
@JMSTransportClient (
    destinationName="myQueue", 
    replyToName="myReplyToQueue",
    jndiURL="t3://localhost:7001",
    jndiInitialContextFactory="weblogic.jndi.WLInitialContextFactory" , 
    jndiConnectionFactoryName="weblogic.jms.ConnectionFactory" , 
    timeToLive=1000, priority=1,
    messageType=com.oracle.webservices.api.jms.JMSMessageType.TEXT
)

public class WarehouseService  extends Service { ... }

JMSTransportClientFeatureクライアントAPIの使用

com.oracle.webservices.api.jms.JMSTransportClientFeatureクライアントAPIを使用して、Webサービス・クライアントでJMSトランスポートを構成できます。

必要に応じて、com.oracle.webservices.api.jms.JMSTransportClientFeatureを使用して、次のJMSトランスポート・プロパティを構成できます。各プロパティの説明は、表17-6「JMSトランスポート構成プロパティの説明」を参照してください。

  • destinationName

  • destinationType

  • enabled

  • jmsMessageHeader

  • jmsMessageProperty

  • jndiConnectionFactoryName

  • jndiContextParameters

  • jndiInitialContextFactory

  • jndiURL

  • messageType

  • priority

  • replyToName

  • targetService

  • timeToLive

例17-9は、JMSTransportClientFeatureを使用するWebクライアントからの抜粋を示しています。関連するコードについては太字で示されています。

例17-9 JMSTransportClientFeatureを使用したクライアント・プロキシに対するJMSトランスポートの有効化

...
import javax.xml.namespace.QName;
import java.net.URL;
import com.oracle.webservices.api.jms.JMSTransportClientFeature;
...
URL url = new URL("http://localhost:7001/WarehouseServicePort/WarehouseService?WSDL");
QName serviceName = new QName("http://www.oracle.com/samples/", "WarehouseService");
WarehouseService service = new WarehouseService (url, serviceName);
JMSTransportClientFeature feature = 
JMSTransportClientFeature.builder().jndiInitialContextFactory("weblogic.jndi.WLInitialContextFactory").jndiURL("t3://localhost:7001").build();  
port = service.getWarehouseShipmentsPort(new WebServiceFeature[]{feature});
Item item = new Item();
item.setProductNumber(10001);
item.setQuantity(100);
port.shipGoods(item, "BEA");
...

例17-10は、JMSTransportClientFeatureを使用するディスパッチ・クライアントからの抜粋を示しています。関連するコードについては太字で示されています。

例17-10 JMSTransportClientFeatureを使用したディスパッチ・クライアントに対するJMSトランスポートの有効化

...
import javax.xml.namespace.QName;
import java.net.URL;
import javax.xml.bind.JAXBContext;
import javax.xml.ws.ServiceMode;
import javax.xml.ws.Dispatch;
import com.oracle.webservices.api.jms.JMSTransportClientFeature;
...
Service service = Service.create(new URL(wsdl), new QName(nameSpace, serviceName));
JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
JMSTransportClientFeature feature = 
JMSTransportClientFeature.builder().jndiURL("t3://adc2170585:7003").build();  
Dispatch dispatch =
      service.createDispatch(new QName(nameSpace, "WarehouseServicePort"), jaxbContext,
      Service.Mode.PAYLOAD, new WebServiceFeature[]{feature});
...

ターゲット・エンドポイント・アドレスとしてのJMS URIの構成

クライアント・バインディングのターゲット・エンドポイント・アドレスとしてJMS URIを指定して、Webサービス・クライアントでJMSトランスポートを有効化および構成できます。JMS URIの構築については、「JMS URIの構成」を参照してください。

例17-11は、ターゲット・エンドポイント・アドレスをJMS URIに設定するWebクライアントからの抜粋を示しています。関連するコードについては太字で示されています。この例で、JMSTransportClientFeatureを使用してreplyToNameが構成されている場合、これがターゲット・エンドポイント・アドレス値より優先されます。

例17-11 JMS URIを使用したクライアント・プロキシに対するJMSトランスポートの有効化

...
import javax.xml.namespace.QName;
import java.net.URL;
import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.MessageContext;
import com.oracle.webservices.api.jms.JMSTransportClientFeature;
...
URL url = new URL("http://localhost:7001/WarehouseServicePort/WarehouseService?WSDL");
QName serviceName = new QName("http://www.oracle.com/samples/", "WarehouseService");
WarehouseService service = new WarehouseService (url, serviceName);
JMSTransportClientFeature feature = new JMSTransportClientFeature().build();
feature.setJndiInitialContextFactory ("weblogic.jndi.WLInitialContextFactory");
feature.setJndiUrl("t3://localhost:7001");
port = service.getWarehouseShipmentsPort(new WebServiceFeature[]{feature});
BindingProvider bp = (BindingProvider) port;
bp.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
     "jms:jndi:myQueue?targetService=WarehouseService&replyToName=myReplyToQueue");
Item item = new Item();
item.setProductNumber(10001);
item.setQuantity(100);
port.shipGoods(item, "BEA");
...

例17-12は、JMSTransportClientFeatureを使用するディスパッチ・クライアントからの抜粋を示しています。関連するコードについては太字で示されています。この例で、JMSTransportClientFeatureで指定されたJMSトランスポート・プロパティは、JMS URIより優先されます。

例17-12 JMS URIを使用したディスパッチ・クライアントに対するJMSトランスポートの有効化の例

...
String uri = "jms:jndi:myQueue?targetService=WarehouseService&jndiConnectionFactoryName=weblogic.jms.ConnectionFactory&jndiURL=t3://adc2170585:7003&jndiInitialContextFactory=weblogic.jndi.WLInitialContextFactory";
Service service = Service.create(new URL(wsdl), new QName(nameSpace, serviceName));
JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
JMSTransportClientFeature feature = new JMSTransportClientFeature().build();
feature.setJndiUrl("t3://adc2170585:7003");
 
Dispatch dispatch =
      service.createDispatch(new QName(nameSpace, "WarehouseServicePort"), jaxbContext,
      Service.Mode.PAYLOAD, new WebServiceFeature[]{feature});
 
dispatch.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, uri );
...

AsyncClientTransportFeatureを使用した非同期クライアントの構成

非同期クライアント・トランスポート機能(「スケーラブルな非同期JAX-WSクライアントの開発(非同期クライアント・トランスポート)」を参照)は、スケーラブルな非同期クライアントのプログラミング・モデルを提供します。

非同期クライアントに対してSOAP over JMSトランスポートを有効にするには:

  1. クライアント・バインディングのターゲット・エンドポイント・アドレスとしてJMS URIを指定します。JMS URIの構築については、「JMS URIの構成」を参照してください。


    注意:

    JMSトランスポートを使用している場合、非同期レスポンス・エンドポイントのコンテキスト・パスがAsyncClientTransportFeatureを使用して指定されていると、これが無視されます。

  2. 必要に応じて、AsyncClientTransportFeatureを使用し、addressまたはReplyToヘッダーを構成することにより、永続的なレスポンス・キューを構成します(「非同期クライアント・トランスポート機能の有効化と構成」を参照)。

    JMSレスポンス・キューのアドレスを構成しない場合、またはdestinationNameプロパティが匿名に設定されている場合(JMSトランスポートでは、これはサポートされていません)は、一時レスポンス・キューが使用されます。JMSレスポンス・キューの構成の詳細は、「JMSレスポンス・キューの構成」を参照してください。

エンドポイントが呼び出されると、クライアント実行時環境では、レスポンス・エンドポイントが公開され、レスポンスJMSキューにJMSリスナーがデプロイされます。クライアントにアタッチされると、AsyncClientTransportFeatureインスタンスはすべてのクライアント呼出しのレスポンス・エンドポイントを決定します。ターゲットのエンドポイント・アドレス内のreplyToNameプロパティおよびJMSTransportClientFeatureは無視されます。

例17-13は、AsyncClientTransportFeatureを使用する非同期クライアントからの抜粋を示しています。関連するコードについては太字で示されています。この例では、replyToおよびfaultToアドレスが定義され、クライアントに渡されます。

例17-13 非同期クライアントに対するJMSトランスポートの有効化と永続キューの構成の例

...
WarehouseService service = new WarehouseService(url, serviceName);
AsyncClientTransportFeature replyTo = new AsyncClientTransportFeature (
                            "jms:jndi:myReplyToQueue?targetService=WarehouseService");
AsyncClientTransportFeature faultTo = new AsyncClientTransportFeature (
                            "jms:jndi:myFaultToQueue?targetService=WarehouseService");
AsyncClientTransportFeature callbackFeature =  new AsyncClientTransportFeature (
               replyTo.getEndpointReference(W3CEndpointReference.class), 
               faultTo.getEndpointReference(W3CEndpointReference.class));
port = service.getWarehouseServicePort(new WebServiceFeature[] { callbackFeature });
status = port.shipGoods(item, "BEAN");
(BindingProvider) port.getRequestContext().put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, 
                  "jms:jndi:myQueue?targetService=WarehouseService");
((Closable)port).close();
...

JMSトランスポート・プロパティの構成

JMSトランスポートを有効にする際、必要に応じて、JMSトランスポート・プロパティを構成できます。次の各項を参照してください。

JMSトランスポート構成プロパティの説明

表17-6は、構成可能なJMSトランスポート・プロパティと、表17-7で定義したサポートされる構成方法を示しています。

表17-6 JMSトランスポート構成プロパティの説明

名前 説明 サポートされる構成方法

activationConfig

JMSプロバイダに渡されるアクティブ化構成プロパティ。各プロパティは、"name1=value1;...;nameN=valueN"のフォーマットを使用して、名前と値のペアとして指定されます。

例: "key1=value1;key2=value2"

このプロパティでサポートされるアクティブ化構成プロパティのリストは、表17-7を参照してください。

デフォルト値は""です。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

bindingVersion

SOAP JMSバインディングのバージョン。このリリースでは、この値は1.0に設定する必要があります。この値は、com.oracle.webservices.api.jms.JMSBindingVersion.SOAP_JMS_1_0と同等です。

この値は、SOAPJMS_bindingVersion JMSメッセージ・プロパティにマップされます(表17-1を参照)。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

deliveryMode

リクエスト・メッセージが永続的かどうかを示す配信モード。有効な値は、com.oracle.webservices.api.jms.JMSDeliveryMode.PERSISTENTおよびcom.oracle.webservices.api.jms.JMSDeliveryMode.NON_PERSISTENTです。

デフォルト値はcom.oracle.webservices.api.jms.JMSDeliveryMode.PERSISTENTです。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

destinationName

宛先キューまたはトピックのJNDI名。

デフォルト値は"com.oracle.webservices.api.jms.RequestQueue"です。

表17-8内のすべての構成方法

destinationType

宛先タイプ。有効な値は、com.oracle.webservices.api.jms.JMSDestinationType.QUEUEまたはcom.oracle.webservices.api.jms.JMSDestinationType.TOPICです。

デフォルト値はcom.oracle.webservices.api.jms.JMSDestinationType.QUEUEです。

この値は、該当する場合、activationConfigプロパティのエントリとして指定されたdestinationType値(表17-7を参照)をオーバーライドします。

トピックは、一方向通信でのみサポートされます。

表17-8内のすべての構成方法

enabled

JMSトランスポートが有効かどうかを指定するBooleanフラグ。この値のデフォルトはtrueです。

@JMSTransportServiceおよび@JMSTransportClientアノテーション

enableHttpWsdlAccess

HTTPによりWSDLを公開するかどうかを指定するBooleanフラグ。このフラグのデフォルトはtrueです。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

jmsMessageHeader

JMSヘッダー・プロパティ。各プロパティは、"name1=value1&...&nameN=valueN"のフォーマットを使用して、名前と値のペアとして指定されます。

例: "JMSType=car&JMSPriority=4"

デフォルト値は""です。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

  • @JMSTransportClientアノテーション

jmsMessageProperty

JMSメッセージ・プロパティ。各プロパティは、"name1=value1&...&nameN=valueN"のフォーマットを使用して、名前と値のペアとして指定されます。

例: "JMSType=car&JMSPriority=4"

デフォルト値は""です。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

  • @JMSTransportClientアノテーション

jndiConnectionFactoryName

JMS接続の確立に使用される接続ファクトリのJNDI名。

デフォルト値は"com.oracle.webservices.api.jms.ConnectionFactory"です。

表17-8内のすべての構成方法

jndiContextParameter

JNDIプロパティ。各プロパティは、"name1=value1&...&nameN=valueN"のフォーマットを使用して、名前と値のペアとして指定されます。

JNDIプロバイダのInitialContextコンストラクタに送信されるjava.util.Hashtableにプロパティが追加されます。

デフォルト値は""です。

表17-8内のすべての構成方法

jndiInitialContextFactory

JNDIルックアップに使用される最初のコンテキスト・ファクトリ・クラス名。この値は、java.naming.factory.initialプロパティにマップされます。

デフォルト値は"weblogic.jndi.WLInitialContextFactory"です。

表17-8内のすべての構成方法

jndiURL

JNDIプロバイダのURL。

デフォルト値は"t3://localhost:7001"です。

この値は、java.naming.provider.urlプロパティにマップされます。

表17-8内のすべての構成方法

lookupVariant

指定された宛先名の参照に使用されるメソッド。JMSトランスポートをサポートするには、この値をjndi(デフォルト値)に設定する必要があります。

なし(変更できません)

mdbPerDestination

リクエストされた宛先ごとに1つのリスニング・メッセージドリブンBean (MDB)を作成するかどうかを指定するBooleanフラグ。この値のデフォルトはtrueです。

falseに設定すると、Webサービス・ポートごとに1つのリスニングMDBが作成され、そのMDBは他のポートによって共有できません。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

messageType

リクエスト・メッセージで使用するメッセージ・タイプ。有効な値は、com.oracle.webservices.api.jms.JMSMessageType.BYTESおよびcom.oracle.webservices.api.jms.JMSMessageType.TEXTです。

デフォルト値はcom.oracle.webservices.api.jms.JMSMessageType.BYTESです。

メッセージ・タイプの構成の詳細は、「JMSメッセージ・タイプの構成」を参照してください。

表17-8内のすべての構成方法

priority

リクエストおよびレスポンス・メッセージに関連付けられたJMS優先度。この値は、0 (最低優先度)から9 (最高優先度)までの正の整数で指定します。デフォルト値は0です。

表17-8内のすべての構成方法

replyToName

レスポンス・メッセージが送信されるJMS宛先のJNDI名。

双方向動作の場合、デフォルトで一時レスポンス・キューが生成されます。デフォルトの一時レスポンス・キューを使用することで、必要となる構成が最小限に抑えられます。ただし、サーバーの障害時には、レスポンス・メッセージが失われる可能性があります。

このプロパティにより、クライアントは、応答の受取りにデフォルトの一時キューまたはトピックを使用するのではなく、事前に定義された永続キューまたはトピックを使用できます。JMSレスポンス・キューの構成の詳細は、「JMSレスポンス・キューの構成」を参照してください。

この値は、リクエスト・メッセージのJMSReplyTo JMSヘッダーにマップされます。

デフォルト値は""です。

表17-8内のすべての構成方法

runAsPrincipal

リスニングMDBの実行に使用されるプリンシパル。

デフォルト値は""です。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

runAsRole

リスニングMDBの実行に使用されるロール。

デフォルト値は""です。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

targetService

Webサービスのポート・コンポーネント名。この値は、サービス実装により、サービス・リクエストのディスパッチに使用されます。指定されない場合、WSDLまたは@javax.jws.WebServiceアノテーションのサービス名が使用されます。

この値は、SOAPJMS_targetService JMSメッセージ・プロパティにマップされます。

デフォルト値は""です。

  • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

  • @JMSTransportServiceアノテーション

  • @JMSTransportClientアノテーション

timeToLive

リクエスト・メッセージの存続期間(ミリ秒単位)。0の値は、存続期間が無限であることを示します。指定されない場合、JMSで定義されているデフォルト値、180000Lが使用されます。

サービス側では、timeToLiveでも各MDBトランザクションの期限が指定されます。

表17-8内のすべての構成方法


次の表は、表17-6activationConfigプロパティでサポートされるアクティブ化プロパティを示しています。アクティブ化プロパティを使用したMDBの調整については、『Oracle WebLogic Serverのパフォーマンスのチューニング』のメッセージドリブンBeanの調整に関する項を参照してください。

表17-7 activationConfigプロパティでサポートされるアクティブ化プロパティ

名前 説明

acknowledgeMode

メッセージが受信および処理されたことをJMSプロバイダに通知する方法を制御する確認応答モード。有効な値は次のとおりです。

  • AUTO_ACKNOWLEDGE: メッセージはただちに確認されます。これがデフォルトです。

  • DUPS_OK_ACKNOWLEDGE: 確認応答は遅延し、重複メッセージが受信される可能性があります。

コンテナ管理トランザクションを使用する場合は、確認応答モードは無視されます。(この場合、確認応答はトランザクションのコンテキスト内で実行されます。)

connectionFactoryJndiName

キューおよびトピックの作成にMDBが使用するJMS接続ファクトリのJNDI名。この値のデフォルトはweblogic.jms.MessageDrivenBeanConnectionFactoryです。

destinationJndiName

WebLogic Server JNDIツリーにデプロイされている実際のJMSキューまたはトピックにMDBを関連付けるために使用するJNDI名。

destinationType

JMS宛先のタイプ。有効な値は、QUEUEおよびTOPICです。

dispatchPolicy

MDBのワーク・マネージャ。この値のデフォルトはweblogic.wsee.jaxws.mdb.DispatchPolicyです。

distributedDestinationConnection

同一クラスタ内のWebLogic JMS分散宛先(トピックまたはキュー)にアクセスするMDBが、すべての分散宛先メンバーから消費するか、または現在のWebLogic Serverインスタンスのローカル分散宛先メンバーのみから消費するかを指定する接続設定。有効な値は次のとおりです。

  • LocalOnly: MDBは、現在のWebLogic Serverインスタンスのローカル・メンバーからJMS分散宛先を消費します。これがデフォルトです。

  • EveryMember: MDBは、すべての分散宛先メンバーからJMS分散宛先を消費します。

durableSubscriptionDeletion

MDBがアンデプロイまたは削除されるときに恒久トピック・サブスクリプションが自動的に削除されるようにするかどうかを指定するフラグ。この値のデフォルトはfalseです。

initialContextFactory

接続ファクトリの作成にEJBコンテナが使用する初期コンテキスト・ファクトリ。この値のデフォルトはweblogic.jndi.WLInitialContextFactoryです。

initSuspendSeconds

EJBコンテナがJMSリソースの停止を検出したときにMDBのJMS接続を中断する初期秒数。この値は任意の整数値に設定でき、デフォルトは5です。

jmsClientId

JMS宛先に接続するときのMDBのクライアントID。この値は、JMSトピックへの恒久サブスクリプションに使用されます。

jmsPollingIntervalSeconds

アクセスできなくなっているJMS宛先にEJBコンテナが再接続を試みる間隔(秒単位)。この値は任意の整数値に設定でき、デフォルトは10です。

maxBeansInFreePool

空きプール内の非アクティブMDBの最大数。この値は任意の正の整数値または0に設定できます。この値のデフォルトは1000です。

maxMessagesInTransaction

MDBのトランザクションに入れることができるメッセージの最大数。この値は任意の正の整数値または0に設定できます。この値のデフォルトは1です。

maxSuspendSeconds

EJBコンテナがJMSリソースの停止を検出したときにMDBのJMS接続を中断する最大秒数。この値は任意の整数に設定でき、デフォルトは60です。

messageSelector

ヘッダー・フィールド参照およびプロパティ参照ごとに、受信するメッセージを指定するためにクライアントによって使用される文字列。ヘッダーとプロパティ値が指定したセレクタに一致するメッセージのみが送信されます。この値は、メッセージ・ヘッダー、またはメッセージ・プロパティを使用した条件式に設定できます。この値のデフォルトはnullです。

providerURL

InitialContextで使用されるURLプロバイダ(通常はhost:port)。この値は、任意の有効なURLに設定でき、デフォルトはnullです。

subscriptionDurability

JMSトピック・サブスクリプションがDurableまたはNonDurableかを指定するフラグ。この値のデフォルトはDurableです。

topicMessagesDistributionMode

トピック・メッセージの配信モード。有効な値は、One-Copy-Per-ApplicationOne-Copy-Per-ServerCompatibiltyです。この値のデフォルトはCompatibilityです。有効な値の詳細は、『Oracle WebLogic ServerメッセージドリブンBeanの開発』のトピックのデプロイメントのシナリオに関する項を参照してください。

transAttribute

メソッドの呼出しをエンタープライズBeanのビジネス・メソッドに委託するときにコンテナがトランザクションの境界をどのように管理するのかを指定するトランザクション設定。有効な値は、RequiredNotSupportedSupportsRequiresNewMandatoryおよびNeverです。この値のデフォルトはRequiredです。有効な値の詳細は、「Webサービス原子性トランザクションの使用」を参照してください。

transTimeoutSeconds

EJBのコンテナで開始されたトランザクションの最長継続時間(秒単位)。この時間を超えると、トランザクションはロールバックされ、サービスはSOAPフォルトを戻します。この値は任意の正の整数または0に設定できます。

トランザクション・タイムアウトが指定されていないか、0に設定されている場合、ドメインに構成されたトランザクション・タイムアウトが使用されます。ドメインにタイムアウトが構成されていない場合、デフォルトは30です。

use81StylePolling

WebLogic Serverバージョン8.1スタイルのポーリングの後方互換性をサポートするかどうかを指定するフラグ。有効な値は、TrueまたはFalseです。この値のデフォルトはFalseです。


構成メソッドと優先順位

必要に応じて、JMSトランスポートを有効にする際に、表17-8で定義するいずれかのメソッドを使用して、JMSトランスポート・プロパティを構成できます。

表17-8 JMSプロパティの構成に使用されるメソッド

構成メソッド 説明

JMSTransportClientFeature API

Webサービス・クライアントを作成し、JMSトランスポート・プロパティを引数としてweblogic.jws.jaxws.client.JmsTransportClientFeature APIに渡します。詳細は、「JMSトランスポートを使用したWebLogic Webサービスの呼出し」を参照してください。

ターゲット・サービス・エンドポイント・アドレス

ターゲット・サービス・エンドポイント・アドレスを構築し、JMSトランスポート・プロパティを問合せ文字列の一部として含めます。詳細は、「JMS URIの構成」を参照してください。

@JMSTransportClientアノテーション

Webサービス・クライアントを作成し、JMSトランスポート・プロパティを属性としてJWSファイルの@com.oracle.webservices.api.jms.JMSTransportClientアノテーションに渡します(「@JMSTransportClientアノテーションの使用」を参照)。

@JMSTransportServiceアノテーション

Webサービス・クライアントを作成し、JMSトランスポート・プロパティを属性としてJWSファイルの@com.oracle.webservices.api.jms.JMSTransportServiceアノテーションに渡します(「@JMSTransportServiceアノテーションの使用」を参照)。

clientgen Antタスクの<jmstransportclient>要素

clientgen Antタスクに<jmstransportclient>要素を含むWebサービスを構築します。詳細は、「Ant build.xmlファイルでの<jmstransportclient>要素の使用」を参照してください。

jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

jwsc Antタスクの<jws>要素に<jmstransportservice>子要素を含むWebサービスを構築します。詳細は、「Ant build.xmlファイルでの<jmstransportservice>子要素の使用」を参照してください。

WSDL

JMSトランスポート・プロパティ要素を含むWSDLからWebサービスを作成します(「WSDLでのJMSトランスポート・プロパティの構成」を参照)。

管理コンソール

WebLogic Server管理コンソールを使用して、デプロイされたWebサービスのJMSトランスポート・プロパティを構成します(「管理コンソールを使用したJMSトランスポートの構成」を参照)。

weblogic-webservices.xmlデプロイメント記述子の<soapjms-service-endpoint-address>要素

weblogic-webservices.xmlデプロイメント記述子は手動で更新できます。ただしこれはお薦めしません。<soapjms-service-endpoint-address要素の詳細は、『Oracle WebLogic Server WebLogic Webサービス・リファレンス』のWebLogic Webサービス・デプロイメント記述子のスキーマ・リファレンスに関する項を参照してください。


設計時および実行時におけるWebサービスまたはクライアントでのJMSトランスポート・プロパティ構成の優先順位を次にまとめます。

  • 設計時のWebサービス(優先度の高い方から)

    • jwsc Antタスクの<jws>要素内の<jmstransportservice>子要素

    • @JMSTransportServiceアノテーション

  • 実行時のWebサービス(優先度の高い方から)

    • 管理コンソール

    • weblogic-webservices.xmlデプロイメント記述子の<soapjms-service-endpoint-address>要素

    • @JMSTransportServiceアノテーション

  • 設計時のクライアント(優先度の高い方から)

    • clientgenの<jmstransportclient>子要素

    • WSDLで定義されたJMSトランスポート・プロパティ

  • 実行時のクライアント(優先度の高い方から)

    • JMS URIサービス・エンドポイント・アドレス

    • JMSTransportClientFeature API

    • @JMSTransportClientアノテーション

管理コンソールを使用したJMSトランスポートの構成

JMSトランスポートを有効にしてWebサービスをデプロイしたら、WebLogic Server管理コンソールを使用してJMSトランスポート・プロパティを構成できます。

WebLogic Server管理コンソールを使用してJMSトランスポート・プロパティを構成するには:

  1. 『Oracle WebLogic Server WebLogic Webサービスの理解』の管理コンソールの呼出しに関する項の説明に従って、WebLogic Server管理コンソールを呼び出します。

  2. 左側のナビゲーション・ペインで、「デプロイメント」を選択します。

  3. 「デプロイメント」表でWebサービスの名前をクリックします。

  4. 「構成」タブ、「ポート・コンポーネント」タブの順に選択します。

  5. 「ポート」表でWebサービスのエンドポイントの名前をクリックします。

  6. 「SOAP over JMSトランスポート」タブを選択します。

  7. 必要に応じて、SOAP over JMSトランスポート構成のカスタマイズをクリックし、指示に従ってデプロイメント・プランを保存します。

  8. 「JMSトランスポート・プロパティの構成」の説明に従って、SOAP over JMSトランスポート・プロパティを編集します。

  9. 「保存」をクリックします。

詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのSOAP over JMSトランスポートの構成に関する項を参照してください。

WLSTを使用したJMSトランスポートの構成

WLSTを使用してJMSトランスポートを構成することもできます。WLSTを使用したドメインの拡張の詳細は、『WebLogic Scripting Toolの理解』の既存ドメインの構成に関する項を参照してください。

JMS URIの構成

接続トランスポートとしてSOAP over JMSを使用するようにWebLogic Webサービスを構成した場合、Webサービスの生成済WSDLで対応するポートに対して指定されたエンドポイント・アドレスのURLでは、http://ではなくjms:が使用されます。

JMS URIフォーマットは次のとおりです。

jms:lookupVariant:destinationName[?targetService=value[&property=value][&property=value]...
]

JMS URIは次のように構成されます。

  • 接頭辞jms:

  • ルックアップ・バリアント・タイプ(jndiに設定する必要があります)

  • JMS宛先名(destinationName)

  • JMSエンドポイント情報の指定に使用するプロパティと値のペアのリストが含まれる問合せ文字列。Webサービスのポート・コンポーネント名を定義するには、targetServiceプロパティを指定する必要があります。

    その他の有効なプロパティは次のとおりです。

    • bindingVersion

    • deliveryMode

    • deliveryType

    • jndiConnectionFactoryName

    • jndiContextParameter

    • jndiInitialContextFactory

    • jndiURL

    • messageType

    • priority

    • replyToName

    • timeToLive

JMSエンドポイント・アドレスには、lookupVariantdestinationNameおよびtargetServiceのJMSプロパティが必要です。

JMS URIを構成するJMSトランスポート・プロパティの詳細は、表17-6を参照してください。必要に応じて、JMSトランスポートを有効にする際に、表17-7で定義するいずれかのメソッドを使用して、JMSトランスポート・プロパティを構成できます。

例:

JMSエンドポイント・アドレスの例を次に示します。この例では、JMS宛先はmyQueue、Webサービスのポート・コンポーネントの名はWarehouseServicePortです。

jms:jndi:myQueue?targetService=WarehouseServicePort

次の例は、レスポンス・メッセージが送信されるJMS宛先のJNDI名を指定するreplyToNameプロパティが設定された、同じJMSエンドポイント・アドレスを示しています。

jms:jndi:myQueue?targetService=WarehouseServicePort&replyToName=myReplyToQueue

次の例は、jndi-com.acme.jndi.enable.tracingjndi-java.naming.referralなど、追加のJNDI環境プロパティを指定する方法を示しています。

jms:jndi:myQueue?targetService=WarehouseServicePort&jndi-com.acme.jndi.enable.tracing=true&jndi-java.naming.referral=ignore

JMSリクエストURIの構成

各JMSトランスポート・メッセージには、JMS URIから派生する、SOAPJMS_requestURIとして定義されるメッセージ・プロパティがあります。JMSリクエストURIは、JMS URIを使用し、問合せパラメータを削除して構成します。

JMSリクエストURIフォーマットは次のとおりです。

jms:lookupVariant:destinationName

JMSリクエストURIは次のように構成されます。

  • 接頭辞jms:

  • ルックアップ・バリアント・タイプ(jndiに設定する必要があります)

  • JMS宛先名(destinationName)

JMSリクエストURIを構成するJMSトランスポート・プロパティの詳細は、表17-6を参照してください。必要に応じて、JMSトランスポートを有効にする際に、表17-7で定義するいずれかのメソッドを使用して、JMSトランスポート・プロパティを構成できます。

例:

JMSエンドポイント・アドレスの例を次に示します。この例で、JMS宛先はmyQueueです。

jms:jndi:myQueue

WS-Addressingヘッダーの構成

SOAP over JMSトランスポートを使用するWebサービスおよびクライアントは、リクエストおよびレスポンス・メッセージのWS-AddressingヘッダーToおよびReplyToに、JMS URIから派生する値を移入します。

WS-Addressingヘッダー・フォーマットは次のとおりです。

jms:lookupVariant:destinationName?targetService=value

WS-Addressingヘッダーを構成するJMSトランスポート・プロパティの詳細は、表17-6を参照してください。必要に応じて、JMSトランスポートを有効にする際に、表17-7で定義するいずれかのメソッドを使用して、JMSトランスポート・プロパティを構成できます。

例:

SOAPリクエスト・メッセージのWS-Addressingヘッダーの例を次に示します。

<S:Header>  
   <To xmlns="http://www.w3.org/2005/08/addressing">
      jms:jndi:myQueue?targetService=WarehouseService
   </To> 
   <Action xmlns="http://www.w3.org/2005/08/addressing">
      http://www.oracle.com/samples/ShipGoodsRequest
   </Action>  
   <ReplyTo xmlns="http://www.w3.org/2005/08/addressing">  
      <Address>jms:jndi:myReplyToQueue?targetService=WarehouseService</Address>
   </ReplyTo>  
   <MessageID xmlns="http://www.w3.org/2005/08/addressing">
      uuid:3b9e7b20-3aa0-4a4a-9422-470fa7b9ada1
   </MessageID>  
</S:Header>  

SOAPレスポンス・メッセージのWS-Addressingヘッダーの例を次に示します。

<S:Header>
   <To xmlns="http://www.w3.org/2005/08/addressing">
      jms:jndi:myReplyToQueue?targetService=WarehouseService
   </To>  
   <Action xmlns="http://www.w3.org/2005/08/addressing">
      http://www.oracle.com/samples/ShipGoodsResponse
   </Action>  
   <MessageID xmlns="http://www.w3.org/2005/08/addressing">
      uuid:9d0be951-79fc-4a56-b3e6-4775bde2bd82
   </MessageID>  
   <RelatesTo xmlns="http://www.w3.org/2005/08/addressing">
      uuid:3b9e7b20-3aa0-4a4a-9422-470fa7b9ada1
   </RelatesTo>  
</S:Header> 

JMSレスポンス・キューの構成

双方向動作の場合、デフォルトで一時レスポンス・キューが生成されます。デフォルトの一時レスポンス・キューを使用することで、必要となる構成が最小限に抑えられます。ただし、サーバーの障害時には、レスポンス・メッセージが失われる可能性があります。

サーバーの再起動後にも使用可能な、永続JMSレスポンス・キューを構成できます。永続JMSレスポンス・キューには、次の利点があります。

  • サーバーの再起動に続いてレスポンス・メッセージを確実にリストアできます。

  • パフォーマンスを向上させ、最初の呼出しで一時キューの作成に必要なオーバーヘッドを回避します。

  • サービス品質(QoS)の向上のためのキューの構成が可能です。

次の方法(優先度の高い順にリスト)のいずれかを使用して、JMSレスポンス・キューを構成できます。


注意:

destinationNameプロパティが匿名に設定されている場合(JMSトランスポートでは、これはサポートされていません)は、一時レスポンス・キューが使用されます。

JMSレスポンス・キューは、デフォルトで、JMSトランスポート・サービス呼出しのフォルト・キューとして使用されます。faultToヘッダーは、AsyncClientTransportFeatureを使用して構成できます(「非同期レスポンス・エンドポイントのReplyToヘッダーとFaultToヘッダーの構成」を参照)。

JMSメッセージ・タイプの構成

リクエスト・メッセージで使用する次のメッセージ・タイプのいずれかを構成できます。

  • com.oracle.webservices.api.jms.JMSMessageType.BYTES: JMSメッセージの本体はバイナリ・データです。これがデフォルトです。

  • com.oracle.webservices.api.jms.JMSMessageType.TEXT: JMSメッセージの本体は文字列データです。

messageTypeプロパティは、表17-8で定義されているいずれかの構成メソッドを使用して構成できます。

Webサービスでは、レスポンスの送信時に同じメッセージ・タイプを使用します。リクエストはBYTESとして受信され、応答はBYTESとして送信されます。

messageTypeプロパティをTEXTに設定する場合、次の点に注意してください。

  • 大きなペイロードの場合、メモリー内表現のデータ要件が大きくなるため、TEXTメッセージのメモリー要件は、BYTESメッセージよりはるかに大きくなります。

  • バイナリ添付ファイルのあるメッセージはbase64エンコードされる必要があり、これによってもメッセージのサイズが大幅に増加する可能性があります。

WSDLファイルへのHTTPアクセスの構成

デフォルトで、デプロイされたWebサービスのWSDLは、依然としてHTTPを使用してアクセス可能です。WSDLファイルへのアクセスを無効にする場合(特に、ファイアウォールの外でWebサービスにアクセスできる場合)は、次のいずれかを実行します。

  • <jws>要素の<jmstransportservice>子要素のenableHttpWsdlAccess属性を使用します(「Ant build.xmlファイルでの<jmstransportservice>子要素の使用」を参照)。

  • @JMSTransportServiceアノテーション(「@JMSTransportServiceアノテーションの使用」を参照)。

  • Webサービスをデプロイした後に、WebLogic Server管理コンソールを使用してWSDLファイルへのアクセスを無効にします。この場合、構成情報は、アノテーションではなくデプロイメント・プラン内に格納されます。

    このタスクをWebLogic Server管理コンソールを使用して実行する場合は、デプロイしたWebサービスの「構成」→「全般」ページに移動し、「動的WSDLの表示を有効化」チェック・ボックスの選択を解除します。この変更を有効にするには、構成をデプロイメント・プランに保存した後に、Webサービス(またはそのエンタープライズ・アプリケーション)を再デプロイ(更新)する必要があります。

SOAP Over JMSトランスポートの監視

次の観点から、SOAP over JMSトランスポートを使用するWebサービスを監視できます。

  • Webサービス・パフォーマンスの監視。次を参照してください。

    • Oracle WebLogic Server管理コンソール・オンライン・ヘルプのWebサービスの監視に関する項

    • 『Webサービスの管理』のWebサービスの監視と監査に関する項

  • JMS宛先メトリックの監視(『Oracle WebLogic Server JMSリソースの管理』のJMS統計の監視とメッセージの管理に関する項を参照)。