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

戻る
戻る
 
次へ
次へ
 

5 Webサービスの信頼性の確保

Webサービスにおけるメッセージ交換は、本質的に信頼性の高いものではありません。追加のインフラストラクチャなしで、安全な環境におけるのと同じような方法で長期に渡って通信するには適していません。重要で、複雑なビジネス・プロセスにWebサービスを使用するには、安全にメッセージを交換できる必要があります。この目的を達成するために、Oracle Application Server Web Servicesには、OASIS WS-Reliability 1.1仕様に基づいて、信頼性のあるメッセージを保証するサービスのクオリティ(QOS)を追加する機能があります。


関連資料:

WS-Reliability 1.1仕様の詳細は、http://docs.oasis-open.org/wsrm/ws-reliability/v1.1/wsrm-ws_reliability-1.1-spec-os.pdfを参照してください。


WS-Reliability 1.1は、保証付き配信、重複メッセージの排除およびメッセージの順序付けなど、公開されている信頼できるWebサービスのメッセージ機能のための仕様で、Webサービス間の信頼性の高い通信を可能にします。信頼性の機能は、基礎となるトランスポート・プロトコルに制限されるのではなく、Simple Object Access Protocol(SOAP)の拡張に基づいています。この仕様により、プラットフォームやベンダーに依存せずに、様々なシステムで信頼の高い相互運用を行うことが可能になります。


注意:

Reliability 1.1仕様は、Microsoft、BEAおよびIBMなどが提言するWS-Reliabile Messaging仕様とは異なります。また、WS-Reliability Exchange(WS-Rx)仕様とも異なります。現行リリースでは、OracleAS Web Servicesはこれらの2つの仕様をサポートしていません。

信頼性の機能を使用すると、Webサービス・スタックのユーザーは、メッセージが重複することなく、保証付き配信とメッセージの順序付けを使用してSOAPメッセージを交換できます。信頼性の高い方法でのメッセージの配信を可能にする情報は、SOAPメッセージ・ヘッダーの拡張に含まれています。SOAPヘッダーの拡張、メッセージ・モデルの詳細、およびそれに関連付けられたセマンティックは、WS-Reliability仕様によって定義されています。

信頼性には次の機能が含まれます。

サーバーで信頼性を有効化すると、これらの機能がすべて有効化されます。各機能は、構成ファイルまたはAPIのいずれかを使用して、クライアントによって使用されます。

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

データベース・ストアの要件

次の各項では、サーバーとクライアント間で信頼できるメッセージング機能を使用するために満たす必要のある要件について説明します。

稼働中のデータベースの指定

メッセージがサーバー・サイドのメモリー・ストアまたはデータベース・ストアに保存される、信頼できるメッセージング機能を構成できます。データベース・ストアの使用を選択した場合、信頼できるサービスをデプロイする前に、サーバーからJNDIを介してデータベースにアクセスできる必要があります。

クライアントおよびサーバーへのSQL表のインストール

信頼できるメッセージング機能を有効化するには、クライアントおよびサーバーの両方に特定のSQL表をインストールする必要があります。それらの表をインストールするSQLスクリプトは、j2ee/home/database/webservices/reliability/oracleディレクトリに保存されています。

  • clear-tables.sql: サーバー・サイドの信頼性の高い表から、すべてのレコードを削除する際に使用できます。このスクリプトは利便性のために提供されており、表が修正できないほど一貫性のない状態である場合には、データベース管理者に使用を制限する必要があります。

  • drop-tables.sql: クライアントおよびサーバーの信頼性の高い表をすべて削除する際に使用できます。

  • reliability-tables.sql: クライアントおよびサーバーの両方に信頼性の高い表を作成できます。サーバーに必要な表は、RM_SERVER_MESSAGE_INFOおよびRM_SERVER_GROUP_INFOです。クライアントに必要な表は、RM_CLIENT_MESSAGE_INFOおよびRM_CLIENT_GROUP_INFOです。クライアントまたはサーバーのどちらか一方を開発している場合、インストールする必要があるのは対応するそれぞれの表のみです。

スクリプトは、次のSQL*Plusコマンドを使用してコマンドラインから実行できます。

sqlplus username/password @sql_script

このコマンドにおいて、usernameおよびpasswordは、SQLスクリプトを実行するためのユーザー名とパスワードで、sql_scriptはSQLスクリプトの名前です。

データベース列の幅の変更方法

デフォルトでは、GROUP_IDREPLY_TO_URLURL_PATTERNおよびENDPOINT_ADDRESSなどのフィールドのデータベース列の幅は150に設定されています。ただし、それよりも長い名前を生成するアプリケーションもあります。そのような状況は、非常に長いURLまたはホスト名を使用している場合に発生する可能性があります。生成された名前が指定された列幅よりも長い場合は、データベース・エラーが戻されます。

この問題を回避するために、reliability-tables.sqlスクリプトを変更して、サーバー・サイドおよびクライアント・サイドの表の列幅を長くできます。例5-1に、GROUP_IDREPLY_TO_URLURL_PATTERNおよびENDPOINT_ADDRESSフィールドの列幅が150から250に増加された、変更済のreliability-tables.sqlスクリプトを示します。

例5-1 列幅が変更されたreliability-tables.sql

CREATE TABLE RM_SERVER_MESSAGE_INFO (
GROUP_ID varchar(250),
SEQUENCE_NUM number,
TIMESTAMP number,
EXPIRY_TIME number,
RETRY_COUNT number,
ACK_STATUS varchar(50),
PROCESS_STATUS varchar(50),
REPLY_TO_URL varchar(250),
ENDPOINT_ADDRESS varchar(250),
URL_PATTERN varchar(250),
REPLY_PATTERN varchar(150),
FAULT_CODE varchar(50),
LAST_UPDATE number,
CONTENT_TYPE varchar(150),
SOAP_ACTION varchar(150),
MESSAGE BLOB,
PIPELINE_CONFIG BLOB,
CONSTRAINT RM_SERVER_MESSAGE_INFO_PK PRIMARY KEY (GROUP_ID, SEQUENCE_NUM));

