ヘッダーをスキップ
Oracle Application Server Web Servicesアドバンスト開発者ガイド
10g(10.1.3.1.0)
B31869-02
  目次
目次
索引
索引

戻る
戻る
 
次へ
次へ
 

8 Webサービス・トランスポートとしてのJMSの使用方法

この章では、Webサービスの代替のトランスポート・メカニズムとしてJMSを使用する方法について説明します。この章の項目は、次のとおりです。

トランスポート・メカニズムとしてのJMSの概要

Oracle Application Server Web Servicesでは、トランスポート・メカニズムとしてJMSを使用できます。これにより、一方向(リクエスト)と双方向(リクエストおよびレスポンス)のどちらでもメッセージを送信できます。一方向リクエスト・メッセージでは、リクエスト・メッセージがJMSキューに到達すると、Webサービス・クライアントによりブロックが解除されます。双方向リクエストおよびレスポンス・メッセージでは、レスポンス・メッセージが受信されるまでWebサービス・クライアントがブロックされます。


関連資料:

一方向および二方向メッセージの例は、次のリソースを参照してください。

  • 『Oracle Application Server Web Services開発者ガイド』の「JMS宛先を使用したWebサービスのアセンブル」

  • 『Oracle Application Server Web Services開発者ガイド』の「データベースWebサービスのアセンブル」の章の「Oracle Streams AQからWebサービスをアセンブルする方法」


XMLメッセージ交換用のSOAPプロトコルは、特定のトランスポート・メカニズムに依存しません。各メカニズムにはそれぞれ異なる利点があります。たとえば、HTTPは、Web Service Interoperability(WS-I)によって開発された標準に準拠しているため、他のWebサービスとの相互運用性が高いという利点があります。これに対し、JMSは非同期メッセージングをサポートしているため、信頼性とスケーラビリティを高められるのが利点です。

トランスポート・メカニズムとしてJMSを使用した場合、サービスやクライアントによって送信されたメッセージはキューに置かれるとともに、オプションで指定すれば記憶域にも格納されるため、信頼性が向上します。サービスとクライアント間の通信が失敗した場合には、メッセージを記憶域から取得して再送信できます。


注意:

信頼性は、HTTP経由のSOAPメッセージに対しても有効化できます。詳細は、第5章「Webサービスの信頼性の確保」を参照してください。

JMSは、Webサービスの非同期起動をサポートしています。非同期起動を使用した場合、クライアントは応答を待っている間に別のタスクを行うことができます。たとえば、リクエストを送信した後、そのリクエストのステータスを参照するためのポーリングを実行したり、別のレスポンスを取得したりできます。

JMSに実装されているスケーラビリティは、ハイトラフィックなサービスにも対応しています。これは、スケーラビリティのサポートに制限があるHTTPに比べて有利な点です。

トランスポート・メカニズムとしてのJMS実装の一般的な手順

トランスポート・メカニズムとしてJMSを有効化するには、次の一般的な手順に従います。

  1. SOAPメッセージの送信および受信に使用されるキューを設定します。この手順の詳細は、「JMSキューの設定方法」で説明しています。

  2. SOAPトランスポートのJMSキューの情報を指定するWebサービスをアセンブルします。

  3. プロキシをアセンブルします(必要な場合)。プロキシをアセンブルする際には、戻りキューを特定する必要があります。戻りキューは、Webサービス起動へのレスポンスを受信するJMSキューです。コマンドラインまたはAntタスクで戻りキューを宣言することで、これを実行できます。

    この手順の詳細は、「JMSをトランスポートとして使用するプロキシのアセンブル方法」で説明されています。

JMSトランスポートのデータ・フローの概要

次の手順では、トランスポート・メカニズムがJMSの場合に、Webサービス・クライアントとOracleAS Web Services間でデータがどのように渡されるかを説明します。手順に出てくるWSDL要素およびWebServicesAssemblerの引数は、この章で後から説明します。図8-1に、手順の順序を示します。

  1. Webサービス・クライアントでは、メッセージはOC4JのJMSキューへのリクエストとして送信されます。WSDLの<jms:address>要素は、メッセージがOC4JのJMSキューで処理されるターゲット・エンドポイントの場所を特定します。

  2. クライアントによりJMS送信操作が実行され、リクエストがOC4Jの送信者キューに送信されます。

  3. OC4Jの送信者キューは、リクエストを受け取ります。WebサービスのアセンブルにWebServicesAssemblerを使用した場合、送信者キューの場所はsendQueueLocation引数に指定されています。

  4. サーバーのランタイムによりリクエストがデキューされ、クライアントのリクエストによって特定されているエンドポイントに渡されます。

  5. メッセージに応答(またはレスポンス)がある場合、メッセージはサービスにより返信先キューに配置されます。WebサービスのアセンブルにWebServicesAssemblerを使用した場合、返信先キューの場所はreplyToQueueLocation引数に指定されています。

  6. 返信先キューのレスポンスの受信待機中にクライアントがブロックするため、同期リクエスト/レスポンスをシミューレートできます(リクエスト/レスポンス操作の場合)。メッセージの交換パターンが一方向の場合、クライアントはレスポンスを待機しません。

