WebSphere Application Server - Express for i5/OS, Version 6.1   
             オペレーティング・システム: i5/OS

             目次と検索結果のパーソナライズ化

例: WSDL 拡張を作成して、WSIF サービスによる SOAP over JMS サービスへのアクセスを有効にする

SOAP メッセージに XML しか含まれていない場合は、Java Message Service (JMS) メッセージの 本文タイプ TextMessage を使用して JMS トランスポート・メカニズム上で送信できます。 この情報、およびそれに関連したコード・フラグメントを使用すると、 WSDL 拡張を作成することで、WSIF サービスが、Java Message Service (JMS) を トランスポート・メカニズムに使用する SOAP サービスにアクセスできます。

SOAP メッセージは、SOAP エンベロープも含めて、JMS メッセージでラップされ、適切なキューに配置されます。 コンテナーは、JMS メッセージを受信すると、SOAP メッセージを除去してクライアントに送信します。

Java Message Service (JMS) API での作業について詳しくは、WSIF サービスの JMS 提供のサービスへのリンクを参照してください。

注: SOAP over JMS バインディングは SOAP over HTTP バインディングとほぼ同じなので、 このトピックは、SOAP over HTTP の WSDL バインディング拡張を作成する場合にも参考になります。

SOAP over JMS バインディングの選択

<soap:binding> タグの transport 属性を設定して、JMS が使用されていることを示します。 さらに、以下のように style 属性を rpc (リモート・プロシージャー・コール) に設定する場合、Web Services Invocation Framework (WSIF) は、操作が Web サービス・エンドポイントで呼び出されたものと想定します。

<soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/jms"/>

JMS アドレスの設定

注: このトピックの最終セクションに示されている、JMS アドレスを指定するためのもう 1 つの方法も参照してください。

JMS を介した SOAP の場合、<wsdl:port> タグに <jms:address> エレメントを含める必要があります。このエレメントには、クライアントが JMS プログラミング・モデルを使用して Web サービスに正しく接続するために必要な情報が含まれています。 これは通常、JMS クライアントの役目をする JMS を介した SOAP バインディングをサポートするために生成されるスタブです。 これ以外の方法としては、Web サービス・クライアントは直接 JMS プログラミング・モデルを使用できます。

<jms:address> エレメントは、以下の形式で示されます。
 
<jms:address
	
    destinationStyle= "queue"	
    jmsVendorURI = "http://ibm.com/ns/mqseries"?
    initialContextFactory= "com.ibm.NamingFactory"?
    jndiProviderURL= "iiop://something:900/wherever"?
    jndiConnectionFactoryName= "orange"
    jndiDestinationName="fred">

    <jms:propertyValue name="targetService" type="xsd:string"
                       value="StockQuoteServicePort"/>

</jms:address>
ここで、疑問符 (?) でマークされた属性は、オプションです。

オプションの jmsVendorURI 属性は、JMS インプリメンテーションを一意的に識別するストリングです。WSIF はこの URI を無視します。これはクライアント開発者と、場合によりクライアント・インプリメンテーションによって使用され、クライアント・ランタイム環境で適切な JMS プロバイダーへのアクセス権があるかどうかが判断されます。

オプション属性 initialContextFactory および jndiProviderURL は、ランタイム環境にデフォルトの Java Naming and Directory Interface (JNDI) プロバイダーが構成されている場合にのみ省略できます。

jndiConnectionFactoryName 属性は JMS ConnectionFactory オブジェクトの名前を指定しますが、このオブジェクトは jndiContext 属性で指定される JNDI コンテキスト内で検索することができます。 この ConnectionFactory オブジェクトを使用して、このキューを所有する JMS プロバイダー・インスタンスに対する JMS 接続を作成します。 構成を単純にする場合は、サーバー・メッセージ・リスナーとクライアントが同一の ConnectionFactory オブジェクトを使用します。 ただし、サーバーとクライアントがすべて同じ JMS プロバイダー・インス タンスに接続する場合は、別々の ConnectionFactory オブジェクトを使用することができます。

targetService <jms:propertyValue> エレメントの value 属性は、ターゲット・サービスの webservices.xml ファイルの <port-component-name> エレメントで定義された、ターゲット・サービスのポート・コンポーネント名です。

JMS ヘッダーおよびプロパティーの設定

<jms:property> タグを使用して、JMS ヘッダーおよびプロパティーを設定します。 次のタグは、メッセージ・パーツまたはリテラル値のいずれかを JMS プロパティーにマップします。

<jms:property name="Priority" {part="requestPriority" | value="fixedValue"}/>

If the <jms:property> has a literal value, then it can also be nested within the <jms:address> tag:

<jms:property name="Priority" value="fixedValue" />

この形式 の <jms:property> タグは、ネイティブ JMS バインディングでも使用されます。

<!-- Example: SOAP over JMS Text Message -->