CREATE TABLE RM_SERVER_GROUP_INFO (
GROUP_ID varchar(250) PRIMARY KEY,
SEQUENCE_NUM number,
LAST_UPDATE number,
TIMESTAMP number,
GROUP_EXPIRY_TIME number,
GROUP_MAX_IDLE number,
REPLY_TO_URL varchar(250),
ENDPOINT_ADDRESS varchar(250));

Webサービスへの信頼できるメッセージング機能の追加方法

信頼できるメッセージング機能を有効化するには、サーバー・サイドのWebサービスおよびクライアントにその機能を構成する必要があります。次の項では、WebServicesAssemblerツールを使用してWebサービスに信頼性構成を追加する方法を説明します。構成は、トップダウンまたはボトムアップのいずれの方式によるWebサービスのアセンブリにも追加できます。ツールを使用して、Webサービス・クライアントをアセンブルすることもできます。どちらの場合も、構成はXMLファイルで指定されており、ddFileName引数を使用してWebServicesAssemblerコマンドに渡されます。

信頼できるメッセージング機能をサポートする静的スタブおよびDIIクライアントのアセンブルの詳細は、「クライアントにおける信頼性の構成方法」を参照してください。

ボトムアップ方式でのWebサービスへの信頼性のアセンブル手順

次に示す一般的な手順では、ボトムアップ方式でWebサービスに信頼性構成をアセンブルする方法を説明します。Javaクラス、EJB、JMSキューまたはデータベース・リソースからボトムアップ方式でWebサービスをアセンブルする詳細は、『Oracle Application Server Web Services開発者ガイド』で説明されています。

  1. 信頼性機能の設定を指定するXMLファイルを作成します。

    ファイルは、oracle-webservices-10_0.xsdスキーマに基づいている必要があります。例5-3に、信頼性の構成を含むXMLファイルを示します。サーバーで使用可能なポート・レベルおよび操作レベルの信頼性機能は、「サーバー・サイドの信頼性構成要素」で説明されています。

  2. 適切な*Assembleコマンドを使用してWebサービスをアセンブルします。ddFileName引数を使用して、信頼性構成を含むXMLファイルの名前をコマンドに渡します。

    *Assembleコマンドの詳細は、『Oracle Application Server Web Services開発者ガイド』の「Webサービス・アセンブリ・コマンド」で説明されています。

    この引数の詳細は、『Oracle Application Server Web Services開発者ガイド』の「デプロイメント・ディスクリプタ引数」の項の「ddFileName」で説明されています。

    機能アサーションをWebサービスにアセンブルする場合は、genQos引数をtrueに設定して使用してください。機能アサーションの詳細は、「機能アサーションの使用」で説明されています。

例5-2に、ddFileName引数を使用してwsmBankServiceConfig.xmlの信頼性構成をWebサービスに追加するassemble Antタスクを示します。

例5-2 ボトムアップ方式でのWebサービスのアセンブリにおける信頼性構成の追加

<oracle:assemble appName="bank"
            targetNamespace="http://www.oracle.com/bank"
            typeNamespace="http://www.oracle.com/bank"
            serviceName="Banking"
            interfaceName="oracle.ws.server.bank.Bank"
            className="oracle.ws.server.bank.BankImpl"
            input="./build/classes/service"
            output="build"
            genQos="true"
            ear="build/bank.ear"
            style="rpc"
            use="encoded"
            createOneWayOperations="true"
            ddFileName="wsmBankServiceConfig.xml"
            >
        </oracle:assemble>

例5-3に、サーバー・サイドの信頼性構成のwsmBankServiceConfig.xmlの内容を示します。このファイルの内容は、<oracle-webservices>要素で囲まれていることに注意してください。信頼性構成は太字で強調してあります。

例5-3 サーバー・サイドの信頼性構成のサンプル

<oracle-webservices xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
   xsi:noNamespaceSchemaLocation="oracle-webservices-management-10_0.xsd"
   schema-major-version="10" schema-minor-version="0">
   <webservice-description name="Banking">
      <port-component name="HttpSoap11">
         <runtime enabled="reliability">
            <reliability>
               <repository name="bank-server-store" type="memory"/>
               <ack-interval value="60"/>
               <order-interval value="60"/>
               <cleanup-interval value="10000"/>
               <ack-limit value="10"/>
               <max-age value="86000"/>
            </reliability>
         </runtime>
         <operations>
            <operation name="deposit">
               <runtime>
                  <reliability>
                     <duplication-elimination-required value="true"/>
                     <guaranteed-delivery-required value="true"/>
                  </reliability>
               </runtime>
            </operation>
         </operations>
      </port-component>
   </webservice-description>
</oracle-webservices>

トップダウン方式でのWebサービスへの信頼性のアセンブル手順

次に示す一般的な手順では、トップダウン方式でWebサービスに信頼性構成をアセンブルする方法を説明します。トップダウン方式でのWebサービスのアセンブルの詳細は、『Oracle Application Server Web Services開発者ガイド』の「WSDLからのWebサービスのアセンブル」で説明されています。

  1. XMLファイルで有効にする信頼性機能の設定を指定します。

    サーバーで使用可能なポート・レベルおよび操作レベルの信頼性機能は、「サーバー・サイドの信頼性構成要素」で説明されています。

  2. (オプション)WebサービスのWSDLに機能アサーションをアセンブルします。

    Webサービスに機能アサーションをアセンブルする場合は、サービスをアセンブルする前にアサーションをWSDLにアセンブルしてください。これは、「トップダウン方式でのWebサービスへの機能アサーションのアセンブル方法」で説明されています。

  3. topDownAssembleコマンドをコールして、トップダウン方式でWebサービスをアセンブルします。

    ddFileName引数を使用して、信頼性構成を含むXMLファイルの名前をコマンドに渡します。

    WSDLに機能アサーションが含まれる場合、genQos引数をtrueに設定して使用します。機能アサーションの詳細は、「機能アサーションの使用」で説明されています。

    これらの引数の詳細は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssembler引数」の項の「ddFileName」および「genQos」を参照してください。

例5-4に、ddFileName引数を使用してwsmLoggingServiceConfig.xmlの信頼性構成をWebサービスに追加するtopDownAssemble Antタスクを示します。ddFileName引数は太字で強調してあります。