図8-1 JMSトランスポートのデータ・フロー

図8-1の説明が続きます
「図8-1 JMSトランスポートのデータ・フロー」の説明

JMSトランスポートのWSDL拡張

次のWSDL拡張により、WebサービスのJMSトランスポートが定義されます。

これらはOracle独自のWSDL拡張で、相互運用できない可能性があります。Oracle JDeveloperまたはWebServicesAssemblerを使用してボトムアップ方式でエンドポイントの開発およびデプロイを実行している場合は、これらの拡張がWSDLに生成されます。WSDLを手動で記述している場合、またはWebサービスをトップダウン方式で開発およびデプロイしている場合は、これらの拡張を追加する必要があります。

次のURIは、この項で説明されている拡張の名前空間です。

xmlns:jms="http://www.oracle.com/technology/oracleas/wsdl/jms"

JMSアドレス要素

port-component定義内で<jms:address>要素を使用できるのは一度のみです。この要素は、<soap:address>宣言のかわりに使用します。この要素には、次の書式があります。

<jms:address
    jndiConnectionFactoryName="xxx"
    jndiDestinationName="xxx"/>

表8-1に、<jms:address>要素の属性を説明します。

表8-1 <jms:address>要素の属性

属性名 説明

jndiConnectionFactoryName

使用されるコネクション・ファクトリのJNDI名。Webサービスをボトムアップ方式で生成している場合は、sendConnectionFactoryLocation引数によってこの属性が設定されます。

jndiDestinationName

メッセージの送信先であるJMSキューのJNDI名。Webサービスをボトムアップ方式で生成している場合は、sendQueueLocation引数によってこの属性が設定されます。


JMSプロパティ値要素

エンドポイントの場所を特定するには、バインディング操作の<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"/>

JMSキューの設定方法

送信者キューおよび受信者キューを特定するためには、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/senderQueueSOAP senderキューを特定するXMLコードを示します。このキューではjms/senderQueueConnectionFactoryをJMSコネクション・ファクトリとして使用し、送信操作の接続を作成します。同様に、2つ目の句ではJNDIロケーションjms/replyToQueueSOAP 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"/>
...

JMSトランスポートを使用するWebサービスのボトムアップ方式でのアセンブル方法

ボトムアップ方式で生成しているWebサービスにJMSトランスポートを構成するには、「JMSトランスポートのWSDL拡張」で説明されているWSDLに拡張を追加し、JMSトランスポートが有効化されているポートを特定する必要があります。WebServicesAssemblerには、WSDLにこの情報を追加する引数が2つあります。

JMSトランスポートを使用するWebサービスのボトムアップ方式でのアセンブル手順

SOAPメッセージを送信および受信するJMSキューは構成済であることを仮定しています。次の手順では、JMSをトランスポート・メカニズムとして使用するWebサービスをボトムアップ方式でアセンブルする方法を説明します。Webサービスをボトムアップ方式でアセンブルする標準的な手順に従っています。


関連資料:

  • JMSキューの詳細は、「JMSキューの設定方法」を参照してください。

  • "ボトムアップ方式のWebサービス・アセンブリの追加の例は、『Oracle Application Server Web Services開発者ガイド』の「Javaクラスを使用したWebサービスのアセンブル」および「EJBを使用したWebサービスのアセンブル」を参照してください。


  1. 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の使用方法」を参照してください。


  2. サービスをデプロイします。

    通常の方法でEARファイルをOC4Jの実行中インスタンスにデプロイします。EARファイルのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。

  3. クライアント・コードを生成します。

    この手順は、「JMSをトランスポートとして使用するプロキシのアセンブル方法」で説明されています。

JMSトランスポートの生成されたWSDLのサンプル

例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トランスポートの構成方法

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>

関連資料:

<jms-address>要素のjndiDestinationNameおよびjndiConnectionFactoryName属性の詳細は、「JMSトランスポートのWSDL拡張」を参照してください。


JMSトランスポートを使用するWebサービスのトップダウン方式でのアセンブル方法

トップダウン方式でのアセンブリの場合、WSDLを編集してエンドポイントにJMSアドレスおよびプロパティ値を追加する必要があります。

次の手順では、JMSをトランスポート・メカニズムとして使用するWebサービスを生成する方法を説明します。SOAPメッセージを送信および受信するJMSキューは構成済であることを仮定しています。


