Webサービスにおけるメッセージ交換は、本質的に信頼性の高いものではありません。追加のインフラストラクチャなしで、安全な環境におけるのと同じような方法で長期に渡って通信するには適していません。重要で、複雑なビジネス・プロセスにWebサービスを使用するには、安全にメッセージを交換できる必要があります。この目的を達成するために、Oracle Application Server Web Servicesには、OASIS WS-Reliability 1.1仕様に基づいて、信頼性のあるメッセージを保証するサービスのクオリティ(QOS)を追加する機能があります。
関連資料: WS-Reliability 1.1仕様の詳細は、 |
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仕様によって定義されています。
信頼性には次の機能が含まれます。
保証付き配信: 送信されたメッセージが受信されることを保証します。
重複の排除: 受信者側でメッセージが重複しないことを保証します(同じメッセージIDのメッセージは重複とみなされます)。
メッセージの保証付き配信および重複メッセージの排除: 送信されたすべてのメッセージが受信され、重複したメッセージは削除されることを保証します。
メッセージの順序付け: 送信されたメッセージの順序と同じ順序で受信されることを保証します。
サーバーで信頼性を有効化すると、これらの機能がすべて有効化されます。各機能は、構成ファイルまたはAPIのいずれかを使用して、クライアントによって使用されます。
この章の内容は、次のとおりです。
次の各項では、サーバーとクライアント間で信頼できるメッセージング機能を使用するために満たす必要のある要件について説明します。
メッセージがサーバー・サイドのメモリー・ストアまたはデータベース・ストアに保存される、信頼できるメッセージング機能を構成できます。データベース・ストアの使用を選択した場合、信頼できるサービスをデプロイする前に、サーバーからJNDIを介してデータベースにアクセスできる必要があります。
信頼できるメッセージング機能を有効化するには、クライアントおよびサーバーの両方に特定の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_ID
、REPLY_TO_URL
、URL_PATTERN
およびENDPOINT_ADDRESS
などのフィールドのデータベース列の幅は150に設定されています。ただし、それよりも長い名前を生成するアプリケーションもあります。そのような状況は、非常に長いURLまたはホスト名を使用している場合に発生する可能性があります。生成された名前が指定された列幅よりも長い場合は、データベース・エラーが戻されます。
この問題を回避するために、reliability-tables.sql
スクリプトを変更して、サーバー・サイドおよびクライアント・サイドの表の列幅を長くできます。例5-1に、GROUP_ID
、REPLY_TO_URL
、URL_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サービスおよびクライアントにその機能を構成する必要があります。次の項では、WebServicesAssemblerツールを使用してWebサービスに信頼性構成を追加する方法を説明します。構成は、トップダウンまたはボトムアップのいずれの方式によるWebサービスのアセンブリにも追加できます。ツールを使用して、Webサービス・クライアントをアセンブルすることもできます。どちらの場合も、構成はXMLファイルで指定されており、ddFileName
引数を使用してWebServicesAssemblerコマンドに渡されます。
信頼できるメッセージング機能をサポートする静的スタブおよびDIIクライアントのアセンブルの詳細は、「クライアントにおける信頼性の構成方法」を参照してください。
次に示す一般的な手順では、ボトムアップ方式でWebサービスに信頼性構成をアセンブルする方法を説明します。Javaクラス、EJB、JMSキューまたはデータベース・リソースからボトムアップ方式でWebサービスをアセンブルする詳細は、『Oracle Application Server Web Services開発者ガイド』で説明されています。
信頼性機能の設定を指定するXMLファイルを作成します。
ファイルは、oracle-webservices-10_0.xsdスキーマに基づいている必要があります。例5-3に、信頼性の構成を含むXMLファイルを示します。サーバーで使用可能なポート・レベルおよび操作レベルの信頼性機能は、「サーバー・サイドの信頼性構成要素」で説明されています。
適切な*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サービスのアセンブルの詳細は、『Oracle Application Server Web Services開発者ガイド』の「WSDLからのWebサービスのアセンブル」で説明されています。
XMLファイルで有効にする信頼性機能の設定を指定します。
サーバーで使用可能なポート・レベルおよび操作レベルの信頼性機能は、「サーバー・サイドの信頼性構成要素」で説明されています。
(オプション)WebサービスのWSDLに機能アサーションをアセンブルします。
Webサービスに機能アサーションをアセンブルする場合は、サービスをアセンブルする前にアサーションをWSDLにアセンブルしてください。これは、「トップダウン方式でのWebサービスへの機能アサーションのアセンブル方法」で説明されています。
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サービスをアセンブルして機能アサーションを含める場合は、サービスをアセンブルする前にアサーションをWSDLに追加してください。
WebServicesAssemblerコマンドgenQosWsdl
により、セキュリティおよび信頼性を指定したWSDLに追加できます。通常は、機能アサーションはデプロイメント・ディスクリプタ・ファイルで定義されます。
genQosWsdl
コマンドに次の引数を使用します。
ddFileName
: サーバー・サイドの信頼性構成要素を含むデプロイメント・ディスクリプタ・ファイルを指定します。
wsdl
: 要素を挿入するWSDLファイルの名前を指定します。
output
: 変更済WSDLを保存する場所を指定します。この引数を使用しない場合は、元のWSDLファイルを上書きします。
変更済WSDLをtopDownAssemble
コマンドへの入力として使用できます。topDownAssemble
に指定するgenQos
引数を、true
に設定する必要があります。
関連資料: このコマンドの詳細は、『Oracle Application Server Web Services開発者ガイド』の「genQosWsdl」を参照してください。 |
次に示す一般的な手順では、J2SE Webサービス・クライアント・プロキシに信頼性構成をアセンブルする方法を説明します。信頼できるメッセージ交換を実現するには、信頼性構成の値をサーバー・サイドとクライアント・サイドの両方で一致させる必要があります。
XMLファイルで有効にする信頼性機能の設定を指定します。
このファイルは、手動で記述することも、Oracle JDeveloperのようなツールで作成することもできます。構成ファイルは、生成されたクライアントのいくつかの組込み動作を設定するもので、oracle-webservices-client-10_0.xsd
スキーマで定義されています。必須とされる特定のサービスのクオリティ・プロパティ(重複の排除や保証付き配信など)がサーバー・サイドにある場合は、クライアントでもそれらのプロパティを指定する必要があります。
クライアントに設定できるポート・レベルおよび操作レベルの信頼性機能は、「クライアント・サイドの信頼性構成要素」で説明されています。
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サービス・クライアントに信頼性構成をアセンブルする方法を説明します。信頼できるメッセージ交換を実現するには、信頼性構成の値をサーバー・サイドとクライアント・サイドの両方で一致させる必要があります。
XMLファイルで有効にする信頼性機能の設定を指定します。
このファイルは、手動で記述することも、Oracle JDeveloperのようなツールで作成することもできます。構成ファイルは、生成されたクライアントのいくつかの組込み動作を設定するもので、oracle-webservices-client-10_0.xsd
スキーマで定義されています。必須とされる特定のサービスのクオリティ・プロパティ(重複の排除や保証付き配信など)がサーバー・サイドにある場合は、クライアントでもそれらのプロパティを指定する必要があります。
クライアントに設定できるポート・レベルおよび操作レベルの信頼性機能は、「クライアント・サイドの信頼性構成要素」で説明されています。
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ツールを使用してデプロイ後に変更できます。
この項の内容は、次のとおりです。
信頼性機能は、ポート・レベルおよび操作レベルで割り当てられます。
注意: メッセージの順序付けは、操作レベルまたはポート・レベルでは構成できません。メッセージの順序付けは操作全体で行われる可能性があるため、操作レベルで構成できません。メッセージの順序付けに対して信頼性または機密性を必要としない操作がある場合があるため、ポート・レベルで構成できません。 |
この項では、ポート・レベルで設定できる信頼性要素を説明します。ポート・レベル構成によって、メッセージが保存される場所が決定されます。
<repository>
要素のtype
属性の値によって、サーバーがメッセージをメモリー内に保存するかデータベース・ストアに保存するかが決定されます。type="memory"
の場合、メッセージはメモリー内のストアに保存されます。type="jdbc"
の場合、メッセージはデータベース・ストアに保存されます。
表5-1に、<repository>
およびoracle-webservices.xml
ファイルに使用できるその他のポート・レベルの信頼性要素の詳細を説明します。
注意: oracle-webservices-reliability-10_0.xsd スキーマ・ファイルは、信頼性要素を順序として定義します。信頼性構成では、信頼性要素は順番に出現する必要があります。 |
表5-1 サーバー・サイドの構成ファイルのポート・レベルの信頼性要素
要素名 | 説明 |
---|---|
<repository> |
サーバーがメッセージの保存に使用するストアの種類が指定されます。この要素には、次の属性があります。
メモリー・ストア( データベース・ストア( |
<ack-interval> |
非同期に処理されたメッセージに対する承認または障害の送信が試行される間隔が秒単位で指定されます。デフォルト値は60秒です。 |
<order-interval> |
|
<cleanup-interval> |
|
<ack-limit> |
|
<max-age> |
|
例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> |
|
<guaranteed-delivery-required> |
|
サーバーでは、信頼性の機能アサーションを使用して、エンドポイントに送信されるメッセージの種類を制限します。信頼性の機能アサーションは、Oracle JDeveloperのウィザードまたはWebServicesAssemblerコマンドを使用してWebサービスに追加できます。表5-3に、WS-Reliabilityに定義されている機能アサーションを説明します。
表5-3 WS-Reliabilityに定義されている機能アサーション
信頼性アサーション | 説明 |
---|---|
|
このアサーションは、重複排除のSOAPヘッダー要素のあるメッセージのみが処理されることを示します。重複の排除を示す正しいSOAPヘッダーなしで信頼できるエンドポイントに到達するメッセージは、SOAP障害を使用して拒否されます。 |
|
このアサーションは、保証付き配信のSOAPヘッダー要素のあるメッセージのみが処理されることを示します。保証付き配信を示すSOAPヘッダーなしで信頼できるエンドポイントに到達するメッセージは、SOAP障害を使用して拒否されます。 |
|
このアサーションは、様々な返信パターンがサポートされていることを示します。これらのアサーションは、エンドポイントの機能を明示的に示します。クライアントはこれらの機能を使用して、エンドポイントと対話する方法を決定します。 |
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> |
メッセージの保存に使用するストアの種類が示されます。この要素には、次の属性があります。
|
<retry-interval> |
|
<retry-limit> |
注意: |
<poll-interval> |
|
<cleanup-interval> |
|
<max-age> |
|
<standalone-listener-port> |
|
<async-poll-reply-to-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> |
|
<duplicate-elimination> |
|
<group-max-idle-time> |
|
<group-expiry-time> |
|
<expiry> |
|
<reply-pattern> |
|
<reply-to-url> |
|
OracleAS Web Servicesでは、クライアントに送信されたメッセージをメモリーとデータベースのいずれに保存するかを選択できます。データベースへのメッセージの保存は、メモリーにメッセージを保存するより利点があります。メモリーに保存されるメッセージには永続性がないため、クライアントで終了(JVM終了)が処理される、またはサーバーが停止すると、メッセージは失われます。
クライアント・メッセージをデータベースに保存することを選択した場合は、データベースおよびクライアントへの接続の詳細を指定する必要があります。クライアント・サイドのAPIを使用して、この情報をクライアントに渡すことはできません。そのかわり、クライアント・サイドの管理構成ファイルにあるポート・レベルの<repository>
要素の設定を指定する必要があります。この要素は、表5-4で説明されています。
次の項では、クライアント・メッセージを保存するデータベースの構成に関連するタスクを説明しています。
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クライアントは、アプリケーション・サーバーのデータソースと対話します。クライアントは、指定された場所で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要素は太字で強調してあります。
信頼性のクライアントがアプリケーション内で実行される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 |
|
ReliabilityClientFactory |
|
ReliabilityContext |
このクラスは、クライアントが含まれている信頼できるメッセージング機能のコンテキストを表します。コンテキストを使用して、クライアントのデフォルトの構成を上書きすることや、信頼性イベントにリスナーを追加することができます。 グループは動的に決定する必要があるため、順序付けされたメッセージのグループは、(静的構成ではなく)コンテキストを使用してのみ開始および終了できます。 |
ReliabilityEvent |
|
ReliabilityListener |
信頼性イベント(承認/障害)のリスナーです。クライアントは、信頼性リスナーを実装し、それを |
信頼性パッケージのAPIは、静的スタブおよびDIIクライアントの信頼性コンテキストの作成に使用できます。
信頼性コンテキストは、ReliabilityClient
クラスのcreateContext()
メソッドにより作成されます。コンテキストには、信頼性リスナー、メッセージの承認タイプ、重複メッセージの排除、保証付き配信、メッセージの有効期限および応答URLなどのその他の機能を設定できます。
静的スタブでは、信頼性コンテキストは現在のスレッドに設定されています。信頼性コンテキストのスコープ内のスタブで起動されるすべての操作は、そのコンテキストの信頼性の特性を継承します。
DIIクライアントでは、サービスの詳細はURIによってクライアントに渡されます。
例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();
次に示す項では、Application Server ControlおよびOracle JDeveloperで提供されている信頼性機能に対するサポートを説明します。
Application Server Controlにより、デプロイされたWebサービスの信頼性構成を表示、有効化および無効化できます。構成が変更されて適用されると、Webサービスは新しい構成値で実行されます。Application Server Controlは、ポートおよび操作レベルでWebサービスの信頼性オプションを設定する際に使用できます。
クライアントの信頼性構成を表示または変更するためには、Application Server Controlを使用できません。
次の手順で、Webサービスのデプロイ方法およびApplication Server Controlを使用して信頼性構成を読取りおよび変更する方法を一般的に説明します。
Webサービスをデプロイします。
Webサービスは、通常の方法でOC4Jの実行中のインスタンスにデプロイされます。WebサービスEARファイルのデプロイの詳細は、『Oracle Containers for J2EEデプロイメント・ガイド』で説明されています。
Application Server Controlを使用して、デプロイされたWebサービスの信頼できるメッセージを構成できます。
Application Server Controlツールにログインします。
「Webサービス」タブをクリックします。
デプロイしたWebサービスの名前を選択します。
「管理」タブをクリックします。
「有効化/無効化」機能をクリックします。
「信頼性」を「有効」列に移動して「OK」をクリックします。
Webサービスで信頼できるメッセージング機能が有効化されます。
この手順の詳細は、Application Server Controlのオンライン・ヘルプの「Webサービスの信頼性の構成」を参照してください。
Oracle JDeveloperは、OracleAS Web ServicesおよびクライアントWebサービスの管理構成ファイルの開発に使用できます。Oracle JDeveloperは、これらのファイルを最初に作成する際に役立ち、既存のファイルに管理構成を追加する際にも使用できます。
管理および信頼性の構成ウィザードは、インバウンドおよびアウトバウンドのSOAPメッセージのポートおよび操作レベルの信頼性の構成を支援します。
詳細は、次を参照してください。
Webサービスにセキュリティを含むWebサービス管理情報を追加する場合は、第3章「Webサービスの管理」を参照してください。
Webサービスにセキュリティ情報を追加する場合は、第4章「Webサービスのセキュリティの確保」および『Oracle Application Server Web Servicesセキュリティ・ガイド』を参照してください。
Webサービスに監査およびロギング情報を追加する場合は、第6章「メッセージの監査およびトレース」を参照してください。
セキュリティ構成を含むwsmgmt.xml
ファイルの内容については、付録A「Webサービス管理スキーマの概要」を参照してください。
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サービス・クライアントのアセンブル」を参照してください。
Webサービス管理構成を含むoracle-webservices.xml
デプロイメント・ディスクリプタの内容については、『Oracle Application Server Web Services開発者ガイド』の「Webサービスのパッケージ化およびデプロイ」を参照してください。
WebServicesAssemblerコマンドを使用してWebサービス・アーティファクトをアセンブルする場合は、『Oracle Application Server Web Services開発者ガイド』の「WebServicesAssemblerの使用方法」を参照してください。