例5-4 トップダウン方式でのWebサービスのアセンブリにおける信頼性構成の追加

<oracle:topDownAssemble
            wsdl=" ./wsdl/LoggingFacility.wsdl"
            unwrapParameters="false"
            className="oracle.demo.topdowndoclit.service.DocLitLoggerImpl"
            input="build/classes/service"
            output="build"
            ear="dist/doclit_topdown.ear"
            mappingFileName="type-mapping.xml"
            packageName="oracle.demo.topdowndoclit.service"
            fetchWsdlImports="true"
            classpath="./build/classes/client"
            ddFileName="wsmLoggingServiceConfig.xml" 
</oracle:topDownAssemble>

トップダウン方式でのWebサービスへの機能アサーションのアセンブル方法

トップダウン方式でWebサービスをアセンブルして機能アサーションを含める場合は、サービスをアセンブルする前にアサーションをWSDLに追加してください。

WebServicesAssemblerコマンドgenQosWsdlにより、セキュリティおよび信頼性を指定したWSDLに追加できます。通常は、機能アサーションはデプロイメント・ディスクリプタ・ファイルで定義されます。

genQosWsdlコマンドに次の引数を使用します。

  • ddFileName: サーバー・サイドの信頼性構成要素を含むデプロイメント・ディスクリプタ・ファイルを指定します。

  • wsdl: 要素を挿入するWSDLファイルの名前を指定します。

  • output: 変更済WSDLを保存する場所を指定します。この引数を使用しない場合は、元のWSDLファイルを上書きします。

変更済WSDLをtopDownAssembleコマンドへの入力として使用できます。topDownAssembleに指定するgenQos引数を、trueに設定する必要があります。


関連資料:

このコマンドの詳細は、『Oracle Application Server Web Services開発者ガイド』の「genQosWsdl」を参照してください。


J2SE Webサービス・クライアント・プロキシへの信頼性のアセンブル手順

次に示す一般的な手順では、J2SE Webサービス・クライアント・プロキシに信頼性構成をアセンブルする方法を説明します。信頼できるメッセージ交換を実現するには、信頼性構成の値をサーバー・サイドとクライアント・サイドの両方で一致させる必要があります。

  1. XMLファイルで有効にする信頼性機能の設定を指定します。

    このファイルは、手動で記述することも、Oracle JDeveloperのようなツールで作成することもできます。構成ファイルは、生成されたクライアントのいくつかの組込み動作を設定するもので、oracle-webservices-client-10_0.xsdスキーマで定義されています。必須とされる特定のサービスのクオリティ・プロパティ(重複の排除や保証付き配信など)がサーバー・サイドにある場合は、クライアントでもそれらのプロパティを指定する必要があります。

    クライアントに設定できるポート・レベルおよび操作レベルの信頼性機能は、「クライアント・サイドの信頼性構成要素」で説明されています。

  2. genProxyコマンドを使用して、Webサービス・クライアントをアセンブルします。ddFileName引数を使用して、信頼性構成を含むXMLファイルの名前をコマンドに渡します。

    J2SEクライアントに管理構成を追加する方法の詳細は、「J2SEクライアントへの管理情報の追加方法」で説明されています。

    J2SE Webサービス・クライアントの作成方法の詳細は、『Oracle Application Server Web Services開発者ガイド』の「J2SE Webサービス・クライアントのアセンブル」で説明されています。

例5-5に、ddFileName引数を使用してwsmClientDD.xmlの信頼性構成をWebサービスに追加するgenProxy Antタスクを示します。ddFileName引数は太字で強調してあります。

例5-5 Webサービス・クライアントのアセンブリにおける信頼性構成の追加

<oracle:genProxy
       wsdl="http://localhost:8888/bankdemo/bank?WSDL"
       output="test/src"
       debug="true"
       packageName="oracle.generated"
       ddFileName="wsmClientDD.xml"/>
</oracle:genProxy>

例5-6に、クライアント・サイドの信頼性構成のwsmClientDD.xmlの内容を示します。このファイルの内容は、<port-info>タグで囲まれていることに注意してください。

例5-6 クライアント・サイドの信頼性構成のサンプル

...
<port-info>
   <runtime enabled="reliability">
      <reliability>
         <repository name="standalone-client-store" type="memory"/>
         <retry-interval value="60"/>
         <cleanup-interval value="10000"/>
         <poll-interval value="60"/>
         <retry-limit value="10"/>
         <max-age value="86000"/>
         <standalone-listener-port value="9876"/>
      </reliability>
   </runtime>
   <operations>
      <operation name="deposit">
         <runtime>
            <reliability>
               <guaranteed-delivery enabled="true"/>
               <duplicate-elimination enabled="true"/>
               <group-expiry-time value="860000"/>
               <reply-pattern value="Callback"/>
               <reply-to-url value="http://localhost:9876"/>
               <expiry value="860000"/>
            </reliability>
         </runtime>
      </operation>
   </operations>
</port-info>
...

J2EE Webサービス・クライアントへの信頼性のアセンブル手順

次に示す一般的な手順では、J2EE Webサービス・クライアントに信頼性構成をアセンブルする方法を説明します。信頼できるメッセージ交換を実現するには、信頼性構成の値をサーバー・サイドとクライアント・サイドの両方で一致させる必要があります。

  1. XMLファイルで有効にする信頼性機能の設定を指定します。

    このファイルは、手動で記述することも、Oracle JDeveloperのようなツールで作成することもできます。構成ファイルは、生成されたクライアントのいくつかの組込み動作を設定するもので、oracle-webservices-client-10_0.xsdスキーマで定義されています。必須とされる特定のサービスのクオリティ・プロパティ(重複の排除や保証付き配信など)がサーバー・サイドにある場合は、クライアントでもそれらのプロパティを指定する必要があります。

    クライアントに設定できるポート・レベルおよび操作レベルの信頼性機能は、「クライアント・サイドの信頼性構成要素」で説明されています。

  2. genInterfaceコマンドを使用して、Webサービス・クライアントを作成します。ddFileName引数を使用してコマンドに信頼性構成を渡します。

    J2EE Webサービス・クライアント作成およびパッケージ化の詳細は、『Oracle Application Server Web Services開発者ガイド』の「J2EE Webサービス・クライアントのアセンブル方法」で説明されています。

    J2EEクライアントに管理構成を追加する方法の詳細は、「J2EEクライアントへの管理情報の追加方法」で説明されています。