<?xml version="1.0" encoding="UTF-8"?>
<wsdl:definitions
        	      name="StockQuoteInterfaceDefinitions"
        targetNamespace="urn:StockQuoteInterface"
        xmlns:tns="urn:StockQuoteInterface"
        xmlns:xsd="http://www.w3.org/2000/10/XMLSchema"
        xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
        xmlns:jms="http://schemas.xmlsoap.org/wsdl/jms/"
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/">
    <wsdl:message name="GetQuoteInput">
        <part name="symbol" type="xsd:string"/>
    	</wsdl:message>
    <wsdl:message name="GetQuoteOutput">
        <part name="value" type="xsd:float"/>
    	</wsdl:message>

    <wsdl:portType name="StockQuoteInterface">
        <wsdl:operation name="GetQuote">
            <wsdl:input message="tns:GetQuoteInput"/>
            <wsdl:output message="tns:GetQuoteOutput"/>
        </wsdl:operation>
    </wsdl:portType>

    <wsdl:binding name="StockQuoteSoapJMSBinding" type="tns:StockQuoteInterface">
        <soap:binding style="rpc"
                 transport="http://schemas.xmlsoap.org/soap/jms"/>
        <wsdl:operation name="GetQuote">
            <soap:operation soapAction="urn:StockQuoteInterface#GetQuote"/>
            <wsdl:input>
                <soap:body use="encoded" namespace="urn:StockQuoteService"
                         encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </wsdl:input>
            <wsdl:output>
                <soap:body use="encoded" namespace="urn:StockQuoteService"
                     encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/>
            </wsdl:output>
        </wsdl:operation>
    </wsdl:binding>
    <wsdl:service name="StockQuoteService">
        <wsdl:port name="StockQuoteServicePort" 
                      binding="sqi:StockQuoteSoapJMSBinding">
            <jms:address destinationStyle="queue"
                     jndiConnectionFactoryName="myQCF"
                     jndiDestinationName="myQ"
                     initialContextFactory= "com.ibm.NamingFactory"
                     jndiProviderURL="iiop://something:900/">

                     <jms:propertyValue name="targetService"
                                        type="xsd:string"
                                        value="StockQuoteServicePort"/>

            </jms:address>

        </wsdl:port>
    </wsdl:service>
</wsdl:definitions>

JMS アドレスの設定 (代替方法)

JMS プロバイダーを介した SOAP に関しては、代わりに以下のフォーマットの <soap:address> タグを使用して JMS アドレスを指定することができます。
jms:/[queue|topic]?<property>=<value>&amp;<property>=<value>&amp;...
ここで、queue または topic の指定は、 JMS アドレスの destinationStyle 属性に対応します。

以下の表は、<soap:address> タグで使用する場合の有効なプロパティーをリストしています。

プロパティー名 プロパティーの説明 対応する JMS アドレス値
destination 宛先キューまたはトピックの JNDI 名 jndiDestinationName
connectionFactory 接続ファクトリーの JNDI 名。 jndiConnectionFactory
targetService ターゲット・サービスのポート・コンポーネント名 targetService jms:propertyValue within jms:address
JNDI 関連のプロパティー (オプション)
initialContextFactory 初期コンテキスト・ファクトリーの名前 initialContextFactory
jndiProviderURL JNDI プロバイダー URL jndiProviderURL
JMS 関連のプロパティー (オプション)
deliveryMode 要求メッセージを永続的にするかどうかを指示します。 有効な値は DeliveryMode.NON_PERSISTENT (デフォルト) と DeliveryMode.PERSISTENT です。 JMSDeliveryMode
password 接続ファクトリーに対するアクセスの取得に使用するパスワード。 JMSPassword
priority 要求メッセージに関連付けられた JMS 優先順位。有効な値は 0 から 9 です。 デフォルト値は 4 です。 JMSDeliveryMode
replyTo 応答メッセージが送信される、JNDI 宛先キュー。 JMSReplyTo
timeToLive 要求メッセージの存続時間 (ミリ秒単位)値 0 は、無制限に存続することを表します。 JMSTimeToLive
userid 接続ファクトリーに対するアクセスの取得に使用するユーザー ID。 JMSUserid

以下にこのフォーマットの例を示します。

<jms:address> format:

<wsdl:port name="StockQuoteServicePort"

        binding="sqi:StockQuoteSoapJMSBinding">

    <jms:address destinationStyle="queue" 
        jndiConnectionFactoryName="myQCF"
        jndiDestinationName="myQ"
        initialContextFactory= "com.ibm.NamingFactory"
        jndiProviderURL="iiop://something:900/">

        <jms:propertyValue name="targetService"
                           type="xsd:string"
                           value="StockQuoteServicePort"/>

    </jms:address>

</wsdl:port>

<soap:address> format:

<wsdl:port name="StockQuoteServicePort" 
        binding="sqi:StockQuoteSoapJMSBinding">
    <soap:address location="jms:/queue?connectionFactory=myQCF&destination
=myQ&initialContextFactory=com.ibm.NamingFactory&jndiProviderURL
=iiop://something:900/&targetService=StockQuoteServicePort" />

</wsdl:port>



関連タスク
WSIF クライアント・アプリケーションが JMS を介してサービスを呼び出せるように、クライアントとサーバーを構成する
JMS 提供サービスへの WSIF サービスのリンク
関連資料
例 : WSDL 拡張を作成して、JMS の宛先で WSIF サービスが基幹サービスへアクセスできるようにする
参照トピック    

ご利用条件 | フィードバック

最終更新: Jan 21, 2008 7:05:28 PM EST
http://publib.boulder.ibm.com/infocenter/wasinfo/v6r1/index.jsp?topic=/com.ibm.websphere.express.iseries.doc/info/iseriesexp/ae/rwsf_prsjwe.html