| Oracle® Fusion Middleware Oracle WebLogic Server JAX-WS Webサービスの開発 12c (12.2.1.1.0) E77380-02 |
|
![]() 前 |
![]() 次 |
注意:
SOAP over JMSトランスポートは、Webサービス機能のうち、信頼性のあるメッセージングおよびHTTPトランスポート固有のセキュリティとは互換性がありません。
この章の内容は次のとおりです:
通常、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-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レスポンス・エンドポイントおよびリスナーが削除されます。
JMS宛先にリクエスト・メッセージを送信する前に、クライアントは表17-1で定義しているJMSメッセージ・プロパティを設定します。
表17-1 リクエスト・メッセージで定義されるJMSメッセージ・プロパティ
| JMSメッセージ・プロパティ | 説明 |
|---|---|
|
SOAP JMSバインディングのバージョン。このリリースでは、この値は |
|
メッセージのMIMEコンテンツ・タイプ。 |
|
JMSリクエストURI。値の構成方法の詳細は、「JMSリクエストURIの構成」を参照してください |
|
リクエストの目的を定義するSOAPアクション。 |
|
Webサービスのポート・コンポーネント名。 |
|
リクエスト・メッセージで使用するメッセージ・タイプ。 |
|
JMSメッセージを一意に識別し、レスポンス・メッセージとリクエストとの相互関連付けに使用されるID。レスポンス・メッセージの |
|
実行コンテキスト識別子(ECID)、ラッパー・コードおよびエンコーディングの詳細。この内容は、HTTPヘッダーに指定するものと似ており、クライアントのみに必要となります。 |
JMS宛先にレスポンス・メッセージを送信する前に、サービスは表17-1で定義しているJMSメッセージ・プロパティを設定します。
表17-2 レスポンス・メッセージで定義されるJMSメッセージ・プロパティ
| JMSメッセージ・プロパティ | 説明 |
|---|---|
|
SOAP JMSバインディングのバージョン。このリリースでは、この値は |
|
メッセージのMIMEコンテンツ・タイプ。 |
|
リクエスト・メッセージとレスポンス・メッセージの相互関連付けに使用されるID。 |
|
JMSメッセージを一意に識別し、レスポンス・メッセージとリクエストとの相互関連付けに使用されるID。 |
表17-3は、WebLogic ServerドメインでJMSトランスポートによりデフォルトで使用されるリソースを示します。
表17-3 JMSトランスポートにより使用されるデフォルトのリソース
| リソース名(デフォルト) | リソース・タイプ | 説明 |
|---|---|---|
|
JMSサーバー |
JMSサーバー管理コンテナ。 JMSサーバーを手動で構成するには、『Oracle WebLogic Server JMSリソースの管理』のJMS構成に関する項を参照してください。 |
|
ファイル・ストア |
I/O操作を処理し、データを保存したり、物理ストレージ(ファイル、DBMSなど)から取得したりするためにWeb Serverが使用するファイル・ストアまたは物理ストア。 ファイル・ストアを手動で構成するには、WebLogic永続ストアの管理を参照してください。 |
|
JMSモジュール |
SOAP over JMSトランスポートに必要なJMSリソースを定義するJMSモジュール。 JMSモジュールを手動で構成するには、『Oracle WebLogic Server JMSリソースの管理』のJMS構成に関する項を参照してください。 |
|
JMSサブデプロイメント |
JMSリソースのターゲットを JMSサブデプロイメントを手動で構成するには、『Oracle WebLogic Server JMSリソースの管理』のJMS構成に関する項を参照してください。 |
|
JMS接続ファクトリ |
SOAP over JMSトランスポートの接続の作成に使用するデフォルトのJMS接続ファクトリ。
|
|
JMSキュー |
デフォルトのJMSリクエスト・キュー。
|
|
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トランスポートのサポートに必要なリソースを手動で構成するには、次のいずれかの方法を使用します。
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ベースの開発環境を設定済であり、かつ 詳細は、JAX-WS Webサービスの開発を参照してください。 |
2 |
必要なJMSコンポーネント用にWebLogic Serverドメインを構成します。 |
「JMSトランスポート用のWebLogic Serverドメインの構成」を参照してください。 |
3 |
JWSファイルに |
この手順はオプションです。JWSファイルに 「@JMSTransportServiceアノテーションの使用」を参照してください。 |
4 |
|
この手順は、手順3で 詳細は、「Ant build.xmlファイルでの<jmstransportservice>子要素の使用」を参照してください。 |
5 |
|
たとえば、 prompt> ant build-service 「jwsc WebLogic WebサービスAntタスクの実行」を参照してください |
6 |
WebサービスをWebLogic Serverにデプロイします。 |
「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください |
JMSトランスポートを使用してWebサービスを呼び出すようにクライアント・アプリケーションを更新する方法については、「JMSトランスポートを使用したWebLogic Webサービスの呼出し」を参照してください。
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) { ... } }
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に関する項を参照してください。
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つの作業を行う必要があります。
「JMSトランスポートを使用するためのWSDLの更新」を参照してください。 |
4 |
WSDLファイルに対して |
たとえば、 prompt> ant generate-from-wsdl 「wsdlc WebLogic WebサービスAntタスクの実行」を参照してください |
5 |
途中まで作成済みのJWSファイルを更新します。 |
手順3で、JMSトランスポートを使用するようにWSDLを更新した場合、JWSファイルには、JMSトランスポートを定義する
|
6 |
|
詳細は、「Ant build.xmlファイルでの<jmstransportservice>子要素の使用」を参照してください。 |
7 |
JWSファイルに対して |
「jwsc WebLogic WebサービスAntタスクの実行」を参照してください |
8 |
WebサービスをWebLogic Serverにデプロイします。 |
「WebLogic Webサービスのデプロイとアンデプロイ」を参照してください |
JMSトランスポートを使用してWebサービスを呼び出すようにクライアント・アプリケーションを更新する方法については、「JMSトランスポートを使用したWebLogic Webサービスの呼出し」を参照してください。
JMSトランスポートを使用するようにWSDLを更新するには、JMSトランスポート情報を定義する<wsdl:binding>定義を追加する必要があります。複数のトランスポート・オプションを指定するかどうかにより、次のいずれかの方法で定義を追加できます。
既存のHTTP <wsdl:binding>定義を編集する。
WSDLで複数のトランスポート・オプション(HTTPやJMSトランスポートなど)を指定する場合は、既存のHTTP <wsdl:binding>定義をコピーし、JMSトランスポートを使用するように編集する。
必要に応じて、バインディングまたはJMS URIレベルでJMSトランスポート・プロパティを構成できます。
次の各項では、JMSトランスポートを使用するためにWSDLを更新する方法について説明します。
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:binding>要素: バインディングを使用するすべてのポートに伝播します。
<wsdl:service>要素: すべてのポートに伝播します。
<wsdl:port>要素—ポートによってのみ使用されます。
JMS URI(「JMS URIの構成」を参照)。
具体的には、WSDLで次のJMSトランスポート・プロパティを構成できます。プロパティの詳細は、表17-6を参照してください。
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>
...
例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&jndiInitialContextFactory=weblogic.jndi.WLInitialContextFactory&jndiConnectionFactoryName=weblogic.jms.XAConnectionFactory"/>
</port>
</service>
</definitions>
HTTPトランスポートを使用して記述したときと同様にして、JMSトランスポートを使用し、Webサービスを呼び出すクライアント・アプリケーションを記述します。JMSトランスポートの場合、クライアントはSOAPリクエスト・メッセージをJMSリクエストの宛先に送信し、JMSレスポンスの宛先からSOAPレスポンス・メッセージを受信します。Webサービスの呼出しの例は、JAX-WS Webサービス・クライアントの開発例を参照してください。
次のいずれかの方法を使用して、Webサービス・クライアントでJMSトランスポートを有効にし、必要に応じて構成します。
clientgen Antタスクの<jmstransportclient>要素を使用して、JMSトランスポートを有効にして自動的にクライアント・アーティファクトを生成します(「Ant build.xmlファイルでの<jmstransportclient>要素の使用」を参照)。
次のいずれかの方法を使用して、JMSトランスポートを構成するように、Webサービス・クライアントを更新します。
@com.oracle.webservices.api.jms.JMSTransportClientアノテーションを追加する(「@JMSTransportClientアノテーションの使用」を参照)。
com.oracle.webservices.api.jms.JMSTransportClientFeature機能クライアントAPIを追加する(「JMSTransportClientFeatureクライアントAPIの使用」を参照)。
同期クライアントのターゲット・エンドポイント・アドレスとしてJMS URIを構成する(「ターゲット・エンドポイント・アドレスとしてのJMS URIの構成」を参照)。
JMSトランスポートを有効化および構成するように、非同期Webサービス・クライアントを更新します(「AsyncClientTransportFeatureを使用した非同期クライアントの構成」を参照)。
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に関する項を参照してください。
clientgenを実行してWSDLファイルからWebサービス・クライアント・アーティファクトを生成すると、ビルド・ファイルで<jmstransportclient>を使用してJMSトランスポートが有効化されている場合、生成されたクライアント・プロキシに自動的に@com.oracle.webservices.api.jms.JMSTransportClientアノテーションが含まれます(「Ant build.xmlファイルでの<jmstransportclient>要素の使用」を参照)。
clientgenにより自動的に@JMSTransportClientアノテーションが構成されない場合は、これを手動でファイルに追加できます。
必要に応じて、@JMSTransportClientアノテーションを使用して、次のJMSトランスポート・プロパティを構成できます。プロパティの詳細は、表17-6を参照してください。
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 { ... }
com.oracle.webservices.api.jms.JMSTransportClientFeatureクライアントAPIを使用して、Webサービス・クライアントでJMSトランスポートを構成できます。
必要に応じて、com.oracle.webservices.api.jms.JMSTransportClientFeatureを使用して、次のJMSトランスポート・プロパティを構成できます。プロパティの詳細は、表17-6を参照してください。
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を指定して、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 ); ...
非同期クライアント・トランスポート機能(「スケーラブルな非同期JAX-WSクライアントの開発(非同期クライアント・トランスポート)」を参照)は、スケーラブルな非同期クライアントのプログラミング・モデルを提供します。
非同期クライアントに対してSOAP over JMSトランスポートを有効にするには:
例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リスナーがデプロイされます。クライアントにアタッチされると、AsyncClientTransportFeatureインスタンスはすべてのクライアント呼出しのレスポンス・エンドポイントを決定します。ターゲットのエンドポイント・アドレス内のreplyToNameプロパティおよびJMSTransportClientFeatureは無視されます。
例17-13は、AsyncClientTransportFeatureを使用する非同期クライアントからの抜粋を示しています。関連するコードについては太字で示されています。この例では、replyToおよびfaultToアドレスが定義され、クライアントに渡されます。
JMSトランスポートを有効にする際、必要に応じて、JMSトランスポート・プロパティを構成できます。次の各項を参照してください。
表17-6 JMSトランスポート構成プロパティの説明
| 名前 | 説明 | サポートされる構成方法 |
|---|---|---|
|
JMSプロバイダに渡されるアクティブ化構成プロパティ。各プロパティは、 例: このプロパティでサポートされるアクティブ化構成プロパティのリストは、表17-7を参照してください。 デフォルト値は |
|
|
SOAP JMSバインディングのバージョン。このリリースでは、この値は この値は、 |
|
|
リクエスト・メッセージが永続的かどうかを示す配信モード。有効な値は、 デフォルト値は |
|
|
宛先キューまたはトピックのJNDI名。 デフォルト値は |
表17-8内のすべての構成方法 |
|
宛先タイプ。有効な値は、 デフォルト値は この値は、該当する場合、 トピックは、一方向通信でのみサポートされます。 |
表17-8内のすべての構成方法 |
|
JMSトランスポートが有効かどうかを指定するBooleanフラグ。この値のデフォルトは |
|
|
HTTPによりWSDLを公開するかどうかを指定するBooleanフラグ。このフラグのデフォルトは |
|
|
JMSヘッダー・プロパティ。各プロパティは、 例: デフォルト値は |
|
|
JMSメッセージ・プロパティ。各プロパティは、 例: デフォルト値は |
|
|
JMS接続の確立に使用される接続ファクトリのJNDI名。 デフォルト値は |
表17-8内のすべての構成方法 |
|
JNDIプロパティ。各プロパティは、 JNDIプロバイダの デフォルト値は |
表17-8内のすべての構成方法 |
|
JNDIルックアップに使用される最初のコンテキスト・ファクトリ・クラス名。この値は、 デフォルト値は |
表17-8内のすべての構成方法 |
|
JNDIプロバイダのURL。 デフォルト値は この値は、 |
表17-8内のすべての構成方法 |
|
指定された宛先名の参照に使用されるメソッド。JMSトランスポートをサポートするには、この値を |
なし(変更できません) |
|
リクエストされた宛先ごとに1つのリスニング・メッセージドリブンBean (MDB)を作成するかどうかを指定するBooleanフラグ。この値のデフォルトは
|
|
|
リクエスト・メッセージで使用するメッセージ・タイプ。有効な値は、 デフォルト値は メッセージ・タイプの構成の詳細は、「JMSメッセージ・タイプの構成」を参照してください |
表17-8内のすべての構成方法 |
|
リクエストおよびレスポンス・メッセージに関連付けられたJMS優先度。この値は、0 (最低優先度)から9 (最高優先度)までの正の整数で指定します。デフォルト値は |
表17-8内のすべての構成方法 |
|
レスポンス・メッセージが送信されるJMS宛先のJNDI名。 双方向動作の場合、デフォルトで一時レスポンス・キューが生成されます。デフォルトの一時レスポンス・キューを使用することで、必要となる構成が最小限に抑えられます。ただし、サーバーの障害時には、レスポンス・メッセージが失われる可能性があります。 このプロパティにより、クライアントは、応答の受取りにデフォルトの一時キューまたはトピックを使用するのではなく、事前に定義された永続キューまたはトピックを使用できます。JMSレスポンス・キューの構成の詳細は、「JMSレスポンス・キューの構成」を参照してください この値は、リクエスト・メッセージの デフォルト値は |
表17-8内のすべての構成方法 |
|
リスニングMDBの実行に使用されるプリンシパル。 デフォルト値は |
|
|
リスニングMDBの実行に使用されるロール。 デフォルト値は |
|
|
Webサービスのポート・コンポーネント名。この値は、サービス実装により、サービス・リクエストのディスパッチに使用されます。指定されない場合、WSDLまたは この値は、 デフォルト値は |
|
|
リクエスト・メッセージの存続期間(ミリ秒単位)。0の値は、存続期間が無限であることを示します。指定されない場合、JMSで定義されているデフォルト値、 サービス側では、 |
表17-8内のすべての構成方法 |
次の表は、表17-6のactivationConfigプロパティでサポートされるアクティブ化プロパティを示しています。アクティブ化プロパティを使用したMDBの調整については、『Oracle WebLogic Serverのパフォーマンスのチューニング』のメッセージドリブンBeanの調整に関する項を参照してください。
表17-7 activationConfigプロパティでサポートされるアクティブ化プロパティ
| 名前 | 説明 |
|---|---|
|
メッセージが受信および処理されたことをJMSプロバイダに通知する方法を制御する確認応答モード。有効な値は次のとおりです。
コンテナ管理トランザクションを使用する場合は、確認応答モードは無視されます。(この場合、確認応答はトランザクションのコンテキスト内で実行されます。) |
|
キューおよびトピックの作成にMDBが使用するJMS接続ファクトリのJNDI名。この値のデフォルトは |
|
WebLogic Server JNDIツリーにデプロイされている実際のJMSキューまたはトピックにMDBを関連付けるために使用するJNDI名。 |
|
JMS宛先のタイプ。有効な値は、 |
|
MDBのワーク・マネージャ。この値のデフォルトは |
distributedDestinationConnection |
同一クラスタ内のWebLogic JMS分散宛先(トピックまたはキュー)にアクセスするMDBが、すべての分散宛先メンバーから消費するか、または現在のWebLogic Serverインスタンスのローカル分散宛先メンバーのみから消費するかを指定する接続設定。有効な値は次のとおりです。
|
|
MDBがアンデプロイまたは削除されるときに恒久トピック・サブスクリプションが自動的に削除されるようにするかどうかを指定するフラグ。この値のデフォルトは |
|
接続ファクトリの作成にEJBコンテナが使用する初期コンテキスト・ファクトリ。この値のデフォルトは |
|
EJBコンテナがJMSリソースの停止を検出したときにMDBのJMS接続を中断する初期秒数。この値は任意の整数値に設定でき、デフォルトは |
|
JMS宛先に接続するときのMDBのクライアントID。この値は、JMSトピックへの恒久サブスクリプションに使用されます。 |
|
アクセスできなくなっているJMS宛先にEJBコンテナが再接続を試みる間隔(秒単位)。この値は任意の整数値に設定でき、デフォルトは |
|
空きプール内の非アクティブMDBの最大数。この値は任意の正の整数値または0に設定できます。この値のデフォルトは |
|
MDBのトランザクションに入れることができるメッセージの最大数。この値は任意の正の整数値または0に設定できます。この値のデフォルトは |
|
EJBコンテナがJMSリソースの停止を検出したときにMDBのJMS接続を中断する最大秒数。この値は任意の整数に設定でき、デフォルトは |
|
ヘッダー・フィールド参照およびプロパティ参照ごとに、受信するメッセージを指定するためにクライアントによって使用される文字列。ヘッダーとプロパティ値が指定したセレクタに一致するメッセージのみが送信されます。この値は、メッセージ・ヘッダー、またはメッセージ・プロパティを使用した条件式に設定できます。この値のデフォルトは |
providerURL |
|
|
JMSトピック・サブスクリプションが |
|
トピック・メッセージの配信モード。有効な値は、 |
|
メソッドの呼出しをエンタープライズBeanのビジネス・メソッドに委託するときにコンテナがトランザクションの境界をどのように管理するのかを指定するトランザクション設定。有効な値は、 |
|
EJBのコンテナで開始されたトランザクションの最長継続時間(秒単位)。この時間を超えると、トランザクションはロールバックされ、サービスはSOAPフォルトを戻します。この値は任意の正の整数または0に設定できます。 トランザクション・タイムアウトが指定されていないか、0に設定されている場合、ドメインに構成されたトランザクション・タイムアウトが使用されます。ドメインにタイムアウトが構成されていない場合、デフォルトは |
|
WebLogic Serverバージョン8.1スタイルのポーリングの後方互換性をサポートするかどうかを指定するフラグ。有効な値は、 |
必要に応じて、JMSトランスポートを有効にする際に、表17-8で定義するいずれかのメソッドを使用して、JMSトランスポート・プロパティを構成できます。
表17-8 JMSプロパティの構成に使用されるメソッド
| 構成メソッド | 説明 |
|---|---|
|
Webサービス・クライアントを作成し、JMSトランスポート・プロパティを引数として |
ターゲット・サービス・エンドポイント・アドレス |
ターゲット・サービス・エンドポイント・アドレスを構築し、JMSトランスポート・プロパティを問合せ文字列の一部として含めます。詳細は、「JMS URIの構成」を参照してください |
|
Webサービス・クライアントを作成し、JMSトランスポート・プロパティを属性としてJWSファイルの |
|
Webサービス・クライアントを作成し、JMSトランスポート・プロパティを属性としてJWSファイルの |
|
|
|
|
WSDL |
JMSトランスポート・プロパティ要素を含むWSDLからWebサービスを作成します(「WSDLでのJMSトランスポート・プロパティの構成」を参照)。 |
管理コンソール |
WebLogic Server管理コンソールを使用して、デプロイされたWebサービスのJMSトランスポート・プロパティを構成します(「管理コンソールを使用したJMSトランスポートの構成」を参照)。 |
|
|
設計時および実行時における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トランスポートを有効にしてWebサービスをデプロイしたら、WebLogic Server管理コンソールを使用してJMSトランスポート・プロパティを構成できます。
WebLogic Server管理コンソールを使用してJMSトランスポート・プロパティを構成するには:
詳細は、Oracle WebLogic Server管理コンソール・オンライン・ヘルプのSOAP over JMSトランスポートの構成に関する項を参照してください。
WLSTを使用してJMSトランスポートを構成することもできます。WLSTを使用したドメインの拡張の詳細は、『WebLogic Scripting Toolの理解』の既存ドメインの構成に関する項を参照してください。
接続トランスポートとして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エンドポイント・アドレスには、lookupVariant、destinationNameおよび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.tracingやjndi-java.naming.referralなど、追加のJNDI環境プロパティを指定する方法を示しています。
jms:jndi:myQueue?targetService=WarehouseServicePort&jndi-com.acme.jndi.enable.tracing=true&jndi-java.naming.referral=ignore
各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
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レスポンス・キューには、次の利点があります。
サーバーの再起動に続いてレスポンス・メッセージを確実にリストアできます。
パフォーマンスを向上させ、最初の呼出しで一時キューの作成に必要なオーバーヘッドを回避します。
サービス品質(QoS)の向上のためのキューの構成が可能です。
次の方法(優先度の高い順にリスト)のいずれかを使用して、JMSレスポンス・キューを構成できます。
AsyncClientTransportFeatureを使用してaddressまたはReplyToヘッダーを構成する(「非同期クライアント・トランスポート機能の有効化と構成」を参照)。
次のいずれかの方法を使用してreplyToNameプロパティを構成する。
clientgenの<jmstransportclient>要素(「Ant build.xmlファイルでの<jmstransportclient>要素の使用」を参照)。
ターゲット・エンドポイント・アドレス(JMSトランスポート構成プロパティの説明を参照)。
JMSTransportClientFeature(「JMSTransportClientFeatureクライアントAPIの使用」を参照)。
@JMSTransportClientアノテーション(「@JMSTransportClientアノテーションの使用」を参照)。
注意:
destinationNameプロパティが匿名に設定されている場合(JMSトランスポートでは、これはサポートされていません)は、一時レスポンス・キューが使用されます。
JMSレスポンス・キューは、デフォルトで、JMSトランスポート・サービス呼出しのフォルト・キューとして使用されます。faultToヘッダーは、AsyncClientTransportFeatureを使用して構成できます(「非同期レスポンス・エンドポイントのReplyToヘッダーとFaultToヘッダーの構成」を参照)。
リクエスト・メッセージで使用する次のメッセージ・タイプのいずれかを構成できます。
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エンコードされる必要があり、これによってもメッセージのサイズが大幅に増加する可能性があります。
デフォルトで、デプロイされたWebサービスのWSDLは、依然としてHTTPを使用してアクセス可能です。WSDLファイルへのアクセスを無効にする場合(特に、ファイアウォールの外でWebサービスにアクセスできる場合)は、次のいずれかを実行します。
<jws>要素の<jmstransportservice>子要素のenableHttpWsdlAccess属性を使用します(「Ant build.xmlファイルでの<jmstransportservice>子要素の使用」を参照)。
@JMSTransportServiceアノテーション(「@JMSTransportServiceアノテーションの使用」を参照)。
Webサービスをデプロイした後に、WebLogic Server管理コンソールを使用してWSDLファイルへのアクセスを無効にします。この場合、構成情報は、アノテーションではなくデプロイメント・プラン内に格納されます。
このタスクをWebLogic Server管理コンソールを使用して実行する場合は、デプロイしたWebサービスの「構成」→「全般」ページに移動し、「動的WSDLの表示を有効化」チェック・ボックスの選択を解除します。この変更を有効にするには、構成をデプロイメント・プランに保存した後に、Webサービス(またはそのエンタープライズ・アプリケーション)を再デプロイ(更新)する必要があります。