サーバーにおける信頼性の構成方法

この項では、サーバー・サイドのoracle-webservices.xmlファイルに存在する信頼性の構成要素を説明します。

デプロイされるその他のファイル同様、oracle-webservices.xmlも通常EARファイルに保存されます。EARがOracleAS Web Servicesにデプロイされると、oracle-webservices.xmlのWebサービス管理情報は、抽出されてwsmgmt.xmlに保存されます。管理構成は、Application Server Controlツールを使用してデプロイ後に変更できます。

この項の内容は、次のとおりです。


関連資料:

信頼性を含む管理情報をoracle-webservices.xmlに追加する方法の説明は、「サーバーへの管理情報の追加方法」を参照してください。


サーバー・サイドの信頼性構成要素

信頼性機能は、ポート・レベルおよび操作レベルで割り当てられます。


注意:

メッセージの順序付けは、操作レベルまたはポート・レベルでは構成できません。メッセージの順序付けは操作全体で行われる可能性があるため、操作レベルで構成できません。メッセージの順序付けに対して信頼性または機密性を必要としない操作がある場合があるため、ポート・レベルで構成できません。

サーバーにおけるポート・レベルの信頼性要素

この項では、ポート・レベルで設定できる信頼性要素を説明します。ポート・レベル構成によって、メッセージが保存される場所が決定されます。

<repository>要素のtype属性の値によって、サーバーがメッセージをメモリー内に保存するかデータベース・ストアに保存するかが決定されます。type="memory"の場合、メッセージはメモリー内のストアに保存されます。type="jdbc"の場合、メッセージはデータベース・ストアに保存されます。

表5-1に、<repository>およびoracle-webservices.xmlファイルに使用できるその他のポート・レベルの信頼性要素の詳細を説明します。


注意:

oracle-webservices-reliability-10_0.xsdスキーマ・ファイルは、信頼性要素を順序として定義します。信頼性構成では、信頼性要素は順番に出現する必要があります。

表5-1 サーバー・サイドの構成ファイルのポート・レベルの信頼性要素

要素名 説明

<repository>

サーバーがメッセージの保存に使用するストアの種類が指定されます。この要素には、次の属性があります。

  • jndiLocation: サーバーのデータソースのJNDI名を指定します。メッセージをデータベースに保存する場合にのみ必要です。

  • name: リポジトリの名前を指定するStringです。

  • type: 構成するストアの種類を決定します。typeに許容される値は、メモリー・ストアの場合はmemoryで、データベース・ストアの場合はjdbcです。デフォルトはmemoryです。

メモリー・ストア(memory)の場合、nameは必須属性です。その名前のストアがサーバーの別のアプリケーションに構成されている場合は、そのストアが使用されます。それ以外の場合は、新しいストアが構成されます。例5-7に、メモリー内のストアにメッセージを保存するポート・レベルの信頼性構成を示します。

データベース・ストア(jdbc)の場合、サーバーにデータソースが構成され、その場所がjndiLocationで指定されている必要があります。例5-8に、データベース・ストアにメッセージを保存するポート・レベルの信頼性構成を示します。

<ack-interval>

非同期に処理されたメッセージに対する承認または障害の送信が試行される間隔が秒単位で指定されます。デフォルト値は60秒です。

<order-interval>

value属性により、順序付けされていないメッセージが処理される間隔が秒単位で指定されます。デフォルトは60秒です。

<cleanup-interval>

value属性により、期限切れまたは無効なメッセージのストアの削除が試行される間隔が秒単位で指定されます。デフォルトは3600秒(60分)です。

<ack-limit>

value属性により、メッセージ承認の試行回数に制限が指定されます。デフォルト値は-1です。これは制限がないこと、または承認の試行回数が無制限であることを示します。値が0の場合は、承認が試行されないことを意味します。

<max-age>

value属性により、メッセージが保存される最大時間が指定されます。デフォルト値は86400秒(1日)です。


例5-7に、メモリー内のストアの信頼性を設定するために、oracle-webservices.xmlで使用される信頼性要素をリストします。

例5-7 メモリー内のストアに設定されているポート・レベルの信頼性

...
<port-component name="...">
   <runtime enabled="reliability">
      <reliability>
        <repository name="bank-server-store" type="memory"/>
        <ack-interval value="60"/>
        <order-interval value="60"/>
        <cleanup-interval value="3600"/>
        <ack-limit value="10"/>
        <max-age value="86400"/>
      </reliability>
   </runtime>
   <operations>
   ...
</port-component>

例5-8に、サーバー上に構成されたデータソースの信頼性要素をリストします。

例5-8 サーバー上に構成されたデータソースに設定されているポート・レベルの信頼性

...
<port-component name="...">
   <runtime enabled="reliability">
    <reliability>
      <repository type="jdbc" jndiLocation="jdbc/OracleManagedDS"/>
      <ack-interval value="60"/>
      <order-interval value="60"/>
      <cleanup-interval value="3600"/>
      <ack-limit value="10"/>
      <max-age value="86400"/>
    </reliability>
   </runtime>
   <operations>
   ...
</port-component>

サーバーにおける操作レベルの信頼性要素

この項では、操作レベルで設定できる信頼性要素を説明します。例5-9に、oracle-webservices.xmlで使用されている信頼性要素をリストします。

例5-9 サーバー・サイドの構成ファイルの操作レベルの信頼性要素

...
<port-component name="...">
  ...
         <operations>
            <operation name="deposit">
               <runtime>
                  <reliability>
                     <duplication-elimination-required value="true"/>
                     <guaranteed-delivery-required value="true"/>
                  </reliability>
               </runtime>
            </operation>
         </operations>
      </port-component>
...

表5-2では、oracle-webservices.xmlファイルに操作レベルで設定できる信頼性要素を説明します。これらのアサーションの値はtrueだが、クライアントから要件に従ったメッセージが送信されない場合、違反されたアサーションを示すSOAP障害が戻されます。


