この章では、Webサービスの代替のトランスポート・メカニズムとしてJMSを使用する方法について説明します。この章の項目は、次のとおりです。
Oracle Application Server Web Servicesでは、トランスポート・メカニズムとしてJMSを使用できます。これにより、一方向(リクエスト)と双方向(リクエストおよびレスポンス)のどちらでもメッセージを送信できます。一方向リクエスト・メッセージでは、リクエスト・メッセージがJMSキューに到達すると、Webサービス・クライアントによりブロックが解除されます。双方向リクエストおよびレスポンス・メッセージでは、レスポンス・メッセージが受信されるまでWebサービス・クライアントがブロックされます。
|
関連資料: 一方向および二方向メッセージの例は、次のリソースを参照してください。
|
XMLメッセージ交換用のSOAPプロトコルは、特定のトランスポート・メカニズムに依存しません。各メカニズムにはそれぞれ異なる利点があります。たとえば、HTTPは、Web Service Interoperability(WS-I)によって開発された標準に準拠しているため、他のWebサービスとの相互運用性が高いという利点があります。これに対し、JMSは非同期メッセージングをサポートしているため、信頼性とスケーラビリティを高められるのが利点です。
トランスポート・メカニズムとしてJMSを使用した場合、サービスやクライアントによって送信されたメッセージはキューに置かれるとともに、オプションで指定すれば記憶域にも格納されるため、信頼性が向上します。サービスとクライアント間の通信が失敗した場合には、メッセージを記憶域から取得して再送信できます。
JMSは、Webサービスの非同期起動をサポートしています。非同期起動を使用した場合、クライアントは応答を待っている間に別のタスクを行うことができます。たとえば、リクエストを送信した後、そのリクエストのステータスを参照するためのポーリングを実行したり、別のレスポンスを取得したりできます。
JMSに実装されているスケーラビリティは、ハイトラフィックなサービスにも対応しています。これは、スケーラビリティのサポートに制限があるHTTPに比べて有利な点です。
トランスポート・メカニズムとしてのJMS実装の一般的な手順
トランスポート・メカニズムとしてJMSを有効化するには、次の一般的な手順に従います。
SOAPメッセージの送信および受信に使用されるキューを設定します。この手順の詳細は、「JMSキューの設定方法」で説明しています。
SOAPトランスポートのJMSキューの情報を指定するWebサービスをアセンブルします。
ボトムアップ方式でアセンブルする場合は、JMSトランスポートの詳細を含むディスクリプタを渡すか、コマンドラインまたはAntタスクでJMSトランスポート・パラメータを宣言します。この手順の詳細は、「JMSトランスポートを使用するWebサービスのボトムアップ方式でのアセンブル方法」で説明されています。
トップダウン方式でアセンブルする場合は、WSDLを編集してJMSアドレスを追加します。この手順の詳細は、「JMSトランスポートを使用するWebサービスのトップダウン方式でのアセンブル方法」で説明されています。
プロキシをアセンブルします(必要な場合)。プロキシをアセンブルする際には、戻りキューを特定する必要があります。戻りキューは、Webサービス起動へのレスポンスを受信するJMSキューです。コマンドラインまたはAntタスクで戻りキューを宣言することで、これを実行できます。
この手順の詳細は、「JMSをトランスポートとして使用するプロキシのアセンブル方法」で説明されています。
次の手順では、トランスポート・メカニズムがJMSの場合に、Webサービス・クライアントとOracleAS Web Services間でデータがどのように渡されるかを説明します。手順に出てくるWSDL要素およびWebServicesAssemblerの引数は、この章で後から説明します。図8-1に、手順の順序を示します。
Webサービス・クライアントでは、メッセージはOC4JのJMSキューへのリクエストとして送信されます。WSDLの<jms:address>要素は、メッセージがOC4JのJMSキューで処理されるターゲット・エンドポイントの場所を特定します。
クライアントによりJMS送信操作が実行され、リクエストがOC4Jの送信者キューに送信されます。
OC4Jの送信者キューは、リクエストを受け取ります。WebサービスのアセンブルにWebServicesAssemblerを使用した場合、送信者キューの場所はsendQueueLocation引数に指定されています。
サーバーのランタイムによりリクエストがデキューされ、クライアントのリクエストによって特定されているエンドポイントに渡されます。
メッセージに応答(またはレスポンス)がある場合、メッセージはサービスにより返信先キューに配置されます。WebサービスのアセンブルにWebServicesAssemblerを使用した場合、返信先キューの場所はreplyToQueueLocation引数に指定されています。
返信先キューのレスポンスの受信待機中にクライアントがブロックするため、同期リクエスト/レスポンスをシミューレートできます(リクエスト/レスポンス操作の場合)。メッセージの交換パターンが一方向の場合、クライアントはレスポンスを待機しません。
次のWSDL拡張により、WebサービスのJMSトランスポートが定義されます。
これらはOracle独自のWSDL拡張で、相互運用できない可能性があります。Oracle JDeveloperまたはWebServicesAssemblerを使用してボトムアップ方式でエンドポイントの開発およびデプロイを実行している場合は、これらの拡張がWSDLに生成されます。WSDLを手動で記述している場合、またはWebサービスをトップダウン方式で開発およびデプロイしている場合は、これらの拡張を追加する必要があります。
次のURIは、この項で説明されている拡張の名前空間です。
xmlns:jms="http://www.oracle.com/technology/oracleas/wsdl/jms"
port-component定義内で<jms:address>要素を使用できるのは一度のみです。この要素は、<soap:address>宣言のかわりに使用します。この要素には、次の書式があります。
<jms:address
jndiConnectionFactoryName="xxx"
jndiDestinationName="xxx"/>
表8-1に、<jms:address>要素の属性を説明します。
エンドポイントの場所を特定するには、バインディング操作の<jms:address>セクションに<jms:propertyValue>要素を追加する必要があります。この要素には、次の書式があります。
<jms:propertyValue
name="string"
type="type"
value="string"/>
表8-2に、<jms:propertyValue>要素の属性を説明します。
表8-2 <jms:propertyValue>要素の属性
| 属性名 | 説明 |
|---|---|
|
name |
JMS、JMS実装またはユーザーによって定義されたプロパティの名前 |
|
type |
属性のデータ型 |
|
value |
WSDLにこのプロパティの値をハードコード化する値 |
WebServicesAssemblerのuri引数は、WSDLのpropertyValue要素の値を特定できます。uri引数が指定されている場合、name属性はendpoint-locationに、type属性はstringに、value属性はuri引数の値に設定されます。
<jms:propertyValue name="endpoint-location" type="string" value="value of uri argument"/>
送信者キューおよび受信者キューを特定するためには、OracleAS Web Servicesコンテナにキューが設定されている必要があります。各キューは、<queue>要素および<queue-connection-factory>要素によって特定されます。
<queue>要素には、nameおよびlocation属性が含まれます。name属性は、キューのJNDI名を指定します。location属性は、キューのJNDIロケーションを指定します。queue要素にはオプションのdescription要素を含めて、キューのテキスト説明を追加することもできます。
queue-connection-factory要素にも、nameおよびlocation属性が含まれます。name属性では、送信または受信操作の接続の作成に使用されるJMSコネクション・ファクトリのJNDI名を指定します。locationは、ファクトリのJNDIロケーションを指定します。
OC4J/JMS jms.xml構成ファイルにキューが設定されている場合、ファイルに2つの句を追加できます。1つは送信者キュー用で、もう1つは返信先キュー用です。
|
関連資料: OC4J環境におけるJMSの詳細は、『Oracle Containers for J2EEサービス・ガイド』を参照してください。 |
例8-1に、JNDIロケーションjms/senderQueueのSOAP senderキューを特定するXMLコードを示します。このキューではjms/senderQueueConnectionFactoryをJMSコネクション・ファクトリとして使用し、送信操作の接続を作成します。同様に、2つ目の句ではJNDIロケーションjms/replyToQueueのSOAP receiverキューを受信者キューとして特定します。このキューではjms/replyToQueueConnectionFactoryをJMSコネクション・ファクトリとして使用し、Webサービス・エンドポイントからレスポンス・メッセージの接続を作成します。
例8-1 送信者キューおよび受信者キューを特定するXMLコード
...
<queue name="SOAP sender" location="jms/senderQueue">
<description>A queue for SOAP messages</description>
</queue>
<queue-connection-factory
name="jms/senderQueueConnectionFactory"
location="jms/senderQueueConnectionFactory"/>
<queue name="SOAP receiver" location="jms/replyToQueue">
<description>A queue for SOAP response messages</description>
</queue>
<queue-connection-factory
name="jms/replyToQueueConnectionFactory"
location="jms/replyToQueueConnectionFactory"/>
...
ボトムアップ方式で生成しているWebサービスにJMSトランスポートを構成するには、「JMSトランスポートのWSDL拡張」で説明されているWSDLに拡張を追加し、JMSトランスポートが有効化されているポートを特定する必要があります。WebServicesAssemblerには、WSDLにこの情報を追加する引数が2つあります。
sendConnectionFactoryLocation: JMSの送信操作用の接続の作成に使用されるJMSファクトリのJNDIロケーションを特定します。
sendQueueLocation: メッセージの送信先であるJMSキューのJNDI名を特定します。
SOAPメッセージを送信および受信するJMSキューは構成済であることを仮定しています。次の手順では、JMSをトランスポート・メカニズムとして使用するWebサービスをボトムアップ方式でアセンブルする方法を説明します。Webサービスをボトムアップ方式でアセンブルする標準的な手順に従っています。
|
関連資料:
|
assembleコマンドを使用してWebServicesAssemblerを実行し、サービスのアーティファクトを生成します。sendQueueLocationおよびsendConnectionFactoryLocationを使用して、キューの位置およびキューのコネクション・ファクトリを指定します。このAntタスクによって生成されたWSDLは例8-2に示されています。
|
注意: キューの位置およびキューのコネクション・ファクトリを、コマンドラインまたはAntタスクでsendQueueLocationおよびsendConnectionFactoryLocationを使用して指定せずに、この情報をデプロイメント・ディスクリプタ・ファイルのWebServicesAssemblerに渡すことができます。この方法の詳細は、「デプロイメント・ディスクリプタを使用したJMSトランスポートの構成方法」を参照してください。 |
<oracle:assemble appName="echo"
targetNamespace="http://www.oracle.com/echo"
typeNamespace="http://www.oracle.com/echo"
serviceName="EchoService"
input="./build/classes/service"
output="build"
ear="build/echo.ear"
style="rpc"
use="encoded"
createOneWayOperations="true"
>
<oracle:porttype
interfaceName="oracle.j2ee.ws.jmstransport.Echo"
className="oracle.j2ee.ws.jmstransport.EchoImpl"
>
<oracle:port
uri="/echo"
sendQueueLocation="jms/senderQueue"
name="EchoPort"
sendConnectionFactoryLocation="jms/senderQueueConnectionFactory">
</oracle:port>
</oracle:porttype>
/>
次に、このAntタスクを説明します。
assemble: Javaファイルを使用したボトムアップ方式のWebサービスを生成します。このコマンドで、デプロイ可能なアーカイブの作成に必要とされるすべてのファイルを作成します。
appName: アプリケーション名を指定します。通常、この名前はcontextおよびuriなどの他の引数のベース値として使用されます。
targetNamespace: 生成されたWSDLで使用するターゲット名前空間を指定します。この値には、準拠HTTP URL、非準拠HTTP URLまたはURIのいずれかの値が可能です。
typeNamespace: 生成されたWSDLのスキーマ型で使用するタイプ名前空間を指定します。指定した名前が常に使用され、逆向きになることはありません。
serviceName: サービス名を指定します。
input: WEB-INF/classesにコピーする必要があるクラスを含むディレクトリまたはJARを指定します。この引数は、WebServicesAssemblerで使用するクラスパスに追加されます。
output: 生成されたファイルを保存するディレクトリを指定します。ディレクトリが存在しない場合に作成されます。
ear: 生成されたEARの名前および場所を指定します。
style: ボトムアップ方式でのWebサービス・アセンブリでは、この引数は生成されたWSDLでメッセージ書式のstyle属性を指定します。
use: ボトムアップ方式でのWebサービス・アセンブリでは、この引数は生成されたWSDLでメッセージ書式のuse属性を指定します。
createOneWayOperations: この引数をtrueに設定すると、voidを戻すメソッドにはレスポンス・メッセージはありません。引数を指定しないか、falseに設定すると、レスポンス・メッセージは空です。
porttype: このタグにより、異なるインタフェースをWebサービスに構成できます。
interfaceName: サービス・エンドポイント・インタフェース(SEI)を含むJavaクラス名(パッケージ名を含みます)を指定します。
className: Webサービスの実装クラスであるクラス名(パッケージ名を含みます)を指定します。
uri: Webサービスに使用するURLを指定します。
sendQueueLocation: JMS send操作に使用されるJMSキューのJNDI名を特定します。
sendConnectionFactoryLocation: JMS send操作の接続の取得に使用されるJMS ConnectionFactoryのJNDI名を指定します。
|
関連資料: これらの引数の詳細は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssemblerの使用方法」を参照してください。 |
サービスをデプロイします。
通常の方法でEARファイルをOC4Jの実行中インスタンスにデプロイします。EARファイルのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。
クライアント・コードを生成します。
この手順は、「JMSをトランスポートとして使用するプロキシのアセンブル方法」で説明されています。
例8-2に、「JMSトランスポートを使用するWebサービスのボトムアップ方式でのアセンブル方法」のAntタスクによって作成されたWSDLを示します。JMSトランスポート構成は太字で強調してあります。
例8-2 JMSトランスポート構成を含むWSDL
<?xml version = '1.0' encoding = 'UTF-8'?> <definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:tns="http://www.oracle.com/echo" xmlns:jms="http://www.oracle.com/technology/oracleas/wsdl/jms" name="Echo" targetNamespace="http://www.oracle.com/echo"> <types> <schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:soap11-enc="http://schemas.xmlsoap.org/soap/encoding/" targetNamespace="http://www.oracle.com/echo"/> </types> <message name="Echo_echo"> <part name="String_1" type="xsd:string"/> </message> <message name="Echo_echoInt"> <part name="int_1" type="xsd:int"/> </message> <message name="Echo_echoIntResponse"> <part name="result" type="xsd:int"/> </message> <message name="Echo_echoResponse"> <part name="result" type="xsd:string"/> </message> <portType name="Echo"> <operation name="echo" parameterOrder="String_1"> <input message="tns:Echo_echo"/> <output message="tns:Echo_echoResponse"/> </operation> <operation name="echoInt" parameterOrder="int_1"> <input message="tns:Echo_echoInt"/> <output message="tns:Echo_echoIntResponse"/> </operation> </portType> <binding name="EchoBinding" type="tns:Echo"> <operation name="echo"> <input> <soap:body use="encoded" namespace="http://www.oracle.com/echo" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" parts="String_1"/> </input> <output> <soap:body use="encoded" namespace="http://www.oracle.com/echo" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" parts="result"/> </output> <soap:operation soapAction=""/> </operation> <operation name="echoInt"> <input> <soap:body use="encoded" namespace="http://www.oracle.com/echo" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" parts="int_1"/> </input> <output> <soap:body use="encoded" namespace="http://www.oracle.com/echo" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/" parts="result"/> </output> <soap:operation soapAction=""/> </operation> <soap:binding style="rpc" transport="http://www.oracle.com/technology/oracleas/wsdl/jms"/> </binding> <service name="Echo"> <port name="EchoPort" binding="tns:EchoBinding"> <jms:address jndiConnectionFactoryName="jms/OracleSyndicateQueueConnectionFactory" jndiDestinationName="jms/OracleSyndicateQueue" > <jms:propertyValue name="endpoint-location" type="string" value="echo"/> </jms:address> </port> </service> </definitions>
JMSトランスポート構成は、oracle-webservices.xmlデプロイメント・ディスクリプタに入力することでWebServicesAssemblerに渡すことができます。これは、sendQueueLocationおよびsendConnectionFactoryLocation引数をコマンドラインまたはAntタスクで宣言する代替方法です。
oracle-webservices.xmlに構成を入力する際には、<jms:address>ではなく<jms-address>を、また、<jms:propertyValue>ではなく<jms-propertyValue>を使用します。これらの要素は、<port-component>要素のサブ要素として使用する必要があります。
「JMSトランスポートのWSDL拡張」で説明されているように、<jms-address>および<jms-propertyValue>要素は同じ属性を持ちます。
例8-3に、JMSトランスポート構成を含むoracle-webservices.xmlデプロイメント・ディスクリプタを示します。アセンブリ中に、新しいWSDLが作成されます。結果のWSDLは、例8-2のようになります。JMS構成は太字で強調してあります。
例8-3 JMSトランスポート構成を含むoracle-webservices.xml
<oracle-webservices
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="oracle-webservices-server-10_0.xsd"
schema-major-version="10" schema-minor-version="0">
<webservice-description name="Echo">
<port-component name="EchoPort">
<runtime enabled="true">
<jms-address jndiDestinationName="jms/OracleSyndicateQueue"
jndiConnectionFactoryName="jms/OracleSyndicateQueueConnectionFactory" />
</runtime>
</port-component>
</webservice-description>
</oracle-webservices>
|
関連資料:
|
トップダウン方式でのアセンブリの場合、WSDLを編集してエンドポイントにJMSアドレスおよびプロパティ値を追加する必要があります。
次の手順では、JMSをトランスポート・メカニズムとして使用するWebサービスを生成する方法を説明します。SOAPメッセージを送信および受信するJMSキューは構成済であることを仮定しています。
|
関連資料:
|
Webサービスを生成するWSDLを用意します。
WSDLを編集して、JMSトランスポートを定義する要素を追加します。
JMSトランスポート要素は、「JMSトランスポートのWSDL拡張」で説明されています。
WSDLをWebServicesAssemblerのgenInterfaceコマンドへの入力として使用します。
生成されたインタフェースおよびタイプ・クラスをコンパイルします。
作成するWebサービスのJavaサービス・エンドポイント・インタフェースを記述します。
Javaサービス・エンドポイント・インタフェースをコンパイルします。
WebServicesAssemblerツールのtopDownAssembleコマンドを実行し、サービスを生成します。
<oracle:topDownAssemble appName="bank"
packageName="oracle.ws.server.bank"
wsdl="./etc/Bank.wsdl"
input="./build/classes/service}"
output="build"
ear="build/bank.ear"
debug="true"
fetchWsdlImports="true"
>
<oracle:classpath>
<oracle:pathelement path="${build.impl.dir}"/>
<oracle:pathelement location="${wsa.jar}"/>
</oracle:classpath>
<oracle:porttype
className="oracle.ws.server.bank.BankImpl"
classFileName="java/oracle/ws/server/bank/BankImpl.java"
>
<oracle:port name="BankPort" uri="bank2"/>
<oracle:port name="BankPortWithJMS" uri="/bank"/>
<oracle:port name="Soap12JmsEchoPort" uri="/soap12bank"/>
</oracle:porttype>
/>
次に、このAntタスクを説明します。
topDownAssemble: 必要なクラスおよびWSDLの説明に基づいたWebサービスのデプロイメント・ディスクリプタを作成します。このファイルはEARファイル、WARファイルまたはディレクトリのいずれかに保存されます。
packageName: JAX-RPCマッピング・ファイルでパッケージ名が宣言されていない場合、生成されたクラスで使用するパッケージ名を指定します。
wsdl: WSDLドキュメントへの絶対ファイル・パス、相対ファイル・パスまたはURLを指定します。
input: WEB-INF/classesにコピーする必要があるクラスを含むディレクトリまたはJARを指定します。この引数は、WebServicesAssemblerで使用するクラスパスに追加されます。
output: 生成されたファイルを保存するディレクトリを指定します。ディレクトリが存在しない場合に作成されます。
ear: 生成されたEARの名前および場所を指定します。
debug: すべての詳細な診断メッセージを指定されたコマンドに出力するかどうか示します。
fetchWsdlImports: WSDLおよびWSDLでインポートするすべてのローカル・コピーを作成するか示します。
classpath: WebServicesAssemblerに指定されるすべてのユーザー作成クラスを含むクラスパスを指定します。作成済の値タイプ・クラスまたは例外があり、WebServicesAssemblerで上書きしたくない場合に、この引数を指定します。
porttype: このタグにより、異なるインタフェースをWebサービスに構成できます。
className: Webサービスの実装クラスであるクラス名(パッケージ名を含みます)を指定します。
classFileName: className引数で指定した実装クラスのJavaファイル名を識別します。必要な場合、このファイルはアセンブリ中にコンパイルされます。
|
関連資料: これらの引数の詳細は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssemblerの使用方法」を参照してください。 |
サービスをデプロイします。
通常の方法でEARファイルをOC4Jの実行中インスタンスにデプロイします。EARファイルのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。
クライアント・コードを生成します。
この手順は、「JMSをトランスポートとして使用するプロキシのアセンブル方法」で説明されています。
クライアント・クラスパスに次のクライアントJARファイルを追加します。
これらのクライアントJARファイルは、Webサービス・クライアントがJMSをトランスポート・メカニズムとしてサポートしている場合に必要です。パスのJ2EE_HOME環境変数は、Oracle Application ServerまたはスタンドアロンOC4Jがインストールされている場所を表しています。
J2EE_HOME/j2ee/home/lib/oc4j-unsupported-apis.jar
J2EE_HOME/j2ee/home/lib/oc4j-internal.jar
|
関連資料: 使用可能なすべてのOracleAS Web ServicesクライアントJARの詳細は、『Oracle Application Server Web Services開発者ガイド』の「Webサービス・クライアントのAPIおよびJAR」を参照してください。 |
JMSをトランスポート・メカニズムとして使用している場合には、JMSキューのJNDI名、および送信操作JMSメッセージに使用される返信先キューのコネクション・ファクトリがクライアント・コードによって指定されていることを確認する必要があります。WebServicesAssemblerのreplyToQueueLocationおよびreplyToConnectionFactoryLocation引数によってこれらの値が指定されます。genProxyコマンドとともに使用され、これらの引数はJMSトランスポートで使用できるプロキシ・スタブを生成します。引数は、レスポンス・メッセージを受信するキューの値で構成されたスタブを生成します。
プロキシ・スタブの生成にreplyTo*引数を使用せず、エンドポイントにリクエスト/レスポンス操作が含まれる場合は、レスポンス・メッセージを受信できるようにプログラムでreplyTo*引数を設定する必要があります。
SOAPメッセージを送信および受信するJMSキューは構成済であることを仮定しています。次の手順では、JMSをトランスポート・メカニズムとして使用するプロキシ・スタブを生成する方法を説明します。この手順はプロキシ・スタブをアセンブルする標準的な手順に従っています。
|
関連資料:
|
WSDLへのURI、出力ディレクトリ名、パッケージ名およびJMSキューとコネクション・ファクトリの位置を、WebServicesAssemblerのgenProxyコマンドへの入力として指定します。
このAntタスクは、クライアント・プロキシを生成し、build/src/proxyディレクトリに格納します。クライアント・アプリケーションはこのスタブを使用して、リモート・サービスでの操作を起動します。
<oracle:genProxy
wsdl="http://localhost:8888/bank/bank?WSDL"
output="build/src/proxy"
packageName="oracle.ws.client.bank"
>
<oracle:port
replyToConnectionFactoryLocation="jms/receiverQueueConnectionFactory"
replyToQueueLocation="jms/receiverQueue"
</oracle:port>
/>
次に、このAntタスクを説明します。
genProxy: J2SE Webサービス・クライアントで使用できる静的プロキシ・スタブを作成します。
wsdl: WSDLドキュメントへの絶対ファイル・パス、相対ファイル・パスまたはURLを指定します。
output: 生成されたファイルを保存するディレクトリを指定します。ディレクトリが存在しない場合に作成されます。
packageName: JAX-RPCマッピング・ファイルでパッケージ名が宣言されていない場合、生成されたクラスで使用するパッケージ名を指定します。
replyToConnectionFactoryLocation: すべての送信操作JMSメッセージのデフォルトの返信先として使用するJMSコネクション・ファクトリのJNDI名を指定します。
replyToQueueLocation: すべての送信操作JMSメッセージのデフォルトの返信先として使用するJMSキューのJNDI名を指定します。
|
関連資料: これらの引数の詳細は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssemblerの使用方法」を参照してください。 |
genProxyによって作成されたクライアント・ユーティリティ・クラス・ファイルを、アプリケーション・クライアントとして使用するか、またはテンプレートとして使用して独自のクライアント・コードを記述します。クライアント・ユーティリティ・クラス・ファイルは、genProxyによって作成されるいくつかのファイルの1つです。
クライアント・ファイルをコンパイルし、クラスパスに置きます。
クライアントをコンパイルする前に、クラスパスの適切なJARをリストします。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント・サイドのJARとしてwsclient_extended.jarを含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。
JMSクライアントの場合は、クラスパスのoc4j-internal.jarおよびoc4j-unsupported-apis.jarファイルも含める必要があります。
クライアントのJNDI構成を指定するには、クライアントのクラスパスにjndi.propertiesファイルを追加します。
J2SE JMSクライアントをコマンドラインから実行します。
|
関連資料:
|
次の手順では、JMSトランスポートを使用するWebサービス・クライアントを記述する方法を説明します。
JMSトランスポートを使用するクライアントのスタブ・コードは、HTTPトランスポートを使用するクライアントのコードに非常に似ています。違いは、エンドポイント・アドレスが、JMSエンドポイントを示す一意のURIに設定されている必要があることです。
|
関連資料: J2SEクライアント・アプリケーションのクライアント・コードの記述の詳細は、『Oracle Application Server Web Services開発者ガイド』の「Webサービス・クライアント・アプリケーションの記述」を参照してください。 |
例8-4に、メッセージの送信にJMSトランスポートを使用するクライアント・スタブ・コードを示します。エンドポイント・アドレスをJMSエンドポイントを示す一意のURIに設定するコードは、太字で強調してあります。
例8-4 メッセージの送信にJMSトランスポートを使用するクライアント・スタブ・コード
...
ServiceFactory serviceFactory = ServiceFactory.newInstance();
Echo_Service echoService = (Echo_Service) serviceFactory.loadService(Echo_Service.class);
Echo_PortType echoPort = echoService.getEchoPort();
((Stub)echoPort)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "/echo/echo");
String echo = echoPort.echo("Test echo");
...
JMSをトランスポートとして使用している場合、クライアント・スタブ・コードにはJMSキューのJNDI名、および送信操作JMSメッセージの返信先キューのコネクション・ファクトリを特定する必要があります。プロキシ・スタブ・コードの生成時にこれらの値を指定しない場合は、プログラムで追加できます。OracleAS Web Servicesには、oracle.webservices.OracleStubクラスにこの実行を可能にするプロパティが2つ用意されています。
JMS_TRANSPORT_REPLY_TO_FACTORY_NAME: すべての送信操作JMSメッセージのデフォルトの返信先として使用するJMSコネクション・ファクトリのJNDI名を指定します。このプロパティは、WebServicesAssemblerのreplyToConnectionFactoryLocation引数と同等です。
JMS_TRANSPORT_REPLY_TO_QUEUE_NAME: すべての送信操作JMSメッセージのデフォルトの返信先として使用するJMSキューのJNDI名を指定します。このプロパティは、WebServicesAssemblerのreplyToQueueLocation引数と同等です。
例8-5に、これらのプロパティをJMSキューのJNDI名、および送信操作の返信先キューのコネクション・ファクトリの設定に使用するクライアント・スタブ・コードを示します。プロパティを設定するコードを太字で強調してあります。
例8-5 プログラムによるreplyTo*パラメータの設定
ServiceFactory serviceFactory = ServiceFactory.newInstance();
Echo_Service echoService = (Echo_service)serviceFactory.loadService(Echo_Service.class;
Echo_PortType echoPort = echoService.getEchoPort();
((Stub)echoPort)._setProperty(Stub.ENDPOINT_ADDRESS_PROPERTY, "/echo/echo");
((Stub)echoPort)._setProperty(OracleStub.JMS_TRANSPORT_REPLY_TO_FACTORY_NAME, "jms/receiverQueueConnectionFactory");
((Stub)echoPort)._setProperty(OracleStub.JMS.TRANSPORT_REPLY_TO_QUEUE_NAME, "jms/receiverQueue");
String echo = echoPort.echo("Test echo");
Dynamic Invocation Interface(DII)クライアント用のコードを記述している場合には、送信者キューおよび受信者キューにJmsAddressオブジェクトを作成する必要があります。これらのオブジェクトは、プログラムによるJmsClientTransportFactoryオブジェクトの宣言に使用されます。これにより、クライアントはWebサービス起動からレスポンス・メッセージを取得できるようになります。
JmsAddressおよびJmsClientTransportFactoryクラスはoracle.webservices.transportパッケージに属します。
例8-6に、JMSトランスポートを使用してメッセージを送信するためのDIIクライアント・コードを示します。JmsClientTransportFactoryの作成、設定および使用方法を示すコードを太字で強調してあります。
例8-6 JMSトランスポートを使用してメッセージを送信するためのクライアント・コード
...
QName operation = new QName("http://www.oracle.com/echo", "echo");
Call call = getCall(operation, SOAPVersion.SOAP_1_1);
call.setTargetEndpointAddress("/echo/echo");
JmsAddress jmsAddress = new JmsAddress("jms/senderQueue", "jms/senderQueueConnectionFactory");
JmsAddress replyToAddress = new JmsAddress("jms/receiverQueue", "jms/receiverQueueConnectionFactory");
JmsClientTransportFactory transportFactory = new JmsClientTransportFactory(jmsAddress, replyToAddress);
((OracleCall) call).setClientTransportFactory(transportFactory);
...
詳細は、次を参照してください。
Webサービスをトップダウン方式でアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「WSDLからのWebサービスのアセンブル」を参照してください。
Javaクラスを使用してWebサービスをアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「Javaクラスを使用したWebサービスのアセンブル」を参照してください。
EJBを使用してWebサービスをアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「EJBを使用したWebサービスのアセンブル」を参照してください。
JMSトピックおよび宛先を使用してWebサービスをアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「JMS宛先を使用したWebサービスのアセンブル」を参照してください。
PL/SQLパッケージ、SQL問合せ、DML文、Oracle Streams AQまたはサーバー・サイドJavaクラスなどのデータベース・リソースを使用してWebサービスをアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「データベースWebサービスのアセンブル」を参照してください。
J2EE Webサービス・クライアントをアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「J2EE Webサービス・クライアントのアセンブル」を参照してください。
J2SE Webサービス・クライアントをアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「J2SE Webサービス・クライアントのアセンブル」を参照してください。
WebServicesAssemblerコマンドを使用してWebサービス・アーティファクトをアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssemblerの使用方法」を参照してください。
クライアント・コードのコンパイルに必要なJARについては、『Oracle Application Server Web Services開発者ガイド』の「Webサービス・クライアントのAPIおよびJAR」を参照してください。
Webサービス管理構成を含むoracle-webservices.xmlデプロイメント・ディスクリプタの内容については、『Oracle Application Server Web Services開発者ガイド』の「Webサービスのパッケージ化およびデプロイ」を参照してください。