関連資料:

  • JMSキューの詳細は、「JMSキューの設定方法」を参照してください。

  • WSDLからのWebサービスのアセンブルに必要な手順の詳細は、『Oracle Application Server Web Services開発者ガイド』の「トップダウン方式でのWebサービスの生成」を参照してください。


  1. Webサービスを生成するWSDLを用意します。

  2. WSDLを編集して、JMSトランスポートを定義する要素を追加します。

    JMSトランスポート要素は、「JMSトランスポートのWSDL拡張」で説明されています。

  3. WSDLをWebServicesAssemblerのgenInterfaceコマンドへの入力として使用します。

  4. 生成されたインタフェースおよびタイプ・クラスをコンパイルします。

  5. 作成するWebサービスのJavaサービス・エンドポイント・インタフェースを記述します。

  6. Javaサービス・エンドポイント・インタフェースをコンパイルします。

  7. 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の使用方法」を参照してください。


  8. サービスをデプロイします。

    通常の方法でEARファイルをOC4Jの実行中インスタンスにデプロイします。EARファイルのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』を参照してください。

  9. クライアント・コードを生成します。

    この手順は、「JMSをトランスポートとして使用するプロキシのアセンブル方法」で説明されています。

  10. クライアント・クラスパスに次のクライアント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をトランスポート・メカニズムとして使用している場合には、JMSキューのJNDI名、および送信操作JMSメッセージに使用される返信先キューのコネクション・ファクトリがクライアント・コードによって指定されていることを確認する必要があります。WebServicesAssemblerのreplyToQueueLocationおよびreplyToConnectionFactoryLocation引数によってこれらの値が指定されます。genProxyコマンドとともに使用され、これらの引数はJMSトランスポートで使用できるプロキシ・スタブを生成します。引数は、レスポンス・メッセージを受信するキューの値で構成されたスタブを生成します。

プロキシ・スタブの生成にreplyTo*引数を使用せず、エンドポイントにリクエスト/レスポンス操作が含まれる場合は、レスポンス・メッセージを受信できるようにプログラムでreplyTo*引数を設定する必要があります。


関連資料:

replyTo*引数をコードに直接指定する方法は、「プログラムによる送信キューの位置およびコネクション・ファクトリの設定方法」を参照してください。


SOAPメッセージを送信および受信するJMSキューは構成済であることを仮定しています。次の手順では、JMSをトランスポート・メカニズムとして使用するプロキシ・スタブを生成する方法を説明します。この手順はプロキシ・スタブをアセンブルする標準的な手順に従っています。


関連資料:

  • JMSキューの詳細は、「JMSキューの設定方法」を参照してください。

  • Webサービス・プロキシ・スタブのアセンブルに必要な手順の詳細は、『Oracle Application Server Web Services開発者ガイド』の「静的スタブを使用したJ2SE Webサービス・クライアントのアセンブル手順」を参照してください。


  1. 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の使用方法」を参照してください。


  2. genProxyによって作成されたクライアント・ユーティリティ・クラス・ファイルを、アプリケーション・クライアントとして使用するか、またはテンプレートとして使用して独自のクライアント・コードを記述します。クライアント・ユーティリティ・クラス・ファイルは、genProxyによって作成されるいくつかのファイルの1つです。

  3. クライアント・ファイルをコンパイルし、クラスパスに置きます。

    クライアントをコンパイルする前に、クラスパスの適切なJARをリストします。個々のJARをリストするかわりに、クライアントのクラスパスにクライアント・サイドのJARとしてwsclient_extended.jarを含めることができます。このJARファイルには、Webサービス・クライアントをコンパイルおよび実行するために必要なすべてのクラスが含まれます。

    JMSクライアントの場合は、クラスパスのoc4j-internal.jarおよびoc4j-unsupported-apis.jarファイルも含める必要があります。

    クライアントのJNDI構成を指定するには、クライアントのクラスパスにjndi.propertiesファイルを追加します。

  4. J2SE JMSクライアントをコマンドラインから実行します。


関連資料:

  • クライアントのクラスパスで使用できる可能性のあるすべてのJARファイルのリストは、『Oracle Application Server Web Services開発者ガイド』の「クライアント・サイド・プロキシを使用するクライアントのクラスパス・コンポーネント」を参照してください。

  • wsclient_extended.jarに表示されるすべてのクラスのリストは、『Oracle Application Server Web Services開発者ガイド』の「Webサービス・プロキシ・クライアントのクラスパスの設定」を参照してください。この付録には、クライアントのクラスパスの詳細な情報が含まれています。

  • oc4j-internal.jarおよびoc4j-unsupported-apis.jarファイルの詳細は、『Oracle Application Server Web Services開発者ガイド』の「JMSトランスポート関連のクライアントJARファイル」を参照してください。


JMSトランスポートをサポートするクライアント・コードの記述

次の手順では、JMSトランスポートを使用するWebサービス・クライアントを記述する方法を説明します。

JMSトランスポートのクライアント・スタブ・コードの記述方法

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");

JMSトランスポートのDIIコードの記述方法

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サービス・トランスポートとしてのJMSの使用方法」を参照してください。

追加情報

詳細は、次を参照してください。