注意:

oracle-webservices-reliability-10_0.xsdスキーマ・ファイルは、信頼性要素を順序として定義します。信頼性構成では、信頼性要素は順番に出現する必要があります。

表5-2 サーバー・サイドの構成ファイルの操作レベルの信頼性要素

要素名 説明

<duplication-elimination-required>

trueに設定されている場合、信頼できないクライアントはこの操作を起動できないことを示します。具体的には、重複の排除のSOAPヘッダーがないメッセージは拒否されます。デフォルトはfalseです。

<guaranteed-delivery-required>

trueに設定されている場合、信頼できないクライアントはこの操作を起動できないことを示します。具体的には、保証付き配信のSOAPヘッダーがないメッセージは拒否されます。デフォルトはfalseです。


信頼性の機能アサーション

サーバーでは、信頼性の機能アサーションを使用して、エンドポイントに送信されるメッセージの種類を制限します。信頼性の機能アサーションは、Oracle JDeveloperのウィザードまたはWebServicesAssemblerコマンドを使用してWebサービスに追加できます。表5-3に、WS-Reliabilityに定義されている機能アサーションを説明します。

表5-3 WS-Reliabilityに定義されている機能アサーション

信頼性アサーション 説明

<duplicate-elimination required="true"/>

このアサーションは、重複排除のSOAPヘッダー要素のあるメッセージのみが処理されることを示します。重複の排除を示す正しいSOAPヘッダーなしで信頼できるエンドポイントに到達するメッセージは、SOAP障害を使用して拒否されます。

<guaranteed-delivery required="true">

このアサーションは、保証付き配信のSOAPヘッダー要素のあるメッセージのみが処理されることを示します。保証付き配信を示すSOAPヘッダーなしで信頼できるエンドポイントに到達するメッセージは、SOAP障害を使用して拒否されます。

<reply-patterns callback="true" poll="true" response="true"/>

このアサーションは、様々な返信パターンがサポートされていることを示します。これらのアサーションは、エンドポイントの機能を明示的に示します。クライアントはこれらの機能を使用して、エンドポイントと対話する方法を決定します。


Webサービスへの信頼性の機能アサーションの追加方法

Oracle JDeveloperまたはWebServicesAssemblerツールを使用して、機能アサーションをWebサービスに追加、または単に、既存のWSDLにアサーションを挿入します。詳細は、「Webサービスへの機能アサーションのアセンブル方法」で説明されています。

クライアントにおける信頼性の構成方法

APIまたは構成ファイルを使用して、クライアントの信頼性を構成できます。

クライアント・サイドの信頼性構成要素

信頼できるメッセージ交換を実現するには、信頼性構成の値をサーバー・サイドとクライアント・サイドの両方で一致させる必要があります。この項では、クライアント・サイドの構成要素のみを説明します。


関連資料:

サーバー・サイドの要素の詳細は、「サーバー・サイドの信頼性構成要素」を参照してください。


クライアントでは、信頼性要素は構成ファイルに保存されています。ファイル名とファイルの場所は、クライアントがJ2EEであるかJ2SEであるかによって異なります。

  • J2EEサーブレット、EJB、Webアプリケーション・クライアントの場合、構成ファイルは次のようになります。

    • META-INF/orion-ejb-jar.xml(EJBクライアントの場合)

    • WEB-INF/orion-web.xml(JSPまたはサーブレット・クライアントの場合)

    • META-INF/orion-application-client.xml(Webアプリケーション・クライアントの場合)

  • J2SEクライアントの場合、構成ファイルは<generated_name>_Stub.xmlで、generated_nameはWSDLのtargetNamespaceおよびportから導出されます。

信頼性は、ポート・レベルおよび操作レベルで割り当てられます。

クライアントにおけるポート・レベルの信頼性要素

この項では、クライアントのポート・レベルで設定できる信頼性要素を説明します。例5-10に、クライアント・サイドの構成ファイルで使用される信頼性要素をリストします。

例5-10 クライアント・サイドの構成ファイルのポート・レベルの信頼性要素

...
<port-info>
   <runtime enabled="reliability">
       <reliability>
           <repository name="standalone-client-store" type="memory"/>
           <retry-interval value="60"/>
           <retry-limit value="10"/>
           <poll-interval value="60"/>
           <cleanup-interval value="3600"/>
           <max-age value="86400"/>
           <standalone-listener-port value="8008"/>
           <async-poll-reply-to-url value="http://host:port"/>
       </reliability>
   </runtime> 
...
</port-info>

表5-4に、ポート・レベルで設定される信頼性要素を説明します。


注意:

oracle-webservices-reliability-10_0.xsdスキーマ・ファイルは、信頼性要素を順序として定義します。信頼性構成では、信頼性要素は順番に出現する必要があります。

表5-4 クライアント・サイドの構成ファイルのポート・レベルの信頼性要素

要素名 説明

<repository>

メッセージの保存に使用するストアの種類が示されます。この要素には、次の属性があります。

  • connection-driver: このデータソースのJDBCドライバ・クラス名で、java.sql.Connectionを処理するデータソースで使用される場合もあります。データソースの多くでは、ドライバはoracle.jdbc.driver.OracleDriverです。この属性が適用されるのは、クラス属性がcom.evermind.sql.DriverManagerDataSourceであるエミュレートしたデータソースのみです。

  • jndiLocation: サーバーのデータソースのJNDI名を指定します。メッセージをデータベースに保存する場合にのみ必要です。

  • name: リポジトリの名前を指定するStringです。

  • password: レポジトリに対するユーザーのパスワードを指定します。

  • type: (必須)メモリー・ストアまたはデータベース・ストアを構成するかどうか指定します。typeに許容される値は、メモリー・ストアの場合はmemoryで、データベース・ストアの場合はjdbcです。デフォルトのストアの種類は、メモリー・ストアです。

    memoryが指定されている場合、nameは必須属性です。同じ名前のストアが別のサーバー・アプリケーションに構成されている場合は、そのストアが使用されます。それ以外の場合は、新しいストアが構成されます。

    jdbcが指定されている場合は、クライアント・サイドのデータベース・サポートを指定する必要があります。J2EEクライアントの場合は、データソースが構成され、その場所がjndiLocationで指定されている必要があります。クライアント・サイドのデータベースの構成の詳細は、「クライアント・サイドのデータベース・サポートの構成方法」で説明されています。

  • url: データベース接続のURLを指定します。

  • username: リポジトリにアクセス可能なユーザー名を指定します。

<retry-interval>

value属性により、承認または障害を受信していないメッセージの再送信が試行される間隔が指定されます。デフォルト値は60秒です。

<retry-limit>

value属性により、メッセージが再試行される回数に制限が指定されます。デフォルト値は10です。-1は制限がないこと、または再試行回数が無制限であることを示します。

注意: value属性が0に設定されている場合、クライアントはメッセージの再送信を試行しません。これにより、保証付き配信のサービスのクオリティは事実上無効になります。value属性が0に設定されている場合、最適化として、信頼性スタックによりデータベース内にメッセージが保持されます。メッセージが宛先に到達し承認が戻されるという保証を作成できないため、これらのメッセージに対するポーリングは実行されません。

<poll-interval>

value属性により、承認を受信していない信頼できるメッセージのために、ポーリング・メッセージがサーバーに送信される間隔が秒単位で指定されます。デフォルト値は60秒です。

<cleanup-interval>

value属性により、期限切れまたは無効なメッセージのストアの削除が試行される間隔が秒単位で指定されます。デフォルトは3600秒(60分)です。

<max-age>

value属性により、メッセージが保存される最大時間が指定されます。デフォルト値は86400秒(1日)です。

<standalone-listener-port>

value属性により、承認または障害を受信するためにリスナーが起動されるポートが指定されます。これは、承認を送信するインフラストラクチャがないJ2SEクライアントに使用されます。クライアントがJ2EEアプリケーションに存在する場合は、指定されたサーブレットが使用されます。

<async-poll-reply-to-url>

value属性により、非同期ポーリングを実行する場合に、承認および障害が送信されるURLが指定されます。通常、このURLは、リスナーがリスニングするポートとクライアントのホスト名です。


クライアントにおける操作レベルの信頼性要素

この項では、クライアントの操作レベルで設定できる信頼性要素を説明します。例5-11に、クライアント・サイドの構成ファイルで使用される信頼性要素をリストします。

例5-11 クライアント・サイドの構成ファイルの操作レベルの信頼性要素

<port-info>
...
   <operations>
      <operation name="...">
         <runtime>
            <reliability>
               <guaranteed-delivery enabled="true"/>
               <duplicate-elimination enabled="true"/>
               <group-max-idle-time value="5"/>
               <group-expiry-time value="86400"/>
               <expiry value="3600"/>
               <reply-pattern value="Callback"/>
               <reply-to-url value="http://localhost:8008"/>
            </reliability>
         </runtime>
      </operation>
   </operations>
</port-info>

表5-5に、操作レベルで設定できる信頼性要素を説明します。

<group-max-idle-time>または<group-expiry-time>のいずれかに値を指定する必要があります。両方の要素が指定されている場合は、<group-expiry-time>の値が優先されます。


注意:

oracle-webservices-reliability-10_0.xsdスキーマ・ファイルは、信頼性要素を順序として定義します。信頼性構成では、信頼性要素は順番に出現する必要があります。

表5-5 クライアント・サイドの構成ファイルの操作レベルの信頼性要素

要素名 説明

<guaranteed-delivery>

enabled属性がtrueの場合、メッセージの保証付き配信が有効化されます。デフォルト値はtrueです。

<duplicate-elimination>

enabled属性がtrueの場合、メッセージの重複の排除が有効化されます。デフォルト値はtrueです。

<group-max-idle-time>

value属性により、一連のメッセージに対して最大のアイドル時間が秒単位で指定されます。この要素はオプションです。

<group-expiry-time>

value属性により、グループ内のすべてのメッセージに対して有効期限が秒単位で指定されます。<group-expiry-time>の値は、<expiry>に設定されている値よりも大きい必要があります。デフォルト値は84600秒(1日)です。

<expiry>

value属性により、グループ内の1つのメッセージの有効期限が指定されます。たとえば、メッセージが有効期限よりも長い期間に渡って承認されていない場合は、メッセージ配信はそれ以上試行されません。クライアントには障害が通知されます。

<group-expiry-time>に値が設定されている場合、その値は<expiry>よりも大きい値である必要があります。デフォルトは3600秒(60分)です。

<reply-pattern>

value属性は、Callback(非同期承認/障害)、Response(同期承認/障害)またはPolling(承認または障害のポーリング)のいずれかです。デフォルト値はPollingです。

Callbackを使用する場合は、リスナーを構成する必要があります。これは、J2SEクライアントではできません。

<reply-pattern>要素を設定する必要があるのは、<guaranteed-delivery>trueの場合のみです。

<reply-to-url>

value属性により、非同期承認が必要なメッセージに対して承認および障害が送信されるURLが指定されます。通常、このURLは、リスナーがリスニングするポートとクライアントのホスト名です。

<reply-to-url>要素を設定する必要があるのは、<guaranteed-delivery>trueの場合のみです。


クライアント・サイドのデータベース・サポートの構成方法

OracleAS Web Servicesでは、クライアントに送信されたメッセージをメモリーとデータベースのいずれに保存するかを選択できます。データベースへのメッセージの保存は、メモリーにメッセージを保存するより利点があります。メモリーに保存されるメッセージには永続性がないため、クライアントで終了(JVM終了)が処理される、またはサーバーが停止すると、メッセージは失われます。

クライアント・メッセージをデータベースに保存することを選択した場合は、データベースおよびクライアントへの接続の詳細を指定する必要があります。クライアント・サイドのAPIを使用して、この情報をクライアントに渡すことはできません。そのかわり、クライアント・サイドの管理構成ファイルにあるポート・レベルの<repository>要素の設定を指定する必要があります。この要素は、表5-4で説明されています。

次の項では、クライアント・メッセージを保存するデータベースの構成に関連するタスクを説明しています。

J2SEクライアントからメッセージを保存するデータベースの構成方法

J2SEクライアントの場合、データベース接続の確立に必要なすべてのパラメータを指定する必要があります。データベース名、URI、接続タイプ、接続ドライバ、ユーザー名およびパスワードなどの情報は、すべてrepository要素の属性です。この情報を、<generated_name>_Stub.xmlファイルに入力します。ここでgenerated_nameはWSDLのターゲット名前空間およびポート名から導出されます。

例5-12に、J2SEクライアントのデータベース接続の構成を示します。J2SEクライアントでは、データベースへの接続にすべてのrepository属性が必要であることに注意してください。

例5-12 J2SEクライアントのデータベース接続

<reliability>
    <repository
        name="bank-client-store"
        type="jdbc"
        connection-driver="org.hsqldb.jdbcDriver"
        username="SCOTT"
        password="TIGER"
        url="jdbc:hsqldb:testdb" />
    <retry-interval value="60" />
    <retry-limit value="10" />
    <poll-interval value="60" />
    <cleanup-interval value="3600" />
    <max-age value="86400" />
    <standalone-listener-port value="9999" />
</reliability>

J2EEクライアントからメッセージを保存するデータベースの構成方法

通常、J2EEクライアントは、アプリケーション・サーバーのデータソースと対話します。クライアントは、指定された場所でJNDIルックアップを実行してデータソースに接続します。

クライアントに基づき、次に示すいずれかのファイルに情報を入力します。

  • META-INF/orion-ejb-jar.xml(EJBクライアントの場合)

  • WEB-INF/orion-web.xml(JSPまたはサーブレット・クライアントの場合)

  • META-INF/orion-application-client.xml(Webアプリケーション・クライアントの場合)

信頼できるクライアントに使用するデータソースは、ローカル・トランザクションを使用するよう構成されている必要があります。ローカル・トランザクションを宣言するには、<managed-data-source>要素に属性tx-level="local"を追加します。次に例を示します。

...
 <managed-data-source name="OracleDS" tx-level="local"
            jndi-name="jdbc/OracleManagedDS" ...
     />
 ...

例5-13では、repositoryの属性typeおよびjndiLocationの値により、J2EEクライアントのデータソースのタイプと場所の詳細が指定されています。repository要素は太字で強調してあります。

例5-13 J2EEクライアントのデータベース接続

<reliability>
     <repository 
          type="jdbc"
          jndiLocation="jdbc/OracleManagedDS"/>
     <retry-interval value="60" />
     <retry-limit value="10" />
     <poll-interval value="60" />
     <cleanup-interval value="3600" />
     <max-age value="86400" />
</reliability>

J2EEクライアントのリスナーの構成方法

信頼性のクライアントがアプリケーション内で実行されるJ2EEクライアントでは、アプリケーションで使用するためにサーブレット・クラスoracle.j2ee.ws.reliability.AckFaultServletが用意されています。

例5-14に、アプリケーションのweb.xmlファイルに追加する必要のあるコードを示します。

例5-14 J2EEクライアントのリスナー構成

<servlet>
    <servlet-name>wsrm</servlet-name>
    <servlet-class>oracle.j2ee.ws.reliability.AckFaultServlet</servlet-class>
    <load-on-startup>1</load-on-startup>
</servlet>
    <servlet-mapping>
        <servlet-name>wsrm</servlet-name>
        <url-pattern>/wsrm/*</url-pattern>
    </servlet-mapping>

replyTo URLは、AckFaultServletがマッピングされるURLに設定する必要があります。replyTo URLがスタンドアロン・リスナーのhost:port値と一致する必要のあるJ2SEの場合とは対照的です。

プログラムによるクライアント・サイドの信頼性の構成方法

OracleAS Web Servicesには、プログラムにより信頼性の機能を構成し、アプリケーション・レベルで承認と障害の通知を受信する機能があります。この機能は、信頼性の機能を管理するためのクライアント・レベルのAPIである、oracle.webservices.reliabilityパッケージによって提供されます。

このパッケージに含まれている機能を使用すると、デフォルトの構成、または初めからクライアントに指定されていた構成を上書きできます。

Webサービスにメッセージの順序付けを実装する場合は、APIを使用する必要があります。現在、APIを使用した場合のみ、順序付けされたメッセージのグループを開始および終了できます。

また、このAPIは、信頼性ポリシーをメッセージごとに適用する場合にも使用できます。

表5-6に、oracle.webservices.reliabilityパッケージのクラスをまとめます。


関連資料:

フィールドおよびメソッド・レベルの説明などのクラスの詳細は、『Oracle Application Server Web Services Java API Reference』を参照してください。


表5-6 信頼性のクライアントAPI

クラス名 説明

ReliabilityClient

ReliabilityClientには、非同期メッセージを受信するためのリスナー、およびクライアントに構成されたストアが保持されます。ReliabilityContextインスタンス用のファクトリです。

ReliabilityClientFactory

ReliabilityClientを作成するためのファクトリ・クラスです。

ReliabilityContext

このクラスは、クライアントが含まれている信頼できるメッセージング機能のコンテキストを表します。コンテキストを使用して、クライアントのデフォルトの構成を上書きすることや、信頼性イベントにリスナーを追加することができます。

グループは動的に決定する必要があるため、順序付けされたメッセージのグループは、(静的構成ではなく)コンテキストを使用してのみ開始および終了できます。

ReliabilityEvent

ReliabilityListenerに送信されるイベントです。

ReliabilityListener

信頼性イベント(承認/障害)のリスナーです。クライアントは、信頼性リスナーを実装し、それをReliabilityContextに追加して通知を受信できます。


信頼性パッケージのAPIは、静的スタブおよびDIIクライアントの信頼性コンテキストの作成に使用できます。

信頼性コンテキストは、ReliabilityClientクラスのcreateContext()メソッドにより作成されます。コンテキストには、信頼性リスナー、メッセージの承認タイプ、重複メッセージの排除、保証付き配信、メッセージの有効期限および応答URLなどのその他の機能を設定できます。

静的スタブでは、信頼性コンテキストは現在のスレッドに設定されています。信頼性コンテキストのスコープ内のスタブで起動されるすべての操作は、そのコンテキストの信頼性の特性を継承します。

DIIクライアントでは、サービスの詳細はURIによってクライアントに渡されます。


関連資料:

管理の詳細をDII Webサービス・クライアントに渡す方法の詳細は、「プログラムによるDII Webサービス・クライアントへの管理構成の追加方法」を参照してください。


静的スタブおよびDIIクライアント・コードへの信頼できるメッセージング・サポートの追加

例5-15に、genProxyによって生成されるスタブの信頼性を高めるコードを示します。コード・サンプルでは、クライアントの存続期間を通して使用される信頼性コンテキストが作成されています(client.createContext())。このコンテキストは、作成時にはThreadContextに設定されています。これにより、銀行スタブの操作はコンテキストから信頼性の特性を継承することができます。

信頼性は、受信したメッセージの非同期承認を戻すように設定されています(setAcknowledgmentType)。コードにより、メッセージが配信されること(setGuaranteedDeliveryEnabled)、および重複メッセージが排除されること(setDuplicateEliminationEnabled)が保証されています。

例5-15 静的スタブ・クライアントの信頼性コード

ReliabilityClient client= ReliabilityClientFactory.getClientFactory().getClient();
ReliabilityContext reliabilityContext = client.createContext();

reliabilityContext.setAcknowledgmentType(ReliabilityContext.ACKNOWLEDGMENT_TYPE_CALLBACK);
reliabilityContext.setDuplicateEliminationEnabled(true);
reliabilityContext.setGuaranteedDeliveryEnabled(true);

Banking banking = new Banking_Impl();
Bank bank = banking.getBankPort();
bank.deposit(new Deposit("checking", 100));

例5-16に、DIIクライアント用の同じクライアント・コードを示します。この場合、サービス名および預金の詳細はURIを使用して動的に取得されます。

例5-16 DIIクライアントの信頼性コード

ReliabilityClient client = ReliabilityContextFactory.getDefault().getClient();
ReliabilityContext reliabilityContext = client.createContext();

reliabilityContext.setAcknowledgmentType(ReliabilityContext.ACKNOWLEDGMENT_TYPE_CALLBACK);
reliabilityContext.setDuplicateEliminationEnabled(true);
reliabilityContext.setGuaranteedDeliveryEnabled(true);

Service service = ServiceFactory.newInstance().createService(new  QName("http://oracle.com/test/wsdl","TestService","test") );
Call call = service.createCall(new QName("http://oracle.com/test/wsdl","TestServicePort"),
                   new QName("http://oracle.com/test/wsdl","deposit"));
call.setProperty(ClientConstants.CLIENT_CONFIG,
                   new File("wsmClient.xml"));

クライアント・コードにおけるメッセージの順序付けの実装

例5-17に、メッセージの順序付けを実行するクライアント・コードを示します。前の例同様、クライアントの存続期間を通して使用される信頼性コンテキストが作成されています(reliabilityClient.createContext())。メッセージが送信時と同じ順序で受信されるように、startMessageOrderingおよびendMessageOrderingメソッド内にメッセージを送信できるコードを埋め込みます。これらのメソッドは太字で強調してあります。

メッセージの順序付けが機能するには、メソッドsetDuplicateEliminationEnabledおよびsetGuaranteedDeliveryEnabledが存在し、trueに設定されている必要があることに注意してください。これらのメソッドも太字で強調してあります。

例5-17 クライアントにおけるメッセージの順序付け

reliabilityContext = reliabilityClient.createContext();
            reliabilityContext.setAcknowledgmentType(ReliabilityContext.ACKNOWLEDGMENT_TYPE_CALLBACK);
            reliabilityContext.setDuplicateEliminationEnabled(true);
            reliabilityContext.setGuaranteedDeliveryEnabled(true);
            reliabilityContext.startMessageOrdering();

      Banking banking = new Banking_Impl();
      Bank bank = banking.getBankPort();
            bank.deposit("Checking", 10.0);
            bank.withdraw("Checking", 5.0);

            reliabilityContext.endMessageOrdering();

Webサービスの信頼性に対するツールのサポート

次に示す項では、Application Server ControlおよびOracle JDeveloperで提供されている信頼性機能に対するサポートを説明します。

Webサービスの信頼性に対するApplication Server Controlのサポート

Application Server Controlにより、デプロイされたWebサービスの信頼性構成を表示、有効化および無効化できます。構成が変更されて適用されると、Webサービスは新しい構成値で実行されます。Application Server Controlは、ポートおよび操作レベルでWebサービスの信頼性オプションを設定する際に使用できます。

クライアントの信頼性構成を表示または変更するためには、Application Server Controlを使用できません。

次の手順で、Webサービスのデプロイ方法およびApplication Server Controlを使用して信頼性構成を読取りおよび変更する方法を一般的に説明します。

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

    Webサービスは、通常の方法でOC4Jの実行中のインスタンスにデプロイされます。WebサービスEARファイルのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』で説明されています。

  2. Application Server Controlを使用して、デプロイされたWebサービスの信頼できるメッセージを構成できます。

    1. Application Server Controlツールにログインします。

    2. 「Webサービス」タブをクリックします。

    3. デプロイしたWebサービスの名前を選択します。

    4. 「管理」タブをクリックします。

    5. 「有効化/無効化」機能をクリックします。

    6. 「信頼性」を「有効」列に移動して「OK」をクリックします。

Webサービスで信頼できるメッセージング機能が有効化されます。

この手順の詳細は、Application Server Controlのオンライン・ヘルプの「Webサービスの信頼性の構成」を参照してください。

Webサービスの信頼性に対するOracle JDeveloperのサポート

Oracle JDeveloperは、OracleAS Web ServicesおよびクライアントWebサービスの管理構成ファイルの開発に使用できます。Oracle JDeveloperは、これらのファイルを最初に作成する際に役立ち、既存のファイルに管理構成を追加する際にも使用できます。

管理および信頼性の構成ウィザードは、インバウンドおよびアウトバウンドのSOAPメッセージのポートおよび操作レベルの信頼性の構成を支援します。


関連資料:

ウィザードで構成できる信頼性要素の詳細は、「サーバーにおけるポート・レベルの信頼性要素」および「サーバーにおける操作レベルの信頼性要素」を参照してください。


制限事項

「Webサービスの信頼性の確保」を参照してください。

追加情報

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