Oracle® Fusion Middleware

Oracle Infrastructure Webサービス開発者ガイド

11gリリース1(11.1.1.9)

B61390-06(原本部品番号:E15184-07)

2015年4月

Oracle Infrastructure Webサービスを開発して使用するソフトウェア開発者向けのドキュメントです。

Oracle Fusion Middleware Oracle Infrastructure Webサービス開発者ガイド, 11gリリース1 (11.1.1.9)

B61390-06

Copyright © 2009, 2015, Oracle and/or its affiliates.All rights reserved.

原本著者: Oracle Corporation

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。適用されるお客様とOracle Corporationとの間の契約に別段の定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。適用されるお客様とOracle Corporationとの間の契約に定めがある場合を除いて、Oracle Corporationおよびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 Oracle Infrastructure Webサービスの概要

- Oracle Infrastructure Webサービスの概要

- Oracle Infrastructure Webサービスおよびクライアントのタイプ

- サポートされている標準

- 関連ドキュメント

2 Oracle Infrastructure Webサービスへのポリシーのアタッチ

- ポリシーとは

- ポリシー・セットについて

- Oracle WSMの事前定義済のポリシーおよびアサーション・テンプレート

- 注釈を使用したWebサービスへのポリシーのアタッチ

- Oracle JDeveloperを使用したポリシーのアタッチ

- Oracle Enterprise Manager Fusion Middleware Controlを使用したポリシーのアタッチ

- WebLogic Scripting Tool(WLST)を使用したポリシーの添付

3 Oracle Infrastructure Webサービスの保護

- Webサービスのセキュリティの概要

- Oracle WSMの事前定義済のセキュリティ・ポリシーおよびアサーション・テンプレート

- セキュリティ・ポリシーのアタッチ

- セキュリティ・ポリシーの構成

4 非同期Webサービスの開発

- 非同期Webサービスの概要

- 単一のリクエスト・キューを使用した非同期Webサービス

- リクエスト・キューおよびレスポンス・キューを使用した非同期Webサービス

- クライアントから見た非同期Webサービス・コールの全体像

- 非同期メッセージの相関処理

- JDeveloperを使用した非同期Webサービスの開発とデプロイ

- 非同期Webサービスの開発

- リクエスト・キューおよびレスポンス・キューの作成

- デフォルトのWebLogic JMSキューの使用

- クラスタ・ドメインでのデフォルトのWebLogic JMSキューの使用

- 非クラスタ・ドメインでのデフォルトのWebLogic JMSキューの使用

- JMS配信失敗パラメータのチューニング

- カスタムのリクエスト・キューおよびレスポンス・キューの作成

- 実行時のリクエスト・キューおよびレスポンス・キューの管理

- リクエスト・キューおよびレスポンス・キューの保護

- JMSシステム・ユーザーの構成(オプション)

- リクエスト・キューおよびレスポンス・キューの保護を目的としたWLSTスクリプトの実行

- リクエストおよびレスポンスのキュー構成の確認

- コールバック・サービスの構成

- 非同期WebサービスのためのSSL構成

- 非同期Webサービス・クライアントの定義

- 非同期クライアント・コードの更新

- コールバック・サービス・コードの更新

- 非同期Webサービスおよびクライアントへのポリシーのアタッチ

- 非同期Webサービス・クライアントへのポリシーのアタッチ

- 非同期Webサービスおよびコールバック・サービスへのポリシーのアタッチ

- コールバック・クライアントへのポリシーのアタッチ

5 Webサービスの信頼性のあるメッセージングの使用

- Webサービスの信頼性のあるメッセージングの概要

- 事前定義済の信頼性のあるメッセージング・ポリシー

- 信頼性のあるメッセージング・ポリシーのアタッチ

- 信頼性のあるメッセージング・ポリシーの構成

6 Webサービス原子性トランザクションの使用

- Webサービス原子性トランザクションの概要

- Oracle SOA Suite WebサービスでのWebサービス原子性トランザクションの有効化(インバウンド)

- Oracle SOA Suite参照でのWebサービス原子性トランザクションの有効化(アウトバウンド)

- Webサービス原子性トランザクションの構成

- コーディネータと参加者の間で交換されるメッセージの保護

7 MTOMエンコード・メッセージ添付ファイルの使用

- メッセージ転送最適化メカニズムの概要

- 事前定義済のMTOMアタッチメント・ポリシー

- MTOMポリシーのアタッチ

- MTOMポリシーの構成

8 RESTful Webサービスの開発

- RESTful Webサービスの概要

- RESTful Webサービス・リクエストが作成および処理される仕組み

- HTTP Getリクエストの構築

- HTTP Postリクエストの構築

- RESTfulレスポンスの構築

- RESTful Webサービスの有効化

- RESTful Webサービスのサポートの制限事項

9 相互運用性のガイドライン

- Webサービスの相互運用性の概要

- Webサービスの相互運用性に関わる組織

- SOAPBuildersコミュニティ

- WS-Interoperability

- 相互運用性のあるWebサービスを作成するための一般的なガイドライン

- Webサービスをトップダウン方式で設計する

- 最初はXSDを使用してデータ型を設計する

- データ型はシンプルにする

- 1次元配列を使用する

- 空の配列と配列へのNULL参照とを区別する

- スパース配列、可変サイズ配列または多次元配列は使用しない

- xsd:anyTypeは使用しない

- サポートされていないxsd:typeはSOAPElementにマッピングする

- NULL値は慎重に使用する

- WSDLの検証にコンプライアンス・テスト・ツールを使用する

- 各プラットフォームにネイティブの型の違いを考慮する

- RPC-encodedメッセージ書式は使用しない

- 名前の競合を回避する

- メッセージ・ハンドラ、カスタム・シリアライザまたはインターセプタを使用する

- WS-*仕様は慎重に適用する

A 注釈リファレンス

- 注釈の概要

- @AsyncWebService注釈

- @AsyncWebServiceQueue注釈

- @AsyncWebServiceResponseQueue注釈

- @CallbackManagementPolicy注釈

- @CallbackMethod注釈

- @CallbackMtomPolicy注釈

- @CallbackProperties注釈

- @CallbackSecurityPolicy注釈

- @PortableWebService注釈

- @PortableWebServiceProvider注釈

- @Property注釈

- @ResponseWebService注釈

- @Retry注釈

はじめに

ここでは、対象読者、ドキュメントのアクセシビリティの機能、およびこのガイド(Oracle Infrastructure Webサービス開発者ガイド)で使用している表記規則について説明します。

対象読者

このドキュメントは、SOA、ADF、WebCenterサービスなどのOracle Infrastructure Webサービスを開発するプログラマを対象としています。

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

サポートをご購入のOracleのお客様は、My Oracle Supportにアクセスして電子サポートを受けることができます。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、Oracle Fusion Middlewareのドキュメント・セットにある次のドキュメントを参照してください。

- 『Oracle Fusion Middleware Webサービスの紹介』

- Web Servicesのセキュリティおよび管理者ガイド

- Oracle Fusion Middleware Oracle SOA Suiteのための開発者ガイド

- 『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』

- 『Oracle Fusion Middleware Oracle WebCenterのための開発者ガイド』

表記規則

このドキュメントでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 Oracle Infrastructure Webサービスの概要

この章では、Oracle Infrastructure Webサービスの概要を示し、サポートされている標準について説明します。

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

- Oracle Infrastructure Webサービスの概要

- Oracle Infrastructure Webサービスおよびクライアントのタイプ

- サポートされている標準

- 関連ドキュメント

Oracle Infrastructure Webサービスの概要

Oracle Fusion Middleware 11gには、次のタイプのWebサービスの開発、セキュリティおよび管理をサポートするためのWebサービス・カテゴリが2つあります。

- Oracle Infrastructure Webサービス: SOA、ADFおよびWeb Centerサービス

- WebLogic Webサービス(Java EE Webサービス)

次の図は、2つのWebサービス・カテゴリを示しています。図中でOracle Infrastructure Webサービスは(黄色で)ハイライト表示されています。

図1-1 Oracle Fusion Middleware 11g内のWebサービス

注意:
図に示されている全部のコンポーネント(開発、セキュリティおよび管理、ポリシー管理のツールを含む)の詳細は、Webサービスの概要に関する項を参照してください。

この章では、Oracle Infrastructure Webサービスを開発するための概念について説明します。WebLogic Webサービスの詳細は、Oracle WebLogic Server WebLogic Webサービスの紹介を参照してください。

Oracle Infrastructure Webサービスおよびクライアントのタイプ

表1-1は、Oracle Fusion Middleware 11gでサポートされているOracle Infrastructure Webサービスのタイプをまとめたものです。

表1-1 Oracle Infrastructure Webサービス

Webサービス

説明

SOAサービス・コンポーネント

SOAコンポジット・アプリケーションには、SOAサービス・コンポーネントが含まれます。SOAサービス・コンポーネントは、SOAコンポジット・アプリケーションの基本となるビルディング・ブロックであり、全体的なビジネス・ロジック機能の一部を実装します。

次のSOAサービス・コンポーネントは、Oracle WSMを使用して管理できます。

- BPELプロセス: 同期プロセスおよび非同期プロセスの編成と格納を可能にします。

- Oracle Mediator: 異なるコンポーネント間でイベント(メッセージ)をルーティングします。

- ヒューマン・ワークフロー: ユーザーまたはグループがエンドツーエンドのプロセス・フローの一環として実行するタスクを記述するワークフローをモデリングできます。

- ビジネス・ルール: ルールに基づいたビジネス・デシジョンを設計します。

SOAサービス・コンポーネントの詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。

SOAサービス・コンポーネントをOracle Fusion Middleware環境にデプロイできます。

SOAサービス・バインディング・コンポーネント

SOAサービス・バインディング・コンポーネントは、SOAコンポジット・アプリケーションへのエントリ・ポイントを備えた外部ワールドを提供します。その機能は、サービスのWSDLファイルによって外部アプリケーションに通知されます。これらの機能は、SOAコンポジット・アプリケーション・コンポーネントに接続するために使用されます。詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。

ADF Business Components

ADF Business Componentsは、再利用可能なコンポーネントのライブラリの提供およびOracle JDeveloperの設計時機能のサポートを介して、Java EEプラットフォームのビジネス・アプリケーションの開発、配信およびカスタマイズを簡素化するものです。

開発者は、ADF Business Componentsを使用して次の作業を行う場合、通常のJava EEアプリケーションに必要なアプリケーション・インフラストラクチャ・コードを記述する必要はありません。

- データベースへの接続。

- データの取得。

- データベース・レコードのロック。

- トランザクションの管理。

また、Oracle JDeveloperの機能は、組み込まれたデータ操作とカスタム・メソッドをカプセル化するADF Business Componentのアプリケーション・モジュールをWebサービスとして公開するため、サービス対応のアプリケーション・モジュールはデプロイFusion Webアプリケーションの各モジュールで横断的に使用できます。

詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』のサービス対応のアプリケーション・モジュールの統合に関する項を参照してください。

WebCenterサービス

WebCenterサービスは、ソーシャル・ネットワーキングや個人の生産性向上に役立つWeb 2.0テクノロジ(Wiki、RSS、ブログなど)を公開します。WebCenterが提供する一連の機能およびサービス(ポートレット、カスタマイズ、コンテンツ統合など)は、必要なものだけを選択してアプリケーションに追加できます。WebCenterサービスの詳細は、『Oracle Fusion Middleware Oracle WebCenterのための開発者ガイド』を参照してください。

表1-2は、Oracle Fusion Middleware 11gでサポートされているOracle Infrastructure Webサービス・クライアントのタイプをまとめたものです。

表1-2 Oracle Infrastructure Webサービス・クライアント

Webサービス・クライアント

説明

SOA参照バインディング・コンポーネント

SOA参照バインディング・コンポーネントは、SOAコンポジット・アプリケーションを外部パートナに接続します。SOA参照バインディング・コンポーネントの開発の詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。

ADF Webアプリケーション

ADF Webアプリケーションは、WebLogic Webサービス、SOAコンポジット・アプリケーション、サービス対応のADFアプリケーション・モジュールなどのサービスを起動できます。詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』を参照してください。

また、ADF Webアプリケーションは、Webサービス・データ・コントロールを使用してユーザー・インタフェースによるWebサービスとの連携が可能です。詳細は、『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』を参照してください。

WebCenterポートレット

WebCenterポートレットを使用すると、WebCenterサービスを表示できます。WebCenterポートレットの開発の詳細は、『Oracle Fusion Middleware Oracle WebCenterのための開発者ガイド』を参照してください。

サポートされている標準

次の表は、Oracle実装の一部となるOracle Infrastructure Webサービス仕様をハイレベルな機能別に編成してまとめたものです。

オラクル社では、Webサービス・プラットフォームの相互運用性を、Webサービス仕様の考え得るあらゆるエッジ・ケースのサポートよりも重要視しています。Oracleは、Web Services Interoperability Organizationによる次の仕様に準拠し、これらの仕様をWebサービスの相互運用性の基準として考えています。

- Basic Profile 1.1および1.0: http://www.ws-i.org/Profiles/BasicProfile-1.1-2004-08-24.html

- Basic Security Profile 1.0: http://www.ws-i.org/Profiles/BasicSecurityProfile-1.0.html

- WS-I Attachments Profile 1.0: http://www.ws-i.org/Profiles/AttachmentsProfile-1.0.html

注意:
Oracle Infrastructure Webサービスのセキュリティ標準の詳細は、Web Servicesのセキュリティおよび管理者ガイドのWebサービス・セキュリティ標準に関する項を参照してください。

表1-3 Oracle Infrastructure Webサービスでサポートされる仕様

機能

仕様

(メタデータ注釈に基づく)プログラミング・モデルおよびランタイム・アーキテクチャ

Web Services Metadata Exchange(WS-MetadataExchange)1.1: WS-Federationロードマップの一部であり、Webサービス・エンドポイントに関するメタデータの取得を可能にします。詳細は、http://xml.coverpages.org/WS-MetadataExchange.pdfの『Web Services Metadata Exchange (WS-MetadataExchange)』を参照してください。

Webサービス記述

- Web Services Description Language(WSDL)1.1: Webサービスを記述するXMLベースの仕様。詳細は、http://www.w3.org/TR/wsdlの『Web Services Description Language (WSDL)』を参照してください。

- Web Services Policy Framework (WS-Policy) 1.5および1.2: Webサービスのポリシーを記述したり通信したりするための汎用目的のモデルおよびこれに対応する構文。詳細は、次を参照してください:
WS-Policy 1.5 Framework(勧告): http://www.w3.org/TR/ws-policy/

WS-Policy 1.2 Framework(メンバー投票): http://www.w3.org/Submission/WS-Policy

- Web Services Policy Attachment(WS-PolicyAttachment)1.5および1.2: ポリシーの抽象モデルおよびXMLベースの式の文法。詳細は、次を参照してください:
『WS-Policy Attachment 1.5』(勧告): http://www.w3.org/TR/ws-policy-attach/

『WS-PolicyAttachment 1.2』(メンバー購読): http://www.w3.org/Submission/WS-PolicyAttachment

Webサービスとリクエスト側クライアントの間のデータ交換

- Simple Object Access Protocol(SOAP)1.1および1.2: 非集中、分散環境における情報交換のための軽量プロトコル。詳細は、http://www.w3.org/TR/SOAPの『Simple Object Access Protocol (SOAP)』を参照してください。

- SOAP with Attachments API for Java(SAAJ)1.3: 開発者がSOAP 1.1仕様および添付ファイル付きSOAPノートに準拠するメッセージを生成および消費するために使用できる実装。詳細は、http://java.net/projects/saaj/の『SOAP with Attachments API for Java (SAAJ)』を参照してください。

- Message Transmission Optimization Mechanism(MTOM): Webサービスが添付ファイルを含むインバウンドSOAPメッセージを読み取る際に、メッセージ全体をメモリーに読み込むデフォルト動作をとらずにストリーミングAPIを使用することを指定できます。詳細は、http://www.w3.org/TR/soap12-mtom/の『SOAP Message Transmission Optimization Mechanism』を参照してください。

セキュリティ

- Web Services Security(WS-Security)1.0および1.1: セキュアなWebサービスを構築してメッセージ・コンテンツの整合性と機密性を実装する際に使用できるSOAP [SOAP11、SOAP12]拡張の標準セット。詳細は、http://www.oasis-open.org/committees/tc_home.php?wg_abbrev=wssの『OASIS Web Service Security Web』を参照してください。
Webサービス・セキュリティは、次のセキュリティ・トークンをサポートします。

- ユーザー名: Webサービス・コンシューマが、認証の資格証明としてユーザー名を指定する方法を定義します。

- X.509証明書: 受信パーティに公開鍵を送信するために設計された署名付きデータ構造。

- Kerberosチケット: バイナリ認証およびセッション・トークン。

- Security Assertion Markup Language (SAML) アサーション: XMLドキュメントを介してインターネット上のセキュリティ情報を共有します。

『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』の「Webサービス・セキュリティ標準」を参照してください。

- Web Services Security Policy (WS-SecurityPolicy) 1.3、1.2および1.1: WS-Policyの枠組みで使用するためのセキュリティ・ポリシー・アサーションのセット。詳細は、次の資料を参照してください。
Web Services Security Policy (WS-SecurityPolicy) 1.3仕様 参照サイト: http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200802

Web Services Security Policy (WS-SecurityPolicy) 1.2仕様 参照サイト: http://docs.oasis-open.org/ws-sx/ws-securitypolicy/200702/ws-securitypolicy-1.2-spec-os.html

Web Services Security Policy (WS-SecurityPolicy) 1.1仕様 参照サイト: http://specs.xmlsoap.org/ws/2005/07/securitypolicy/ws-securitypolicy.pdf

- Security Assertion Markup Language(SAML)2.0: セキュリティ・ドメイン間で認証および認可のデータを交換するためのXML標準。詳細は、http://docs.oasis-open.org/security/saml/v2.0/の『Security Assertion Markup Language (SAML)』を参照してください。

- Security Assertion Markup Language(SAML)Token Profile 1.1: SOAPメッセージの認証および暗号化を実装するSOAP拡張のセット。詳細は、http://www.oasis-open.org/committees/download.php/16768/wss-v1.1-spec-os-SAMLTokenProfile.pdfの『Security Assertion Markup Language (SAML) Token Profile 1.1』仕様を参照してください。

- WS-Trust: セキュリティ・トークンのリクエストおよび発行を行う際の枠組みを提供するWS-Securityへの拡張機能と、ブローカ・トラスト関係への拡張機能を定義します。詳細は、http://docs.oasis-open.org/ws-sx/ws-trust/v1.3/ws-trust.htmlを参照してください。

- XML署名: デジタル署名用のXML構文を定義します。詳細は、http://www.w3.org/TR/xmldsig-core/の『XML Signature Syntax and Processing』を参照してください。

- XML暗号化: XML要素の内容を暗号化する方法を定義します。詳細は、http://www.w3.org/TR/xmlenc-core/の『XML Encryption Syntax and Processing』を参照してください。

信頼性のある通信

- Web Services Addressing(WS-Addressing)1.0: Webサービスおよびメッセージのアドレッシングを行うための、トランスポートに依存しないメカニズム。詳細は、http://www.w3.org/TR/ws-addr-coreのWeb Services Addressing(WS-Addressing)仕様を参照してください。

- Web Services Reliable Messaging(WS-ReliableMessaging)1.0および1.1: 異なるWebLogic Serverインスタンス上で動作する2つのWebサービスが、ソフトウェア・コンポーネント、システムまたはネットワークに障害が発生しても信頼性のある通信をできるようにする実装。詳細は、次を参照してください:
http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdfの『Web Services Reliable Messaging (WS-ReliableMessaging) 1.1』。

http://specs.xmlsoap.org/ws/2005/02/rm/ws-reliablemessaging.pdfの『Web Services Reliable Messaging (WS-ReliableMessaging) 1.0』。

- Web Services Reliable Messaging Policy(WS-ReliableMessaging Policy)1.1: WS-PolicyおよびWS-ReliableMessagingの使用時に信頼性のあるメッセージングを行うためのドメイン固有のポリシー・アサーション。詳細は、http://docs.oasis-open.org/ws-rx/wsrmp/200702/wsrmp-1.1-spec-os-01.pdfの『Web Services Reliable Messaging Policy (WS-ReliableMessaging Policy)』仕様を参照してください。

原子性トランザクション

Webサービス原子性トランザクション: Web Services Coordination仕様で説明されている拡張可能調整フレームワークとともに使用する原子性トランザクション調整タイプを定義します。WS-AtomicTransaction仕様およびWS-Coordination仕様では、一連の参加者の間で分散されたアクティビティを調整するための拡張可能フレームワークを定義しています。詳細は、次を参照してください:

- 『WS-AtomicTransaction』: http://docs.oasis-open.org/ws-tx/wstx-wsat-1.2-spec-cs-01/wstx-wsat-1.2-spec-cs-01.html

- 『WS-Coordination』: http://docs.oasis-open.org/ws-tx/wstx-wscoor-1.2-spec-cs-01/wstx-wscoor-1.2-spec-cs-01.html

通知(登録および検出)

- Universal Description, Discovery, and Integration(UDDI)2.0: Webサービスの記述、既知のレジストリへのWebサービスの登録、および他の登録済Webサービスの検出を行うための標準。詳細は、http://uddi.xml.orgの『Universal Description, Discovery, and Integration (UDDI)』を参照してください。

- Web Services Inspection Language 1.0: 使用可能なサービスのサイトの検査に役立つXMLフォーマットを提供します。詳細は、http://download.boulder.ibm.com/ibmdl/pub/software/dw/specs/ws-wsilspec/ws-wsilspec.pdfのWeb Services Inspection Language(WS-Inspection)1.0仕様を参照してください。

関連ドキュメント

次の表は、Oracle Infrastructure Webサービスの開発、セキュリティおよび管理に関連するドキュメントをまとめたものです。

表1-4 関連ドキュメント

ドキュメント

説明

『Oracle Fusion Middleware Webサービスの紹介』

このドキュメント。Oracle Fusion Middleware 11gのWebサービスの概要を示します。

Web Servicesのセキュリティおよび管理者ガイド

Webサービスの保護および管理の方法について説明します。

『Oracle Web Services Manager Extensibility Guide』

Oracle Web Services Manager(Oracle WSM)のカスタム・アサーションのビルド方法が説明されています。

『Oracle Fusion Middleware Oracle Web Services Manager相互運用ガイド』

Oracle WSMの最も一般的な相互運用性シナリオの実装方法が説明されています。

Oracle Fusion Middleware Oracle SOA Suiteのための開発者ガイド

SOAコンポジットサービスの開発方法について説明します。

『Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド』

ADFコンポーネントの開発方法について説明します。

『Oracle Fusion Middleware Oracle WebCenterのための開発者ガイド』

WebCenterサービスの開発方法について説明します。

Oracle JDeveloperのオンライン・ヘルプのアプリケーションの設計と開発に関する項のWebサービスを使用した開発に関する説明

Oracle JDeveloperを使用したWebサービスの開発およびポリシーのアタッチの方法について説明します。

Oracle Workshop for WebLogic

ソース・コードの記述と管理、および最先端のビジュアル・ツールやJavaフレームワークを使用した設計のためにWorkshopを活用する方法について説明します。

2 Oracle Infrastructure Webサービスへのポリシーのアタッチ

この章では、ポリシーをOracle Infrastructure Webサービスにアタッチする方法について説明します。

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

- ポリシーとは

- ポリシー・セットについて

- Oracle WSMの事前定義済のポリシーおよびアサーション・テンプレート

- 注釈を使用したWebサービスへのポリシーのアタッチ

- Oracle JDeveloperを使用したポリシーのアタッチ

- Oracle Enterprise Manager Fusion Middleware Controlを使用したポリシーのアタッチ

- WebLogic Scripting Tool(WLST)を使用したポリシーの添付

ポリシーとは

ポリシーとは、メッセージが保護されるかどうか、その保護方法、および信頼性の高いメッセージの配信方法など、Webサービスの機能と要件を示します。

Oracle Fusion Middleware 11gリリースでは、表2-1に定義されているポリシー・タイプがサポートされています。

表2-1 ポリシーのタイプ

ポリシー

説明

WS-ReliableMessaging

WS-ReliableMessaging標準を実装する信頼性のあるメッセージング・ポリシーは、SOAPメッセージの配信を保証するワイヤレベル・プロトコルを記述したものであり、一連のメッセージの配信順序を保持できます。

このテクノロジを使用すると、メッセージが正しい順序で配信されることを保証できます。メッセージが順序どおりに配信されなかった場合は、メッセージが正しい順序で処理されるように受信側システムを構成できます。また、メッセージが1回のみ送信されるようにシステムを構成することもできます。メッセージが消失した場合は、送信側システムは受信側システムが受信を確認するまでメッセージを再送信します。

管理

メッセージ・ログにリクエスト、レスポンスおよびフォルト・メッセージを記録する管理ポリシー。管理ポリシーにはカスタム・ポリシーを含めることができます。

WS-Addressing

SOAPメッセージに、WS-Addressing仕様に準拠したWS-Addressingヘッダーが含まれることを検証するWS-Addressingポリシー。情報の伝達はネットワーク・レベルのトランスポートに依存しておらず、トランスポート・レベルのデータがXMLメッセージに含まれます。

セキュリティ

WS-Security 1.0および1.1標準が実装されたセキュリティ・ポリシー。メッセージの保護(メッセージ整合性とメッセージ機密保護)と、Webサービスのリクエスタおよびプロバイダの認証と認可が実施されます。ユーザー名トークン、X.509証明書、KerberosチケットおよびSecurity Assertion Markup Language(SAML)アサーションなどのトークン・プロファイルがサポートされています。Webサービス・セキュリティの概念および標準の詳細は、Web Servicesのセキュリティおよび管理者ガイドを参照してください。

メッセージ転送最適化メカニズム(MTOM)

JPEG形式のイメージなどのバイナリ・コンテンツは、クライアントとWebサービスの間で渡すことができます。通常、バイナリ・コンテンツを渡すためには、XMLドキュメントにxsd:base64Binary文字列として挿入します。この形式でバイナリ・コンテンツを送信すると、伝送中の送信メッセージのサイズが大幅に増え、処理に要する空間と時間の点でコストが高くなります。

メッセージ送信最適化メカニズム(MTOM)を使用すると、バイナリ・コンテンツをMIME添付ファイルとして送信できるため、ワイヤ書式の送信サイズを小さくできます。バイナリ・コンテンツは、意味上はXMLドキュメントの一部です。MTOMポリシーをアタッチすると、メッセージはWebサービスやクライアントに送信される前にMIME添付ファイルに変換されます。

ポリシー・セットについて

ポリシー・セットとは、内部に複数のポリシー参照を格納し、同じタイプの一連のサブジェクトに対してグローバルにポリシーをアタッチする手段を提供する抽象表現の1つです。ポリシー・セットを使用してグローバルにポリシーをアタッチするメカニズムでは、開発者、アセンブラ、またはデプロイヤがポリシーのアタッチを明示的に指定しなかった状況でも、管理者はすべてのサブジェクトのセキュリティを確実に確保できます。ポリシー・セットを使用して添付されるポリシーは外部アタッチ・ポリシーとみなされます。

ポリシー・セットでは、実行時の制約を指定する機能が提供され、この制約によってそのポリシー・セットが関連するコンテキストが決定されます。たとえば、セキュリティ保護されていない公衆回線でメッセージが送信される可能性があるため、外部クライアントと通信する場合にのみ、サービスでメッセージ保護を使用するように指定できます。ただし、信頼できるネットワークで内部クライアントと通信するときは、メッセージ保護を要求しない場合もあります。

ポリシー・セットをアタッチできるポリシー・サブジェクトには、SOAコンポーネント、SOAサービス・エンドポイント、SOA参照、Webサービス・エンドポイント、Webサービス・クライント、Webサービス・コネクションおよび非同期コールバック・クライアントなどが含まれます。ポリシー・セットは、次のスコープでアタッチできます。

- ドメイン - ドメイン内の指定されたタイプのすべてのポリシー・サブジェクト

- サーバー・インスタンス: サーバー・インスタンス内の指定されたタイプのすべてのポリシー・サブジェクト

- アプリケーションまたはパーティション: アプリケーションまたはSOAパーティション内の指定されたタイプのすべてのポリシー・サブジェクト

- アプリケーション・モジュールまたはSOAコンポジット: アプリケーション・モジュールまたはSOAコンポジット内の指定されたタイプのすべてのポリシー・サブジェクト

- サービスまたは参照: SOAサービスまたは参照内の指定されたタイプのすべてのポリシー・サブジェクト

- ポートまたはコンポーネント: ポートまたはSOAコンポーネント内の指定されたタイプのすべてのポリシー・サブジェクト

ポリシー・セットを使用したポリシーのグローバル・アタッチの詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシー・セットを使用したポリシーのグローバルなアタッチに関する項を参照してください。

Oracle WSMの事前定義済のポリシーおよびアサーション・テンプレート

Oracle Web Services Manager(WSM)は、組織全体にわたって整合的にWebサービスを管理および保護するためのポリシー・フレームワークを提供します。Oracle WSMは、設計時に開発者が使用することも、本番環境で管理者が使用することもできます。Oracle WSMポリシー・フレームワークの詳細は、Web Servicesのセキュリティおよび管理者ガイドのOracle WSMポリシー・フレームワークの理解に関する項を参照してください。

Oracle Fusion Middlewareをインストールすると自動的に使用可能になる一連の事前定義済のOracle WSMポリシーおよびアサーション・テンプレートがあります。これらの事前定義済ポリシーは、顧客のデプロイで使用されている一般的なベスト・プラクティス・ポリシー・パターンに基づいています。

これらの事前定義済ポリシーは、すぐにWebサービスまたはクライアントにアタッチできます。事前定義済ポリシーのいずれかをコピーして、事前定義済ポリシーを構成したり、新規のポリシーを作成することもできます。

事前定義済ポリシーは、事前定義済アサーション・テンプレートに基づくアサーションを使用して構成します。適宜、新規のアサーション・テンプレートを作成できます。

Oracle WSMの事前定義済のポリシーおよびアサーション・テンプレートの詳細は、Web Servicesのセキュリティおよび管理者ガイドの次の項を参照してください。

- 事前定義済ポリシーに関する項

- 事前定義済アサーション・テンプレートに関する項

注釈を使用したWebサービスへのポリシーのアタッチ

表2-2に定義されている注釈を使用して、ポリシーをWebサービスにアタッチできます。これらの注釈は、oracle.webservices.annotationsおよびoracle.webservices.annotations.asyncパッケージに含まれています。

使用可能な注釈の詳細は、Oracle Fusion Middleware Oracle Web ServicesのためのJava APIリファレンス』を参照してください。事前定義済ポリシーの詳細は、Web Servicesのセキュリティおよび管理者ガイドの事前定義済ポリシーに関する項を参照してください。

表2-2 ポリシーをWebサービスにアタッチするための注釈

注釈

説明

@CallbackManagementPolicy

管理ポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。詳細は、「@CallbackManagementPolicy注釈」を参照してください。

@CallbackMtomPolicy

MTOMポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。詳細は、「@CallbackMtomPolicy注釈」を参照してください。

@CallbackSecurityPolicy

1つ以上のセキュリティ・ポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。デフォルトではいずれのセキュリティ・ポリシーもアタッチされません。詳細は、「@CallbackSecurityPolicy注釈」を参照してください。

Oracle JDeveloperを使用したポリシーのアタッチ

JDeveloperを使用してアプリケーションを作成する際に、使用可能なウィザードを活用してポリシーをWebサービスおよびクライアントにアタッチできます。

たとえば、次の図に示すSOA WSポリシーの構成ウィザードを使用すると、ポリシーをSOAサービスまたは参照バインディング・コンポーネントに短時間で簡単にアタッチできます。

図2-1 SOA WSポリシーの構成ウィザード

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

- 『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のポリシーの管理に関する項およびバインディング・コンポーネントおよびサービス・コンポーネントへのポリシーのアタッチに関する項。

- 『Oracle Application Development Framework開発者ガイド』のWebサービス・データ・コントロールの保護に関する項

- JDeveloperのオンライン・ヘルプのWebサービス・プロキシの作成に関する項。

Oracle Enterprise Manager Fusion Middleware Controlを使用したポリシーのアタッチ

Webサービスまたはクライアントがデプロイされたら、Oracle Enterprise Manager Fusion Middleware Controlを使用してポリシーを直接エンドポイントにアタッチできます。また、ポリシー・セットを使用すると、エンドポイントのセットにポリシーをグローバルにアタッチすることもできます。

たとえば、図2-2に示す「Webサービス・エンドポイント」ページの「OWSMポリシー」タブで、ポリシーをWebサービス・エンドポイントにアタッチできます。

図2-2 Oracle Fusion Middleware Controlを使用したポリシーのアタッチ

図2-3に示す「ポリシー・セット・サマリー」ページでは、ポリシー・セットを作成し、一連のエンドポイントにポリシーをグローバルにアタッチできます。

図2-3 Oracle Fusion Middleware Controlを使用したポリシー・セットの作成

詳細は、Web Servicesのセキュリティおよび管理者ガイドの次の項を参照してください。

- 単一サブジェクトへのポリシーのアタッチに関する項

- 複数のサブジェクトへのポリシーのアタッチ(一括アタッチ)に関する項

- Webサービス・クライアントへのポリシーのアタッチに関する項

- ポリシー・セットの作成および管理

WebLogic Scripting Tool(WLST)を使用したポリシーの添付

WebサービスWLSTポリシー管理コマンドは、Fusion Middleware Controlを使用して行えるものと同じ管理機能の多くを実行します。

Webサービスまたはクライアントがデプロイされていれば、WLSTを使用してポリシーをOracle Infrastructure Webサービスのエンドポイントに直接アタッチできます。また、WLSTを使用してポリシー・セットを作成し、ポリシーを一連のエンドポイントにグローバルにアタッチすることもできます。

これらのコマンドの使用手順に関する情報は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』以降の項で提供されています。

- WLSTを使用したWebサービスへのポリシーの添付

- Webサービス・クライアントへのポリシーの添付のWLSTの使用

- ポリシー・セットの作成および管理

これらのコマンドの参照情報は、『Oracle Fusion Middleware WebLogic Scripting Tool コマンド・リファレンス』のWebサービスのカスタムWLSTコマンドに関する項で提供されています。

3 Oracle Infrastructure Webサービスの保護

この章では、Oracle Infrastructure Webサービスを保護する方法について説明します。

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

- Webサービスのセキュリティの概要

- Oracle WSMの事前定義済のセキュリティ・ポリシーおよびアサーション・テンプレート

- セキュリティ・ポリシーのアタッチ

- セキュリティ・ポリシーの構成

Webサービスのセキュリティの概要

Webサービスのセキュリティには、いくつかの側面があります。

- 認証: ユーザーが本物であることを検証します。ユーザーのアイデンティティは、そのユーザーが提示した次のような資格証明に基づいて検証されます。

1. ユーザーが所有する物。たとえば、パスポート(リアル・ワールド)やスマート・カード(ITワールド)のような、信頼できる認証局が発行した資格証明など。

2. ユーザーが持っている情報。たとえば、パスワードのような共有秘密情報。

3. ユーザー自身の情報。たとえば、バイオメトリック情報など。

いくつかのタイプの資格証明を組み合せて使用すること、たとえば、ATMカード(ユーザーが所有する物)をPINまたはパスワード(ユーザーの持っている情報)と組み合せて使用することを、「厳密」認証といいます。

- 認可(アクセス制御): 認証されたユーザーの資格に基づいて、特定のリソースへのアクセスを許可すること。資格は、1つまたは複数の属性によって定義されます。属性は、ユーザーのプロパティまたは特性です。たとえば、Marcがユーザーであれば、conference speakerが属性です。

- 機密保護、プライバシ: 情報を秘密にしておくこと。Webサービス・リクエストや電子メールなどのメッセージに、送信者や受信者のアイデンティティとともに機密保護をしてアクセスします。機密保護とプライバシは、メッセージの内容を暗号化し、送信者と受信者のアイデンティティを不明瞭化することによって実現できます。

- 整合性、非拒否: 送信者にメッセージのデジタル署名をさせることにより、メッセージが送信中に変更されないことを保証します。デジタル署名は、署名を検証し、非拒否を提供するために使用します。署名内のタイムスタンプにより、メッセージの期限切れ後には誰もこのメッセージを再生できなくなります。

これらのWebサービス・セキュリティの概念の詳細は、Web Servicesのセキュリティおよび管理者ガイドのWebサービスのセキュリティの概念の理解に関する項を参照してください。

Oracle Web Services Manager (WSM)は、異種の環境においてWebサービスのセキュリティを定義して実装できるように設計されています。たとえば、認証、認可、メッセージの暗号化と復号化、署名の生成と検証、および複数のWebサービス間のアイデンティティ伝播などを使用して、1つのトランザクションが完成します。さらにOracle WSMには、サービスレベル契約に基づいてWebサービスを管理するためのツールが用意されています。たとえば、ユーザー(セキュリティ設計者やシステム管理者)は、Webサービスの可用性、レスポンス時間、および請求目的で使用可能なその他の情報を定義できます。Oracle WSMの詳細は、Web Servicesのセキュリティおよび管理者ガイドのOracle WSMポリシー・フレームワークの理解に関する項を参照してください。

Oracle WSMの事前定義済のセキュリティ・ポリシーおよびアサーション・テンプレート

第2章「Oracle Infrastructure Webサービスへのポリシーのアタッチ」で説明されているように、Oracle WSMには、Oracle Fusion Middlewareをインストールすると自動的に使用可能になる一連の事前定義済のポリシーおよびアサーション・テンプレートが用意されています。

次のカテゴリのセキュリティ・ポリシーおよびアサーション・テンプレートは、即時に利用可能です。

- 認証のみのポリシー

- メッセージ保護のみのポリシー

- メッセージ保護および認証のポリシー

- 認可のみのポリシー

事前定義済のセキュリティ・ポリシーおよびアサーション・テンプレートの詳細は、Web Servicesのセキュリティおよび管理者ガイドの次の項を参照してください。

- セキュリティ・ポリシーに関する項

- セキュリティ・アサーション・テンプレートに関する項

使用するセキュリティ・ポリシーを決定する際には、Web Servicesのセキュリティおよび管理者ガイドの使用するセキュリティ・ポリシーの決定に関する項を参照してください。

セキュリティ・ポリシーのアタッチ

Oracle Infrastructure Webサービスおよびクライアントにセキュリティ・ポリシーをアタッチします。設計時にはOracle JDeveloperを使用して、実行時にはOracle Enterprise Manager Fusion Middleware Controlを使用して行います。詳細は、第2章「Oracle Infrastructure Webサービスへのポリシーのアタッチ」を参照してください。

セキュリティ・ポリシーの構成

セキュリティ・ポリシーを環境内で使用するには、あらかじめ構成する必要があります。セキュリティ・ポリシーの構成手順については、Web Servicesのセキュリティおよび管理者ガイドのポリシーの構成に関する項を参照してください。

次の表に、各ポリシー・カテゴリの構成手順の参照先を示します。

表3-1 セキュリティ・ポリシーの構成

ポリシー・カテゴリ

Web Servicesのセキュリティおよび管理者ガイドでの構成手順

認証のみのポリシー

認証のみのポリシーと構成手順に関する項

メッセージ保護のみのポリシー

メッセージ保護のみのポリシーと構成手順に関する項

メッセージ保護および認証のポリシー

メッセージ保護および認証ポリシーと構成手順に関する項

認可ポリシー

認可ポリシーに関する項

4 非同期Webサービスの開発

この章では、非同期Webサービスの概念の概要を示し、非同期Webサービスを開発および構成する方法について説明します。

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

- 非同期Webサービスの概要

- JDeveloperを使用した非同期Webサービスの開発とデプロイ

- 非同期Webサービスの開発

- リクエスト・キューおよびレスポンス・キューの作成

- コールバック・サービスの構成

- 非同期WebサービスのためのSSL構成

- 非同期Webサービス・クライアントの定義

- 非同期Webサービスおよびクライアントへのポリシーのアタッチ

非同期Webサービスの概要

Webサービスを同期的に起動した場合、起動側のクライアント・アプリケーションは、レスポンスが戻るのを待機してから処理を続行する必要があります。このようなWebサービスの起動方法は、レスポンスが即時に戻るような場合には適しています。しかし、リクエスト処理が遅延する場合もあるため、クライアント・アプリケーションは先に処理を続行し、後でレスポンスを処理するほうが効率的なことも少なくありません。Webサービスを非同期的にコールすれば、クライアントはその処理を間断なく続行でき、非同期レスポンスが戻されたときに通知を受けることができます。

次の各項で、非同期メッセージ・フローのダイアグラムをいくつか示し、クライアント側から見た全体像を示します。また、非同期メッセージが互いにどのように関連しているかを説明します。

- 単一のリクエスト・キューを使用した非同期Webサービス

- リクエスト・キューおよびレスポンス・キューを使用した非同期Webサービス

- クライアントから見た非同期Webサービス・コールの全体像

- 非同期メッセージの相関処理

単一のリクエスト・キューを使用した非同期Webサービス

注意:
単一のリクエスト・キューを使用した場合、パフォーマンスは高くなる可能性はありますが、リクエスト・キューとレスポンス・キューを使用した場合よりも信頼性が低くなります。単一のリクエスト・キューを使用するのではなく、「リクエスト・キューおよびレスポンス・キューを使用した非同期Webサービス」で説明されているように、リクエスト・キューとレスポンス・キューを使用することをお薦めします。

このシナリオでは、リクエストとレスポンスの両方の処理を実行する単一のメッセージドリブンBean(MDB)がリクエスト・キューに関連付けられています。

次の図は、単一のリクエスト・キューを使用した非同期メソッド・コールのフローを示しています。

図4-1 単一のリクエスト・キューを使用した同期Webサービス

前出の図に示されたフローについて次に説明します。

1. クライアントが非同期メソッドをコールします。

2. 非同期Webサービスがリクエストを受信して、それをリクエスト・キューに格納します。

3. 非同期Webサービスは受信確認をクライアントに送信します。

4. リクエスト・キューのMDBリスナーがメッセージを受信し、リクエストの処理を開始します。

5. リクエストMDBは、Webサービス実装の必須メソッドをコールします。

6. Webサービス実装がレスポンスを返します。

7. リクエストMDBがコールバック・クライアントとなり、コールバック・サービスにレスポンスを返します。

8. コールバック・サービスは受信確認メッセージを返します。

9. リクエストMDBは確認メッセージをリクエスト・キューに返して、プロセスを終了します。

このシナリオでは、コールバック・サービスへの接続(ステップ7)に問題がある場合、レスポンスは送信されません。後でリクエストが再試行される場合は、ステップ4からフローが再開し、再びWebサービス実装がコールされます(ステップ5)。このような動作は、アプリケーション・ロジックやトランザクション制御処理によっては望ましくないことがあります。次のシナリオでは、レスポンスが別のレスポンス・キューに格納されるため、最初にコールバック・サービスが使用可能になっていなくても、Webサービス実装を再びコールする必要がありません。

リクエスト・キューおよびレスポンス・キューを使用した非同期Webサービス

このシナリオでは、2つのMDBを使用し、それぞれがリクエスト処理とレスポンス処理を行います。このシナリオでは、ビジネス・ロジックの実行をレスポンスの返却と分離することにより、「単一のリクエスト・キューを使用した非同期Webサービス」で説明されている単一キューのモデルよりもエラー・リカバリを向上させています。

次の図は、単一のリクエスト・キューを使用した非同期メソッド・コールのフローを示しています。

図4-2 リクエスト・キューおよびレスポンス・キューを使用した非同期Webサービス

前出の図に示されたフローについて次に説明します。

1. クライアントが非同期メソッドをコールします。

2. 非同期Webサービスがリクエストを受信して、それをリクエスト・キューに格納します。

3. 非同期Webサービスは受信確認をクライアントに送信します。

4. リクエスト・キューのMDBリスナーがメッセージを受信し、リクエストの処理を開始します。

5. リクエストMDBは、Webサービス実装の必須メソッドをコールします。

6. Webサービス実装がレスポンスを返します。

7. リクエストMDBがレスポンスをレスポンス・キューに保存します。

8. リクエストMDBはリクエスト・キューに確認を送信して、プロセスを終了します。

9. レスポンス・キューのonMessageリスナーがレスポンスの処理を開始します。

10. レスポンスMDBがコールバック・クライアントとなり、コールバック・サービスにレスポンスを返します。

11. コールバック・サービスは受信確認メッセージを返します。

12. レスポンスMDBは確認メッセージをレスポンス・キューに返して、シーケンスを終了します。

クライアントから見た非同期Webサービス・コールの全体像

クライアントから見ると、非同期メソッド・コールは次の図のように2つの一方向メッセージ交換で構成されています。

図4-3 非同期Webサービス・クライアントのフロー

前出の図に示したように、クライアントは非同期コールを開始する前に、非同期Webサービスからのレスポンスをリスニングするためのコールバック・サービスをデプロイする必要があります。

メッセージのフローは次のとおりです。

1. クライアントが非同期メソッドをコールします。

2. 非同期Webサービスがリクエストを受信し、開始クライアントに確認メッセージを送信して、リクエストの処理を開始します。

3. リクエストの処理が完了すると、非同期Webサービスがクライアントとなり、コールバック・サービスにレスポンスを返します。

4. コールバック・サービスは確認メッセージを非同期Webサービスに送信します。

非同期メッセージの相関処理

注意:
メッセージ相関はSOAランタイムによって自動的に処理されます。この項の説明は参考情報です。

コールバック・サービスはレスポンスの受信時に、レスポンスと元のリクエストを相互に関連付ける必要があります。これは、SOAランタイムによってWS-Addressingを介して自動的に行われます。

クライアントは、SOAPヘッダーのWS-Addressing部分に次の2つのフィールドを設定します。

- ReplyToアドレス: コールバック・サービスのアドレス。

- MessageID: リクエストを識別する一意のID。たとえば、UUIDなどです。

コールバック・クライアントは、WS-AddressingヘッダーのrelatesToIdフィールド内の初期リクエストに対応するMessageIdを送信します。コールバック・サービスでレスポンス処理に追加データが必要となる場合、クライアントは次のタスクのいずれかを実行できます。

- クライアントは、データをReplyToフィールド内の参照パラメータとして送信できます。非同期Webサービスでは、レスポンスで参照パラメータがすべて返されるため、コールバック・サービスで情報へのアクセスが可能となります。

- データを非同期リクエスト・メッセージの一部として送信することが実行可能でない場合、クライアントは、ローカル・データ・ストアに必要なMessageIDとデータを保存できます。

JDeveloperを使用した非同期Webサービスの開発とデプロイ

ADF Business Componentの非同期Webサービス・メソッドの開発とデプロイは、短時間で簡単に行うことができます。詳細は、Oracle Application Development Frameworkの開発者ガイドの非同期Webサービス・メソッドの生成方法に関する項を参照してください。

次の各項で、非同期Webサービスの実装方法を詳しく説明します。一部は参考情報です。

非同期Webサービスの開発

oracle.webservices.annotations.async.AsyncWebService注釈を使用して、JAX-WS Webサービスを非同期Webサービスとして宣言できます。

次の例は、非同期Webサービスのごく単純なPOJOを示しています。

import oracle.webservices.annotations.PortableWebService
import oracle.webservices.annotations.async.AsyncWebService

@PortableWebService
@AsyncWebService
public class HelloService {
public String hello(String name) {
return "Hi " + name;
}
}

非同期Webサービスに対して生成されたWSDLには、2つのportTypeとして定義された2つの一方向操作が含まれています(非同期操作用とコールバック操作用)。

例:

<wsdl:portType name="HelloService">
<wsdl:operation name="hello">
<wsdl:input message="tns:helloInput"
xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"
ns1:Action=""/>
</wsdl:operation>
</wsdl:portType>
<wsdl:portType name="HelloServiceResponse">
<wsdl:operation name="helloResponse">
<wsdl:input message="tns:helloOutput"
xmlns:ns1="http://www.w3.org/2006/05/addressing/wsdl"
ns1:Action=""/>
</wsdl:operation>
</wsdl:portType>

オプションとして、systemUser引数を使用して、非同期Webサービスへのアクセスのセキュリティを確保するためにシステム・ユーザーも定義できます。指定しない場合、この値はOracleSystemUserにデフォルト設定されます。

例:

@AsyncWebService(systemUser="ABCIncSystemUser')

非同期Webサービスで使用されるリクエスト・キューとレスポンス・キューの保護に関する詳細は、リクエスト・キューおよびレスポンス・キューの保護に関する項を参照してください。

リクエスト・キューおよびレスポンス・キューの作成

作成した非同期Webサービスをデプロイする前に、まずは次項の説明に従って、リクエストおよびレスポンスを格納するために使用されるキューを作成し、そのセキュリティを確保する必要があります。

- デフォルトのWebLogic JMSキューの使用

- カスタムのリクエスト・キューおよびレスポンス・キューの作成

- 実行時のリクエスト・キューおよびレスポンス・キューの管理

- リクエスト・キューおよびレスポンス・キューの保護

- リクエストおよびレスポンスのキュー構成の確認

デフォルトのWebLogic JMSキューの使用

次の各項で説明するように、このプロセスは、クラスタ・ドメインか非クラスタ・ドメインのどちらを使用しているかによって異なります。

- クラスタ・ドメインでのデフォルトのWebLogic JMSキューの使用

- 非クラスタ・ドメインでのデフォルトのWebLogic JMSキューの使用

- JMS配信失敗パラメータのチューニング

クラスタ・ドメインでのデフォルトのWebLogic JMSキューの使用

クラスタ・ドメインの場合は、クラスタごとに2つのJMS共通分散宛先(UDD)を作成する必要があります。デフォルト・キューをクラスタ環境に追加する際は、オフラインWLSTスクリプトを使用できます。

このスクリプトは次の場所にあります。

<MW_HOME>/oracle_common/webservices/bin/jrfws-async-createUDDs.py

このスクリプトの実行例を次に示します。

java -classpath <some_path>/weblogic.jar weblogic.WLST ./jrfws-async-createUDDs.py --domain_home <domain> --cluster <cluster>

非クラスタ・ドメインでのデフォルトのWebLogic JMSキューの使用

非クラスタ・ドメインの場合、oracle.jrf.ws.async_template_11.1.1.jarというWebLogicドメイン拡張テンプレートの一部として、1組のデフォルトのWebLogic JMSキューが用意されています。この拡張テンプレートに含まれているデフォルトのJMSキューは、次のとおりです。

- リクエスト・キュー: oracle.j2ee.ws.server.async.DefaultRequestQueue

- レスポンス・キュー: oracle.j2ee.ws.server.async.DefaultResponseQueue

基本ドメインの一部として用意されているデフォルトのJMS接続ファクトリであるweblogic.jms.XAConnectionFactoryが、デフォルトで使用されます。

必要なデフォルトのキューを作成するには、Fusion Middleware構成ウィザードを使用してドメインを作成または拡張するときに、「Oracle JRF Webサービスの非同期サービス」を選択します。詳細は、『構成ウィザードによるドメインの作成』を参照してください。

注意:
このドメイン拡張テンプレートを使用する場合は、必ずJMSモジュール(JRFWSAsyncJmsModule)に、ドメイン内の非クラスタ・サーバーを必要に応じて1つ以上ターゲットとして明示的に指定します。

デフォルトのJMS配信失敗パラメータのチューニング

次のデフォルト値は、デフォルトではJMS配信失敗パラメータ用に構成されています。設定を見直して、使用環境に応じてそれらを変更することをお薦めします。JMS配信失敗パラメータ関連の構成は、『Oracle Fusion Middleware Oracle WebLogic Server JMSの構成と管理』の説明に従ってWebLogic Server管理コンソールを使用して変更できます。

- 「再配信遅延のオーバーライド」の値を900000ミリ秒に設定します。つまり、メッセージ・コンシューマまたは接続ファクトリで指定されている再配信遅延に関係なく、15分間待機した後にロールバックまたはリカバリされたメッセージが再配信されます。

- 「再配信の制限」の値を100に設定します。この値は、キューに定義されているエラー宛先にメッセージが移されるまでに許可される再配信試行回数を示します。

- 「有効期限ポリシー」の値を「リダイレクト」に設定します。これにより、期限切れのメッセージは現在の場所からキューに定義されているエラー宛先に移されます。これが有効になっている場合は、対応するエラー宛先が構成されていることを確認してください。

カスタムのリクエスト・キューおよびレスポンス・キューの作成

デフォルトのWebLogic JMSキューが要件を満たしていない場合は、次の手順を実行できます。

1. Oracle WebLogic ServerのJMSのプログラミングに関する項の説明に従って、リクエスト・キューとレスポンス・キューを手動で作成します。

2. 次の注釈を使用して、これらのキューをアプリケーション・コードに追加します。

- リクエスト・キュー: oracle.webservices.annotations.async.AsyncWebServiceQueue
詳細は、「@AsyncWebServiceQueue注釈」を参照してください。

- レスポンス・キュー: oracle.webservices.annotations.async.ResponseQueue
詳細は、「@AsyncWebServiceResponseQueue注釈」を参照してください。

非同期リクエストは、最初に、非同期の実行のためにリクエストJMSキューに保存されます。メッセージドリブンBean (MDB)は、キューのリクエストにアクセスして、ビジネス・ロジックを実行します。

同時に多数のリクエストを処理する場合、アプリケーション・サーバーはMDBインスタンスのプールを作成します(このプールは、アプリケーションの要件に基づいて構成できます)。プール内のMDBインスタンスが多いほど、スループットは向上します。ただし、使用されるリソース(スレッドやデータベース接続など)は多くなります。厳密なリソース要件は、非同期リクエスト・メッセージの保存に使用される永続ストアのタイプによって異なります。

デフォルトでは、WebLogic Serverは、1つのMDBインスタンスのみでプールを初期化し、実行のためにキューに投入されるリクエストが増えると、プール・サイズを(最大16まで)増やし続けます。最大プール・サイズに達すると、それ以上MDBインスタンスは追加されずに、サーバーは既存のMDBインスタンスが現在実行中のリクエストを完了するまで待機します。

ユーザーは、アプリケーション要件に基づいて、初期プール・サイズおよび最大プール・サイズを構成できます。デフォルト値を使用し、検出したリソースの負荷に基づいて値を調節することをお薦めします。プールで使用されているリソースが多すぎる場合は、最大プール・サイズを小さくできます。システムのリソースに余裕があり、キューで待機中のリクエストが多すぎる場合は、最大プール・サイズを増やすことができます。

リクエスト・キューとレスポンス・キューを作成する(ステップ1)ためのベスト・プラクティスを次に挙げます。

- クラスタ内のキューを高可用性およびフェイルオーバーのために構成します。

- WebLogic Serverごとに単一のJMSサーバーとWebLogic永続ストアを構成し、ターゲットとしてサーバーのデフォルトの移行可能ターゲットを指定します。

- JMSサーバーに対して必要な割当て制限を構成します。
メモリー不足によるエラーを回避するため、各JMSサーバーに対してメッセージの最大割当て制限を構成することをお薦めします。目安として、各メッセージ・ヘッダーでは約512バイトが使用されます。したがって、500,000メッセージの最大割当て制限では、約250MBのメモリーが必要になります。環境で使用可能なメモリー・リソースを考慮して、それに応じた割当て制限を設定してください。

- 単一のJMSシステム・モジュールを構成し、ターゲットとしてクラスタを指定します。

- JMSシステム・モジュールに対して、次の手順を実行します。

- 単一のサブデプロイメントを構成し、各JMSサーバーを割り当てます。

- 必要な共通分散宛先を構成し、(前述の)拡張的なサブデプロイメントのターゲット指定を使用してターゲットを定義します。

- カスタムの接続ファクトリを構成します。トランザクションが有効になっている場合、接続ファクトリが有効であればトランザクションをサポートする必要があります。WebLogic JMSには、トランザクションをサポートするためのweblogic.jms.XAConnectionFactory接続ファクトリがデフォルトで用意されています。

実行時のリクエスト・キューおよびレスポンス・キューの管理

リクエスト・キューとレスポンス・キューは、Fusion Middleware Controlを使用すると実行時に変更できます。更新内容を有効にするには、サーバーをいったん停止してから再起動する必要があります。詳細は、Web Servicesのセキュリティおよび管理者ガイドの非同期Webサービスの構成に関する項を参照してください。

リクエスト・キューおよびレスポンス・キューの保護

注意:
この項は、ADF Webサービスのみに適用されるものです。SOA Webサービスには適用されません。

JMSのリクエスト・キューおよびレスポンス・キューをユーザーベースまたはロールベースのセキュリティ・ポリシーで保護して、これらのリソースへのアクセスを保護することをお薦めします。JMSのリクエスト・キューおよびレスポンス・キューを保護する手順は、次のとおりです。

1. JMSシステム・ユーザーの構成(オプション)に関する項の説明に従って、任意にJMSシステム・ユーザーを構成することもできます。
JMSキューへのアクセス権限を持つJMSシステム・ユーザーは、デフォルトではOracleSystemUserとして設定されています。通常はデフォルト・ユーザーで十分です。

2. リクエストとレスポンスのすべてのキューのセキュリティを確保するために、リクエスト・キューとレスポンス・キューの保護を目的としたWLSTスクリプトの実行に関する項の説明に従ってWLSTスクリプトを実行します。

JMSシステム・ユーザーの構成(オプション)

JMSキューへのアクセス権限を持つJMSシステム・ユーザーは、デフォルトではOracleSystemUserとして設定されています。ほとんどの場合、このデフォルト値で十分です。ただし、この値をセキュリティ・レルム内のカスタム・ユーザーに変更する必要がある場合は、@AsyncWebService注釈のsystemUser属性を使用してカスタム・システム・ユーザーを指定できます。例:

@AsyncWebService(systemUser = "ABCIncSystemUser")

この変更を有効にするには、JDeveloperまたはojdeployコマンド・ライン・ユーティリティを使用してアプリケーションEARファイルを再生成する必要があります。@AsyncWebService注釈の詳細は、@AsyncWebService注釈に関する項を参照してください。

アプリケーションのデプロイメントが済んだら、『Oracle Fusion Middleware Web Servicesセキュリティおよび管理者ガイド』の非同期Webサービスに適したJMSシステム・ユーザーの変更に関する項の説明に従って、Fusion Middleware ControlおよびWebLogic Server Administration ConsoleのJMSシステム・ユーザーを変更できます。

リクエスト・キューおよびレスポンス・キューの保護を目的としたWLSTスクリプトの実行

リクエスト・キューとレスポンス・キューのセキュリティを確保する際は、オンラインWLSTスクリプトを使用できます。Administration Server接続に関する詳細(URL、ユーザー名およびパスワード)の他に、セキュリティをかけるJMSシステム・モジュール名と割り当てるセキュリティ・ロールを渡してください。

このスクリプトは次の場所にあります。

<MW_HOME>/oracle_common/webservices/bin/secure_jms_system_resource.py

このスクリプトの実行例を次に示します。

java -classpath <some_path>/weblogic.jar weblogic.WLST ./secure_jms_system_resource.py
--username <AdminUserName> --password <AdminPassword> --url <AdminServer_t3_url>
--jmsSystemResource <JMSSystemResourceName> --role <SecurityRoleToUse>

リクエストおよびレスポンスのキュー構成の確認

リクエスト・キューとレスポンス・キューが必要に応じて構成されていることを確認するには、次のタスクのいずれかを実行します。

1. 『Oracle Fusion Middleware Oracle WebLogic Server JAX-WS Webサービス・スタート・ガイド』のAdministration Consoleの起動に関する説明に従って、Administration Consoleを起動します。

2. 次のJMSリソースが定義されており、「サービス」→「メッセージング」の順に選択して利用できることを確認します。

- JRFWSAsyncJmsServerという名前のJMSサーバー。
必要に応じて、JMSモジュールが、非クラスタ・ドメイン(標準的なキュー)については1つ以上のサーバーをターゲットとして指定していること、またはクラスタ・ドメイン(UDD)についてはそのクラスタをターゲットとして指定していることを確認します。構成ウィザードまたはWLSTを使用してドメインを構成している場合、JMSサーバーは適切にターゲット指定されています。詳細は、デフォルトのWebLogic JMSキューの使用に関する項を参照してください。

- JRFWSAsyncJmsModuleという名前のJMSモジュール。

- JDNI名がoracle.j2ee.ws.server.async.DefaultRequestQueueのリクエスト・キューとこれに対応するエラー・キュー。

- JDNI名がoracle.j2ee.ws.server.async.DefaultResponseQueueのレスポンス・キューとこれに対応するエラー・キュー。

3. 非同期Webサービスがデプロイされていることを確認し、必要があればシステムのメッセージドリブンBean(MDB)がJMS接続先に接続されていることを次のように検証します。

1. 「デプロイ」をクリックします。

2. 「デプロイ」表のアプリケーションを開きます。

3. EJB直下に、非同期WebサービスのランタイムをサポートするためにWebサービス1件につき2つのシステムMDBが存在していることを確認します。例: <asyncwebservicename>_AsyncRequestProcessorMDBおよび<asyncwebservicename>_AsyncResponseProcessorMDB

4. 表示されている各MDBがJMS接続先に接続されていることを確認します。

5. 「EJB」を選択し、「監視」タブをクリックし、「実行中」タブをクリックします。

6. 「接続ステータス」フィールドが「接続」になっていることを確認します。

7. キューが正しく作成されなかった場合は、次の手順のいずれかを実行します。

- 必要なJMSキューを手動で作成して構成します。詳細は、『Oracle Fusion Middleware Oracle WebLogic Serverインフォメーション・ロードマップ』の「メッセージング」を参照してください。

- JMSサーバー、JMSモジュールおよび非同期Webサーバー用に作成されたデフォルト・キューを削除し、「デフォルトのWebLogic JMSキューの使用」の説明に従って、クラスタ・ドメインおよび非クラスタ・ドメイン用に指定された手順でもう一度これらを作成します。

注意:
JMSリソースは、そのドメインのconfig.xmlファイルに格納されます。

コールバック・サービスの構成

次の表に定義されている注釈を使用して、コールバック・サービス(portType)の特性をカスタマイズできます。これらの注釈は、oracle.webservices.annotations.asyncパッケージに含まれています。

表4-1 コールバック・サービスの構成に使用される注釈

注釈

説明

@CallbackMethod

コールバックportType内の対応する操作のWSDLエンティティの名前をカスタマイズし、メソッドが同期か非同期かを設定します。

@CallbackProperties

コールバック・サービスをコールするときにメッセージ・コンテキスト内で必須となるプロパティを指定します。詳細は、「@CallbackProperties注釈」を参照してください。

@ResponseWebService

レスポンスWebサービス・ポート情報をカスタマイズします。詳細は、「@ResponseWebService注釈」を参照してください。

@Retry

システム障害などによって実行が異常終了した場合、この非同期メソッドを多重呼出し不変とするか再試行可能とするか指定します。詳細は、@Retry注釈に関する項を参照してください。

非同期WebサービスのためのSSL構成

非同期Webサービス用にSSLを構成するには、次のタスクを実行する必要があります。

1. keytoolを使用してIDキーストアおよび信頼キーストアを作成します。
『Oracle Fusion Middleware Oracle WebLogic Serverの保護』のプライベート キー、デジタル証明書、信頼性のある認証局の取得に関する項を参照してください。

2. Oracle WebLogic Server Administration Consoleを使用して、キーストア、キーストア・タイプおよびIDキーストアと信頼キーストアのパスワードを構成します。
Oracle WebLogic Server管理コンソールのヘルプのキーストアの構成に関する項を参照してください。

3. Fusion Middleware Controlを使用して、Oracle WSM資格証明ストア・プロバイダでのIDキーストアと信頼キーストアのパスワードを構成します。
Web Servicesのセキュリティおよび管理者ガイドの資格証明ストアの構成に関する項を参照してください。

oracle.ws.async.ssl.securityという名前のマップが存在することを確認します。ない場合は、Web Servicesのセキュリティおよび管理者ガイドの資格証明ストアの構成に関する項の説明に従って作成する必要があります。

続いて、次の表で定義されている3つのキー・エントリを作成します。

表4-2 IDキーストアおよび信頼キーストアの構成

キー

ユーザー名

パスワード

trust-keystore-password

async

<trust_store_password>

identity-keystore-password

async

<identity_store_password>

key-password

async

<key_password>

非同期Webサービス・クライアントの定義

次の2種類のクライアントが非同期Webサービスをコールできます。

- SOA/BPELクライアント: このプロセスは、他の非同期BPELクライアントをコールするプロセスと同じです。詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のBPELプロセスからの非同期Webサービスの起動に関する項を参照してください。

- WebLogic Java EE JAX-WSクライアント: JDeveloperのWebサービス・プロキシの作成ウィザードを使用して、「非同期として生成」オプションを選択すると、非同期プロキシが生成されます。このウィザードを使用してWebサービス・クライアントを作成する方法の詳細は、JDeveloperのオンライン・ヘルプのWebサービス・プロキシの作成に関する項を参照してください。

次の各項で、非同期クライアントおよび生成されるコールバック・サービスの例を示し、実施する必要のある更新について説明します。

- 非同期クライアント・コードの更新

- コールバック・サービス・コードの更新

注意:
次の各項で説明する手順は、WebLogic JEE JAX-WSクライアントに適用されるものです。SOA/BPELクライアントには適用されません。

非同期クライアント・コードの更新

次の例は、非同期Webサービスをサポートするために生成されるクライアント・コードを示しています。太字で示されているように、クライアント・コードではアウトバウンド・ヘッダー内に2つのフィールドを設定する必要があります。

- ReplyToアドレス: コールバック・サービスのアドレス。

- MessageID: リクエストを識別する一意のID。たとえば、UUIDなどです。

ほとんどの場合は生成されたクライアント・コードに含まれるメッセージIDのUUIDで間に合いますが、このUUIDを更新することもできます。コールバック・サービスを指し示すようにReplyToアドレスを更新する必要があります。

例4-1 非同期クライアント・コードの更新

package async.jrf;

import com.sun.xml.ws.api.addressing.AddressingVersion;
import com.sun.xml.ws.api.addressing.WSEndpointReference;
import com.sun.xml.ws.developer.WSBindingProvider;
import com.sun.xml.ws.message.StringHeader;
import java.util.UUID;
import javax.xml.ws.WebServiceRef;

// !THE CHANGES MADE TO THIS FILE WILL BE DESTROYED IF REGENERATED!
// This source file is generated by Oracle tools
// Contents may be subject to change

// For reporting problems, use the following
// Version = Oracle WebServices (11.1.1.0.0, build 090303.0200.48673)

public class HelloServicePortClient
{
@WebServiceRef
private static HelloServiceService helloServiceService;
private static final AddressingVersion WS_ADDR_VER = AddressingVersion.W3C;

public static void main(String [] args)
{
helloServiceService = new HelloServiceService();
HelloService helloService = helloServiceService.getHelloServicePort();
// Get the request context to set the outgoing addressing properties
WSBindingProvider wsbp = (WSBindingProvider)helloService;
WSEndpointReference repl
new WSEndpointReference(
"http://<replace with the URL of the callback service>",
WS_ADDR_VER);
String uuid = "uuid:" + UUID.randomUUID();
wsbp.setOutboundHeaders(
new StringHeader(WS_ADDR_VER.messageIDTag, uuid),
replyTo.createHeader(WS_ADDR_VER.replyToTag));
// Add your code to call the desired methods.
}
}

コールバック・サービス・コードの更新

次の例は、コールバック・サービス・コードを示しています。太字で示されたコードは、クライアントからMessageIDとして送信されたメッセージ・ヘッダーからrelatesToIDを抽出する方法を示しています。

レスポンスを処理してコールバック・サービスをWebサービスとしてデプロイするためのコードを実装する必要があります。デプロイした後は、コールバック・サービスのURLをreplyToフィールドとしてクライアント・コードに追加します。

package async.jrf;

import com.sun.xml.ws.api.addressing.AddressingVersion;
import com.sun.xml.ws.api.message.Header;
import com.sun.xml.ws.api.message.HeaderList;
import com.sun.xml.ws.developer.JAXWSProperties;
import javax.annotation.Resource;
import javax.jws.Oneway;
import javax.jws.WebMethod;
import javax.jws.WebParam;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
import javax.jws.soap.SOAPBinding.Style;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.ws.Action;
import javax.xml.ws.RequestWrapper;
import javax.xml.ws.WebServiceContext;
import javax.xml.ws.soap.Addressing;
// !THE CHANGES MADE TO THIS FILE WILL BE DESTROYED IF REGENERATED!
// This source file is generated by Oracle tools
// Contents may be subject to change
// For reporting problems, use the following
// Version = Oracle WebServices (11.1.1.0.0, build 090303.0200.48673)

@WebService(targetNamespace="http://jrf.async/", name="HelloServiceResponse")
@XmlSeeAlso(
{ async.jrf.ObjectFactory.class })
@SOAPBinding(style=Style.DOCUMENT)
@Addressing(enabled=true, required=true)
public class HelloServiceResponseImpl
{
@Resource
private WebServiceContext wsContext;
private static final AddressingVersion WS_ADDR_VER = AddressingVersion.W3C;
@WebMethod
@Action(input="")
@RequestWrapper(localName="helloResponse",targetNamespace="http://jrf.async/",
className="async.jrf.HelloResponse")
@Oneway
public void helloResponse(@WebParam(targetNamespace="", name="return")
String _return)
{
// Use the sample code to extract the relatesTo id for correlation and then add your rest of the logic
System.out.println("Received the asynchronous reply");
// get the messageId to correlate this reply with the original request
HeaderList headerList = (HeaderList)wsContext.getMessageContext().get(JAXWSProperties.INBOUND_HEADER_LIST_PROPERTY);
Header realtesToheader = headerList.get(WS_ADDR_VER.relatesToTag, true);
String relatesToMessageId = realtesToheader.getStringContent();
System.out.println("RelatesTo message id: " + relatesToMessageId);
// Add your implementation here.
}
}

非同期Webサービスおよびクライアントへのポリシーのアタッチ

ポリシーは次の非同期コンポーネントにアタッチできます。

- 非同期Webサービスをコールするクライアント(「非同期Webサービス・クライアントへのポリシーのアタッチ」を参照)。

- 非同期Webサービス(「非同期Webサービスおよびコールバック・サービスへのポリシーのアタッチ」を参照)。

- 非同期コールバック・クライアント(「コールバック・クライアントへのポリシーのアタッチ」を参照)。

- 非同期コールバック・サービス(「非同期Webサービスおよびコールバック・サービスへのポリシーのアタッチ」を参照)。

非同期Webサービスとクライアント・ポリシーは互いに適合している必要があります。同様に、非同期コールバック・クライアントとコールバック・サービス・ポリシーも互いに適合している必要があります。

ポリシーをコンポーネントにアタッチするには、次のいずれかの方法を使用できます。

- 設計時に注釈を使用。

- 実行時にFusion Middleware Controlを使用。

注意:
Webサービスの信頼性のあるメッセージング(WS-ReliableMessaging)は、Oracle Infrastructureの非同期Webサービスではサポートされていません。つまり、設計時に@ReliabilityPolicy注釈を使用して、また実行時にFusion Middleware ControlまたはWLSTを使用して、信頼性のあるメッセージング・ポリシーを非同期Webサービスまたはコールバック・クライアントにアタッチできません。

次の各項で、それぞれの方法について詳しく説明します。

注意:
oracle/wsaddr_policyは、再度、非同期のWebサービスまたはクライアントにアタッチする必要はありません。oracle/wsaddr_policyポリシーはデフォルトですべての非同期Webサービスおよびクライアントにアタッチされ、WSDLで通知されます。これは、非同期Webサービスの処理で必要となるためです。しかし、Fusion Middleware Controlにはポリシーがアタッチされていることは反映されないため、ポリシーをアタッチする際の「使用可能なポリシー」リストではこのポリシーが選択可能になっています(『Webサービスのためのセキュリティおよび管理者ガイド』のWebサービスへのポリシーのアタッチに関する項を参照)。

非同期Webサービス・クライアントへのポリシーのアタッチ

設計時には、次の方法を使用してポリシーをアタッチできます。

- SOA/BPELクライアントの場合、SOAコンポジット・エディタを使用してポリシーをアタッチできます(『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のポリシーの管理に関する項を参照)。

- WebLogic Java EE JAX-WSクライアントの場合、JDeveloperでWebサービス・プロキシの作成ウィザードを使用してポリシーをアタッチできます。このウィザードを使用してWebサービス・クライアントを作成する方法の詳細は、JDeveloperのオンライン・ヘルプのWebサービス・プロキシの作成に関する項を参照してください。

実行時には、『Webサービスのためのセキュリティおよび管理者ガイド』のWebサービス・クライアントへのポリシーのアタッチに関する項に従って、Fusion Middleware Controlを使用してクライアントの各タイプにポリシーをアタッチできます。

非同期Webサービスおよびコールバック・サービスへのポリシーのアタッチ

設計時には、ポリシーを非同期Webサービスおよびコールバック・サービスにアタッチするために、表4-3に定義されているいずれかの注釈を使用できます。これらの注釈は、oracle.webservices.annotationsパッケージに含まれています。

表4-3 ポリシーをWebサービスおよびコールバック・サービスにアタッチするための注釈

注釈

説明

@CallbackManagementPolicy

管理ポリシーをWebサービスにアタッチします。詳細は、「@CallbackManagementPolicy注釈」を参照してください。

@CallbackMtomPolicy

MTOMポリシーをWebサービスにアタッチします。詳細は、「@CallbackMtomPolicy注釈」を参照してください。

@CallbackSecurityPolicy

セキュリティ・ポリシーをコールバックWebサービスにアタッチします。詳細は、「@CallbackSecurityPolicy注釈」を参照してください。

実行時には、『Webサービスのためのセキュリティおよび管理者ガイド』のWebサービスへのポリシーのアタッチに関する項に従って、Fusion Middleware Controlを使用して非同期Webサービスおよびコールバック・サービスにポリシーをアタッチできます。

メッセージ保護ポリシーを非同期Webサービスおよびコールバック・サービスにアタッチする際には、次のガイドラインを使用してください。

- コールバック・サービスにメッセージ保護ポリシーを適用する場合は、非同期リクエストにもそのメッセージ保護ポリシーを適用する必要があります。そうしない場合、非同期クライアントの公開暗号化証明書が見つからないことを示すエラーが実行時に返されます。
非同期リクエストにメッセージ保護ポリシーを適用する場合は、コールバック・サービスに同じポリシーを適用する必要はありません。

- 非同期Webサービスにメッセージ保護ポリシーを適用する場合は、クライアント・キーストア内のクライアント公開暗号化証明書を構成する必要があります。

コールバック・クライアントへのポリシーのアタッチ

注意:
コールバック・クライアントにアタッチしたポリシーは、非同期WebサービスWSDLで通知されます。

実行時には、『Webサービスのためのセキュリティおよび管理者ガイド』の非同期Webサービス・コールバック・クライアントへのポリシーのアタッチに関する項に従って、Fusion Middleware Controlを使用して非同期コールバック・クライアントにポリシーをアタッチできます。

5 Webサービスの信頼性のあるメッセージングの使用

この章では、Oracle Infrastructure Webサービスで、Webサービスの信頼性のあるメッセージング(WS-ReliableMessaging)を使用して安全にメッセージを交換する方法について説明します。

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

- Webサービスの信頼性のあるメッセージングの概要

- 事前定義済の信頼性のあるメッセージング・ポリシー

- 信頼性のあるメッセージング・ポリシーのアタッチ

- 信頼性のあるメッセージング・ポリシーの構成

Webサービスの信頼性のあるメッセージングの概要

Webサービス間でのメッセージ交換は、ネットワーク、システム、ソフトウェア・コンポーネントのエラーや異常など、様々なエラーによって中断されることがあります。Webサービスまたはクライアントがメッセージを送信した後で、そのメッセージが正常に配信されたか、配信が失敗して再送信が必要か、あるいは一連のメッセージが正しい順序で到着したかどうかをすぐに判断するためには、ネットワークレベルの例外やSOAPフォルト・メッセージを調べる以外に方法はありません。

これらの問題を解決するために、Oracle Infrastructure Webサービスでは、http://docs.oasis-open.org/ws-rx/wsrm/200702/wsrm-1.1-spec-os-01.pdfのWebサービスの信頼性のあるメッセージング(WS-ReliableMessaging)仕様で定義されているメッセージング・プロトコルをサポートしています。この仕様は、信頼性のあるメッセージ交換を行うためのプロトコルを記述したものです。信頼性のあるとは、2つのWebサービス間でのメッセージの配信を保証できるということです。ソフトウェア・コンポーネント、システムまたはネットワークの障害に関係なく、分散アプリケーション間でメッセージの信頼性のある配信が確実に行われる必要があります。順序どおりの配信が保証されているため、失敗したメッセージを自動再送信するためのコードを各クライアント・アプリケーションで記述する必要はありません。

信頼性のあるWebサービスには、次の配信保証が備わっています。

表5-1 信頼性のあるメッセージングの配信保証

配信保証

説明

最大1回

メッセージは最大1回、重複なしに配信されます。メッセージによっては、一度も配信されないこともあります。

最低1回

すべてのメッセージが、少なくとも1回配信されます。メッセージによっては、2回以上配信されることもあります。

1回のみ

すべてのメッセージが、必ず1回重複なしに配信されます。

順序どおり

メッセージは、送信された順序で配信されます。この配信保証は、前述の3つの保証と組み合せることもできます。

Webサービスに次のような問題があるときは、信頼性のあるメッセージングを使用することを検討してください。

- ネットワーク障害または接続切断が発生します。

- メッセージが送信中に消失します。

- メッセージが間違った順序で宛先に到着します。

事前定義済の信頼性のあるメッセージング・ポリシー

信頼性のあるメッセージングは、ポリシーおよびポリシー・フレームワークによって実施されます。第2章「Oracle Infrastructure Webサービスへのポリシーのアタッチ」で説明されているように、Oracle WSMには、Oracle Fusion Middlewareをインストールすると自動的に使用可能になる一連の事前定義済ポリシーが用意されています。

表5-2にリストされている信頼性のあるメッセージング・ポリシーは、即時に利用可能です。

表5-2 事前定義済の信頼性のあるメッセージング・ポリシー

信頼性のあるメッセージング・ポリシー

説明

oracle/wsrm11_policy

Webサービスの信頼性のあるメッセージング・プロトコルのバージョン1.1をサポートします。

oracle/wsrm10_policy

Webサービスの信頼性のあるメッセージング・プロトコルのバージョン1.0をサポートします。

事前定義済の信頼性のあるメッセージング・ポリシーの詳細は、Web Servicesのセキュリティおよび管理者ガイドの信頼性のあるメッセージング・ポリシーに関する項を参照してください。

信頼性のあるメッセージング・ポリシーのアタッチ

Oracle Infrastructure Webサービスまたはクライアントに信頼性のあるメッセージング・ポリシーをアタッチします。設計時にはOracle JDeveloperを使用して、実行時にはFusion Middleware Controlを使用して行います。詳細は、第2章「Oracle Infrastructure Webサービスへのポリシーのアタッチ」を参照してください。

信頼性のあるメッセージング・ポリシーの構成

信頼性のあるメッセージング・ポリシーを環境内で使用するには、あらかじめ構成する必要があります。次のものを構成する必要があります。

- 配信保証(表5-1を参照)

- メッセージ・ストア情報(タイプや名前など)

- 再送信間隔: メッセージを送信したが、そのメッセージの確認を受信できなかった場合に、メッセージの再送信までにソース・エンドポイントが待機する間隔(ミリ秒)。

- 非アクティブのタイムアウト: 特定のWS-RMシーケンスが終了するまでに、そのシーケンスに関連付けられたメッセージ交換の間に許可される経過時間(ミリ秒)。

信頼性のあるメッセージング・ポリシーを構成する手順は、Web Servicesのセキュリティおよび管理者ガイドの信頼性のあるメッセージング・ポリシーおよび構成手順に関する項を参照してください。

6 Webサービス原子性トランザクションの使用

この章では、Webサービス原子性トランザクションを使用して、他の外部トランザクション処理システムとの相互運用を可能にする方法について説明します。この項はSOA Webサービスに適用されるもので、参考情報です。

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

- Webサービス原子性トランザクションの概要

- Oracle SOA Suite WebサービスでのWebサービス原子性トランザクションの有効化(インバウンド)

- Oracle SOA Suite参照でのWebサービス原子性トランザクションの有効化(アウトバウンド)

- Webサービス原子性トランザクションの構成

- コーディネータと参加者の間で交換されるメッセージの保護

Webサービス原子性トランザクションの概要

WebLogic Webサービスは、次の仕様のサポートを通じて、Websphere、Microsoft .NETなどの他の外部トランザクション処理システムとの相互運用を可能にします。

- WS-AtomicTransaction(WS-AT)バージョン1.0、1.1および1.2: http://docs.oasis-open.org/ws-tx/wstx-wsat-1.2-spec-cs-01/wstx-wsat-1.2-spec-cs-01.html

- WS-Coordinationバージョン1.0、1.1および1.2: http://docs.oasis-open.org/ws-tx/wstx-wscoor-1.2-spec-cs-01/wstx-wscoor-1.2-spec-cs-01.html

これらの仕様は、一連の参加者の間で分散アクティビティを調整するための拡張可能なフレームワークを定義します。次の図に示されているコーディネータは中央のコンポーネントで、トランザクションの状態(調整コンテキスト)を管理し、Webサービスおよびクライアントを参加者として登録することを可能にします。

図6-1 Webサービス原子性トランザクション・フレームワーク

次の表で、この図に示されているWebサービス原子性トランザクションのコンポーネントについて説明します。

表6-1 Webサービス原子性トランザクションのコンポーネント

コンポーネント

説明

コーディネータ

トランザクションの状態(調整コンテキスト)を管理し、Webサービスおよびクライアントを参加者として登録することを可能にします。

アクティブ化サービス

アプリケーションによるトランザクションのアクティブ化およびアクティビティの調整コンテキストの作成を可能にします。作成された調整コンテキストは、トランザクション・フローとともに渡されます。

登録サービス

アプリケーションを参加者として登録することを可能にします。

アプリケーション・プロトコルX、Y

サポートされている調整プロトコル(WS-AtomicTransactionなど)。

次の図は、Webサービス原子性トランザクションのコンテキスト内で相互に作用する2つのWebLogic Serverインスタンスを示しています。わかりやすくするために、2つのWebLogic Webサービス・アプリケーションを示しています。

図6-2 WebLogicサーバー環境内のWebサービス原子性トランザクション

次のことに注意してください。

- ローカルJTAトランザクション・マネージャを使用すると、すべてWebサービス・リクエストのコンテキスト内で、トランザクションを下位トランザクションとしてローカルなJTA環境との間でインポートおよびエクスポートできます。

- 調整コンテキストの作成と管理は、ローカルJTAトランザクション・マネージャによって行われます。

- トランザクションの整合性管理とリカバリ処理はすべて、ローカルJTAトランザクション・マネージャによって行われます。

JTAの詳細は、Oracle WebLogic ServerのJTAのプログラミングに関する項を参照してください。

次に、図6-2に示されているエンドツーエンドのWebサービス原子性トランザクションの相互作用の例について説明します。

1. アプリケーションAは、サーバーAでJTAトランザクション・マネージャを使用して、コントロールの現行スレッドに対するトランザクションを開始します。

2. アプリケーションAは、サーバーBのアプリケーションBでWebサービス・メソッドをコールします。

3. サーバーAはトランザクション情報を更新し、調整コンテキストを含むSOAPヘッダーを作成して、トランザクションおよびローカル・コーディネータを指定します。

4. サーバーBは、アプリケーションBのリクエストを受信して、ヘッダーにトランザクション調整コンテキストが含まれていることを検出し、アプリケーションBがこのトランザクションの参加者としてすでに登録されているかどうかを判断します。すでに登録されていれば、そのトランザクションは再開されます。登録されていない場合は、新しいトランザクションが開始されます。
アプリケーションBは、インポート済トランザクションのコンテキスト内で実行されます。アプリケーションの対話に使用されるすべてのトランザクション・リソースは、このインポート済トランザクションに登録されます。

5. サーバーBは、トランザクション調整コンテキスト内で指定されている登録サービスを使用して、WS-ATトランザクションの参加者として自身を登録します。

6. サーバーAはトランザクションを再開します。

7. アプリケーションAは処理を再開し、トランザクションをコミットします。

Oracle SOA Suite WebサービスでのWebサービス原子性トランザクションの有効化(インバウンド)

Oracle SOA Suite Webサービスに対して、Webサービス原子性トランザクションを有効化および構成します。設計時にはOracle JDeveloperを使用してWebサービスの作成時に、デプロイ時にはFusion Middleware Controlを使用して行います。詳細は、次の項を参照してください。

- 設計時: 『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のWS-Atomicトランザクション・サポートに関する項。

- デプロイ時: Web Servicesのセキュリティおよび管理者ガイドのWebサービス原子性トランザクションの構成に関する項。

構成オプションの詳細は、「Webサービス原子性トランザクションの構成」を参照してください。

Oracle SOA Suite参照でのWebサービス原子性トランザクションの有効化(アウトバウンド)

Oracle SOA Suite参照に対して、デプロイ時にFusion Middleware Controlを使用してWebサービス原子性トランザクションを有効化および構成します。表6-3に定義されているように、バージョンおよびフロー・タイプを構成します。詳細は、『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のWebサービス原子性トランザクションの構成に関する項を参照してください。

Webサービス原子性トランザクションを有効化および構成します。設計時にはOracle JDeveloperを使用してWebサービスを作成するときに行い、デプロイ時にはFusion Middleware Controlを使用して行います。詳細は、次の項を参照してください。

- 設計時: 『Oracle Fusion Middleware Oracle SOA Suite開発者ガイド』のWS-Atomicトランザクション・サポートに関する項。

- デプロイ時: Web Servicesのセキュリティおよび管理者ガイドのWebサービス・クライアントの構成に関する項。

構成オプションの詳細は、「Webサービス原子性トランザクションの構成」を参照してください。

Webサービス原子性トランザクションの構成

次の表は、SOA Webサービスに対してWebサービス原子性トランザクションを有効化する際に設定できる構成オプションをまとめたものです。Webサービス原子性トランザクションの有効化の詳細は、Oracle SOA Suite WebサービスでのWebサービス原子性トランザクションの有効化(インバウンド)に関する項およびOracle SOA Suite参照でのWebサービス原子性トランザクションの有効化(アウトバウンド)に関する項を参照してください。

表6-2 Webサービス原子性トランザクションの構成オプション

属性

説明

バージョン

SOAサービスまたはSOA参照に対してサポートされているWebサービス原子性トランザクション調整コンテキストのバージョン。SOA参照の場合、アウトバウンド・メッセージに使用されるバージョンのみを指定します。指定した値は、トランザクション全体で整合している必要があります。

有効な値は、WSAT10、WSAT11、WSAT12およびDEFAULTです。

SOAサービスのDEFAULT値は、(インバウンド・リクエストにより起動された)3つのバージョンすべてです。

SOA参照のDEFAULT値は次のとおりです。

- フロー・オプションがWSDLDRIVENの場合、WSDLで通知されたバージョンが使用されます。

- フロー・オプションがWSDLDRIVEN以外の設定の場合は、WSAT10が使用されます。

フロー・タイプ

Webサービス原子性トランザクション調整コンテキストがトランザクション・フローとともに渡されるかどうかを指定します。有効な値は、表6-3を参照してください。

次の表は、フロー・タイプの有効な値およびWebサービスおよびクライアントでのそれらの意味をまとめたものです。また、@TransacationAttribute注釈を使用するEJB型のWebサービスに対してWebサービス原子性トランザクションを構成する際の有効な値の組合せも示しています。

表6-3 フロー・トランザクションの調整コンテキスト・タイプの値

値

Webサービス・クライアント

Webサービス

EJB @TransactionAttributeの有効な値

NEVER(SOAサービスのデフォルト)

JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートしません。

JTAトランザクションがない場合: トランザクションの調整コンテキストをエクスポートしません。

トランザクション・フローが存在する場合: トランザクションの調整コンテキストをインポートしません。CoordinationContextヘッダーにmustunderstand="true"が含まれている場合は、SOAPフォルトがスローされます。

トランザクション・フローがない場合: トランザクションの調整コンテキストをインポートしません。

NEVER、NOT_SUPPORTED、REQUIRED、REQUIRES_NEW、SUPPORTS

SUPPORTS

JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートします。

JTAトランザクションがない場合: トランザクションの調整コンテキストをエクスポートしません。

トランザクション・フローが存在する場合: トランザクション・コンテキストをインポートします。

トランザクション・フローがない場合: トランザクションの調整コンテキストをインポートしません。

SUPPORTS、REQUIRED

MANDATORY

JTAトランザクションがある場合: トランザクションの調整コンテキストをエクスポートします。

JTAトランザクションがない場合: 例外がスローされます。

トランザクション・フローが存在する場合: トランザクション・コンテキストをインポートします。

トランザクション・フローがない場合: サービス側の例外がスローされます。

MANDATORY、REQUIRED、SUPPORTS

WSDLDRIVEN(SOA参照のみ。デフォルト。)

WebサービスWSDLで通知された値に基づく動作をします。

なし

通知された値によって異なります。

コーディネータと参加者の間で交換されるメッセージの保護

コーディネータと参加者の間で交換されるメッセージを保護するには、WebLogic Server管理コンソールを使用して、次の表に定義されているプロパティを構成します。これらのプロパティは、ドメイン・レベルで構成します。詳細な手順は、Oracle WebLogic Server管理コンソールのヘルプのWebサービス原子性トランザクションの構成に関する項を参照してください。

表6-4 Webサービス原子性トランザクションの保護

プロパティ

説明

Webサービス・トランザクションのトランスポート・セキュリティ・モード

コーディネータと参加者の間のメッセージ交換に双方向SSLを使用するかどうかを指定します。このプロパティは、次のいずれかの値に設定できます。

- SSLは不要: Webサービス・トランザクションのプロトコル・メッセージはすべて、HTTPチャネル経由で交換されます。

- SSLが必要: Webサービス・トランザクションのプロトコル・メッセージはすべて、HTTPSチャネル経由で交換されます。このフラグは、原子性トランザクションが有効になっているMicrosoft .NET Webサービスを起動する際に有効にする必要があります。

- クライアント証明書が必要: Webサービス・トランザクションのプロトコル・メッセージはすべてHTTPS経由で交換され、クライアント証明書が必要となります。

詳細は、Oracle WebLogic Server管理コンソールのヘルプの双方向SSLの構成に関する項を参照してください。

Webサービス・トランザクションの発行済みトークンを有効化

IssuedTokenを使用してWebサービス原子性トランザクションのコーディネータと参加者の間の認証を有効にするかどうかを指定するフラグ。

IssuedTokenは、コーディネータによって発行され、セキュリティ・コンテキスト・トークン(SCT)と署名用のセッション・キーで構成されます。参加者は、共有セッション・キーを使用して署名した署名を登録メッセージに入れて送信します。コーディネータは、セッション・キーを使用して署名を検証することにより、参加者を認証します。

7 MTOMエンコード・メッセージ添付ファイルの使用

この章では、メッセージ転送最適化メカニズム(MTOM)形式でエンコードされたメッセージがOracle Infrastructure Webサービスにより処理される方法について説明します。

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

- メッセージ転送最適化メカニズムの概要

- 事前定義済のMTOMアタッチメント・ポリシー

- MTOMポリシーのアタッチ

- MTOMポリシーの構成

メッセージ転送最適化メカニズムの概要

JPEG形式のイメージなどのバイナリ・コンテンツは、クライアントとWebサービスの間で渡すことができます。通常、バイナリ・コンテンツを渡すためには、XMLドキュメントにxsd:base64Binary文字列として挿入します。この形式でバイナリ・コンテンツを送信すると、伝送中の送信メッセージのサイズが大幅に増え、処理に要する空間と時間の点でコストが高くなります。

MTOMを使用すると、バイナリ・コンテンツをMIME添付ファイルとして送信できるため、ワイヤ書式の送信サイズを小さくできます。バイナリ・コンテンツは、意味上はXMLドキュメントの一部です。メッセージ上のWS-Security署名などの操作を適用できる点で、SWA(添付ファイル付きのSOAPメッセージ)よりも優れています。詳細は次の仕様を参照してください。

- SOAP 1.2: http://www.w3.org/TR/2005/REC-soap12-mtom-20050125

- SOAP 1.1: http://www.w3.org/Submission/2006/SUBM-soap11mtom10-20060405

MTOMを使用してバイナリ・コンテンツを添付ファイルとして渡すと、Webサービス・スタックのパフォーマンスが向上します。MTOMエンコード・メッセージにバイナリ・コンテンツが含まれていない場合、パフォーマンスは影響を受けません。

MTOMは、SOAP 1.2メッセージ用の最適化された送信メカニズムに、XMLスキーマ型xs:base64Binaryの要素を含むエンベロープを提供します。MTOMは、次の仕様で説明されているデータ処理メカニズムを利用します。

- XOP(XML-binary Optimized Packaging): コンテンツの型がxs:base64BinaryのXML Infosetをより効率的にシリアライズするためのメカニズムを提供します。XOP仕様は、Webサイトhttp://www.w3.org/TR/xop10/で入手可能です。

- DMCBDX(Describing Media Content of Binary Data in XML): コンテンツ型の情報をXMLインスタンスおよびスキーマのバイナリ・データに提供します。この情報を使用して、バイナリ・データの処理を最適化できます。DMCBDX仕様は、Webサイトhttp://www.w3.org/TR/2005/NOTE-xml-media-types-20050504/で入手できます。

- RRSHB(Resource Representation SOAP Header Block): SOAPメッセージを使用して、JPEGイメージなどのWebリソース表現をSOAPヘッダー・ブロックで送信できます。MTOMおよびXOPと組み合せると、RRSHB SOAPヘッダー・ブロックに含まれるWebリソースは、SOAPヘッダー内のxs:base64Binary文字列ではなく未処理のバイナリMIME添付ファイルとして送信できます。RRSHB仕様は、Webサイトhttp://www.w3.org/TR/2005/REC-soap12-rep-20050125/で入手できます。

これらの仕様は、OSUCR(SOAP Optimized Serialization Use Cases and Requirements)で説明されている要件を満たしています(http://www.w3.org/TR/2004/WD-soap12-os-ucr-20040608/を参照)。

事前定義済のMTOMアタッチメント・ポリシー

第2章「Oracle Infrastructure Webサービスへのポリシーのアタッチ」で説明されているように、Oracle WSMには、Oracle Fusion Middlewareをインストールすると自動的に使用可能になる一連の事前定義済のポリシーおよびアサーション・テンプレートが用意されています。

表7-1にリストされているMTOMアタッチメント・ポリシーは、即時に利用可能です。

表7-1 事前定義済のMTOMアタッチメント・ポリシー

信頼性のあるメッセージング・ポリシー

説明

oracle/wsmtom_policy

MTOM形式でないインバウンド・メッセージを拒否し、アウトバウンド・メッセージがMTOM形式であることを確認します。

事前定義済のMTOMアタッチメント・ポリシーの詳細は、Web Servicesのセキュリティおよび管理者ガイドのMTOMアタッチメント・ポリシーに関する項を参照してください。

MTOMポリシーのアタッチ

Oracle Infrastructure WebサービスおよびクライアントにMTOMポリシーをアタッチできます。設計時にはOracle JDeveloperを使用して、実行時にはFusion Middleware Controlを使用して行います。詳細は、第2章「Oracle Infrastructure Webサービスへのポリシーのアタッチ」を参照してください。

MTOMポリシーの構成

構成手順は必要ありません。

8 RESTful Webサービスの開発

この章では、Representational State Transfer (RESTful) Webサービスの概念を示し、Java API for RESTful Web Services (JAX-RS)を使用してRESTful Webサービスを開発および構成する方法について説明します。

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

- RESTful Webサービスの概要

- RESTful Webサービス・リクエストが作成および処理される仕組み

- RESTful Webサービスの有効化

- RESTful Webサービスのサポートの制限事項

RESTful Webサービスの概要

Representational State Transfer (REST)は、SOAPなどの追加メッセージング・レイヤなしで、標準化されたインタフェース(HTTPなど)を介してデータを送信する単純なインタフェースを記述するものです。RESTには、ステートレス・サービスを作成するための一連の設計ルールが用意されており、これらはリソース(特定の情報のソース)として表示されます。それぞれのリソースは固有のURIで識別できます。クライアントがURIを使用してリソースにアクセスすると、標準化された固定のメソッド・セットと、リソースの表示が返されます。クライアントは、新しい各リソース表示を使用してステートを転送します。

HTTPプロトコルを使用してRESTfulリソースにアクセスする際は、リソース識別子がリソースのURLとなります。そのリソースに対して実行する標準操作は、HTTPメソッドの1つ(GET、PUT、DELETE、POSTまたはHEAD)です。

RESTfulエンドポイントは、javax.xml.ws.Provider<T>インタフェースのinvoke()メソッドを使用して構築します(http://docs.oracle.com/javaee/5/api/javax/xml/ws/Provider.htmlを参照)。Providerインタフェースは、サービス・エンドポイント・インタフェース(SEI)を構築しない動的な手段として使用できます。

RESTful Webサービス・リクエストが作成および処理される仕組み

次の各項で、RESTful Webサービス・リクエストがクライアント側でどのように作成され、サーバー側でどのように処理されるかを説明します。

- HTTP Getリクエストの構築

- HTTP Postリクエストの構築

- RESTfulレスポンスの構築

HTTP Getリクエストの構築

たとえば、次のURLでREST対応のSOAPエンドポイントがデプロイされているとします。

http://example.com/my-app/my-service

この場合、次のURLでHTTP GETリクエストが受け入れられます。

http://example.com/my-app/my-service/{operationName}?{param1}={value1}&{param2}={value2}

この例では、{operationName}はサービスに対するWSDL内の操作名の1つです。RPC-literal操作の場合は、{param1}、{param2}などが、操作の入力であるwsdl:message内で定義される各部分の名前になります。ただし、これらの各部分はsimpleType(xsd:intなど)である必要があります。

注意:
ブラウザによっては、HTTP GET URLのサイズが制限されていることがあります(通常は2000文字未満)。パラメータ数を制限し、パラメータの名前と値を短くすることで、URLのサイズを小さくするように注意してください。

document-literal操作では、メッセージはパラメータを1つのみ持ちます。複数のパラメータをシミュレートするため、WSDLには、スキーマでsequenceとして定義されている1つのみのパラメータを指定します。sequenceの各メンバーをパラメータと考えることができます。この場合、{param1}、{param2}などが、message部分ではなくsequence型のメンバーになります。RPC-literalの場合と同様に、これらのメンバーはsimpleTypeである必要があります。

次の例は、addNumbersという名前の操作に対して定義されたリクエスト・メッセージを示しています。

例8-1 操作に対するGETリクエスト

<wsdl:message name="AddNumbersRequest">
<wsdl:part name="a" type="xsd:int" />
<wsdl:part name="b" type="xsd:int" />
</wsdl:Message>

このリクエストは、次のURLを指定したGETを使用して起動できます。

http://{yourhost}/{context-path}/{service-url}/addNumbers?a=23&b=24

次の例は、OracleAS Web ServicesプラットフォームがGETリクエストからサーバー側で作成するSOAPエンベロープを示しています。このメッセージは、他の受信SOAPリクエストと同様に処理されます。

例8-2 GETリクエストから作成されるSOAPエンベロープ

<soap:Envelope>
<soap:Body>
<ns:addNumbers>
<ns:a>23</ns:a>
<ns:b>24</ns:b>
</ns:addNumbers>
<soap:Body>
<soap:Envelope>

次の例は、サービスがdocument-literal操作として定義されている場合にaddNumbersサービスに対して送信されるリクエスト・メッセージを示しています。

例8-3 document-literalのラップ操作に対するGETリクエストの例

<wsdl:message name="AddNumbersRequest">
<wsdl:part name="params" type="tns:AddNumbersRequstObject" />
</wsdl:Message>

次の例は、AddNumbersRequestObjectの定義を示しています。これはスキーマでも同じ定義になります。

例8-4 document-literalのラップ操作のXML定義

<xsd:complexType name="AddNumbersRequestObject">
<xsd:complexContent>
<xsd:sequence>
<xsd:element name="a" type="xsd:int"/>
<xsd:element name="b" type="xsd:int"/>
</xsd:sequence>
</xsd:complexContent>
</xsd:complexType>

この操作は、次のURLを指定したGETリクエストによって起動できます。

http://{yourhost}/{context-path}/{service-url}/addNumbers?a=23&b=24

注意:
これは、例8-1のRPC-literalリクエストに使用したものと同じURLです。

HTTP Postリクエストの構築

RESTful Webサービスでは、単純なXMLメッセージのHTTP POSTリクエストはサポートされていますが、SOAPエンベロープのHTTP POSTリクエストはサポートされていません。RESTfulリクエストでは、添付ファイル付きのメッセージはサポートされていません。RESTful WebサービスではSOAPリクエストもサポートされているため、指定されたリクエストがSOAPまたはRESTfulのどちらであるかを実装側で判断する必要があります。

SOAPサービスは、POSTリクエストを受信するとSOAPアクション・ヘッダーを検索します。ヘッダーが存在する場合は、実装はこのリクエストをSOAPリクエストであると判断します。存在しない場合は、リクエストのroot要素のQNameが検索されます。それがSOAPエンベロープのQNameであれば、メッセージはSOAPリクエストとして処理されます。そうでない場合は、RESTfulリクエストとして処理されます。

RESTfulリクエストは、リクエスト・ドキュメントをSOAPエンベロープでラップすることで処理されます。SOAP 1.2リクエストのContent-TypeヘッダーではないHTTPヘッダーのみが、そのまま受信されます。このContent-Typeヘッダーは、SOAP 1.2用の適切なコンテンツ・タイプであるapplication/soap+xmlに変更されます。

たとえば、次のRESTfulリクエストは、例8-6のSOAPエンベロープにラップされます。

例8-5 RESTfulリクエスト

<ns:addNumbers>
<ns:a>23</ns:a>
<ns:b>24</ns:b>
</ns:addNumbers>

次のリクエストは、通常のSOAPリクエストとして処理されます。

例8-6 RESTfulリクエストをラップするSOAPエンベロープ

<soap:Envelope>
<soap:Body>
<ns:addNumbers>
<ns:a>23</ns:a>
<ns:b>24</ns:b>
</ns:addNumbers>
</soap:Body>
</soap:Envelope>

RESTfulレスポンスの構築

RESTfulリクエストとして処理される(GETまたはPOST)リクエストに対するレスポンスも、RESTfulスタイルである必要があります。サーバーは、サーバー上のSOAPレスポンスをクライアントに送信する前に、RESTfulレスポンスに変換します。RESTfulレスポンスは、SOAP本体の最初の子要素をルート要素として持つXMLドキュメントになります。たとえば、次の例のSOAPエンベロープがサーバー上にあると想定します。

例8-7 SOAPレスポンス

<soap:Envelope>
<soap:Body>
<ns0:result xmlns:nso="…">
<ns:title>How to Win at Poker</ns:title>
<ns:author>John Doe</ns:author>
</ns0:result>
</soap:Body>
</soap:Envelope>

次の例は、クライアントに返送されるレスポンスを示しています。Content-Typeが常にtext/xmlである点に注意してください。SOAPヘッダーや添付ファイルは、クライアントに返送されません。

例8-8 RESTfulレスポンス

<ns0:result xmlns:ns0="…">
<ns:title>How to Win at Poker</ns:title>
<ns:author>John Doe</ns:author>
</ns0:result>

RESTful Webサービスの有効化

Fusion Middleware Controlを使用してWebサービスを管理する際に、WebサービスをRESTful Webサービスとして有効化するには、次の図に示すように、「Webサービス・エンドポイント」ページの「構成」タブで「RESTの有効化」を「True」に設定します。詳細は、Web Servicesのセキュリティおよび管理者ガイドのRESTful Webサービスの有効化または無効化に関する項を参照してください。

図8-1 RESTful Webサービスの有効化

RESTful Webサービスのサポートの制限事項

次のリストは、OracleAS Web ServicesによるRESTful Webサービスのサポートにおける制限事項です。

- RESTful Webサービスは、literal操作を含むWebサービス・アプリケーションに対してのみサポートされます(リクエストとレスポンスの両方がリテラルである必要があります)。

- HTTP GETは、(必須の)複合パラメータのないWebサービス操作に対してのみサポートされます。

- ブラウザによっては、HTTP GET URLのサイズが制限されていることがあります(通常は2000文字以下)。パラメータ数を制限し、パラメータの値と名前を短くすることで、URLのサイズを小さくするように注意してください。

- RESTful Webサービスでは、簡易XMLメッセージのみが送信されます。添付ファイル付きメッセージは送信できません。

- セキュリティや信頼性など、管理機能の多くは、RESTful Webサービスでは利用できません。これは、この情報の伝達に通常使用されるSOAPヘッダーが、サービスのRESTful起動では使用できないためです。

- RESTful起動は、生成されたスタブまたはDIIクライアントから行うことはできません。それらのクライアントからの起動はSOAPで行われます。

- プロバイダのフレームワークでは、RESTはサポートされません。

- RESTful Webサービスでの操作名には、マルチバイト・キャラクタは使用できません。

9 相互運用性のガイドライン

この章では、Oracle Infrastructure Webサービスとの相互運用性を確保するガイドラインを説明します。

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

- Webサービスの相互運用性の概要

- Webサービスの相互運用性に関わる組織

- 相互運用性のあるWebサービスを作成するための一般的なガイドライン

Webサービスの相互運用性の概要

Webサービス・アークテクチャの目標は、異機種のビジネス・アプリケーションが円滑に連携することです。アーキテクチャは疎結合され、XML標準に基づいています。Webサービスは、サービス・コントラクトとしてWeb Service Description Language(WSDL)ファイルを定義することで、その背後にあるオペレーティング・システムや開発技術にかかわらず相互に連携するよう設計されています。ただし、サービス・コントラクトが複雑なため、WSDLやSOAPなどの標準の解釈が曖昧になっています。また、ベンダー固有の機能強化や拡張が全体的な相互運用性の妨げとなっています。

ビジネス・アプリケーションは互いのサービスを起動する必要があります。これらのサービスが異なるテクノロジで実装されていることもあります。Webサービスの複雑さが増すと、相互運用がうまくいかないケースも増える傾向にあります。一般に公開されているWebサービスを運用しているとしたら、様々なツールキットを使用している世界中のクライアントがそのWebサービスを起動できるようにする必要があります。同じように、ビジネス・アプリケーションにも、既存のレガシー・システム上に構築されていて、インタフェースの設計があまり一般的でない他ベンダーのWebサービスとの統合または連携が必要な場合もあります。

相互運用性の問題は、プロトコル・スタックのどのレイヤーからも生じる可能性があります。トランスポート・レベルでは、メッセージ交換における双方の当事者が特定の物理的なトランスポート・メカニズムについて合意している必要があります。たとえば、Java以外のプラットフォームを使用している相手にJMSトランスポートの使用を期待することはできません。基本的なHTTPプロトコルを使用した方が、相互運用性が高まる理由はここにあります。メッセージ・レベルでは、任意のデータ・エンコーディングの使用がSOAPで事実上許可されているため相互運用は難しくなります。たとえば、Javaプラットフォームの標準のArrayListは、.NETプラットフォームのSystem.collections.ArrayListには自動的には変換されません。また、相互運用性の問題は、基本的なWSDLやSOAPのレベルでも発生します。高度なWebサービスの開発者は、セキュリティ、信頼性、トランザクション・サービスなどのサービス品質(QOS)機能の実装を開始すると、その他にも様々な難題に直面することになります。

相互運用性の実現は難しい問題です。ただし、適切なガイドラインがあれば、Oracle Webサービスはその他のJava EEベンダーのプラットフォームや、Microsoft .NETプラットフォームなどのJava以外のプラットフォームとシームレスに連携できます。

Webサービスの相互運用性に関わる組織

Webサービスのコミュニティで相互運用性の重要度が増すにつれ、その目標を達成するために多くの組織が設立されました。

SOAPBuildersコミュニティ

SOAPBuildersは、SOAP実装間の相互運用性のテスト・セットの確立に向けて活動する開発者の、緩やかに組織化されたフォーラムです。相互運用性は、このフォーラムの参加者によって共同で定義された一連の正規テストを実施することにより実証されます。

SOAPBuilderコミュニティによって開発されたテストは、全般的にベンダーの慣例に基づいています。ただし、慣例は時とともに変わります。Webサービス・ベンダー、Webサービス開発者およびWebサービスの利用者には、正式にまとめられた、不要なものの混じっていないはっきりとしたルールが必要です。SOAPBuilderのテストの詳細は、Webサイトhttp://www.soapbuilders.org/を参照してください。

WS-Interoperability

Web Services Interoperability(WS-I)は、Webサービス間の相互運用可能なメッセージ交換のための一般的なプロトコルの作成、普及、サポートを行う業界のオープンな組織です。WS-Iプロファイルは、標準の適用方法に関するガイドラインおよび推奨事項です。これらのプロファイルは、基礎となる仕様に制約を追加して曖昧さをなくすことを目的としています。

WS-Iの成果物は、プロファイル、一般的なプラクティスまたはベスト・プラクティス、シナリオ、テスト・ソフトウェアおよびテスト資料です。Webサービスは、WS-I Basic Profileに準拠するように設計する必要があります。WS-Iに準拠したサービスは明瞭なコントラクトに同意しており、相互運用性を実現する可能性が高くなります。

たとえば、WS-I Basic Profileに準拠しているWebサービスでは、次の機能を使用する必要があります。

- トランスポート・バインディングとしてHTTPまたはHTTPSを使用します。HTTP 1.0よりもHTTP 1.1が優先されます。

- literalスタイルのエンコーディングを使用します。SOAPエンコーディングは使用しないでください。

- より厳密なフォルト・メッセージ構文を使用します。MESSAGEにsoap:Fault要素が含まれている場合、その要素の子は非修飾である必要があります。

- XMLバージョン1.0を使用します。

- サービスでは、規則ArrayOfXXXを使用した配列ラッパー要素の宣言はできません。

WS-Iプロファイル、およびプロファイル内に定義されているルールの詳細は、WS-IのWebサイト(http://www.ws-i.org/)を参照してください。

OracleはWS-I組織のメンバーで、顧客が相互運用性を実現する手助けとなるよう取り組んでいます。Oracle Infrastructure Webサービス・プラットフォームは非常に柔軟性が高く、相互運用性のあるWebサービスの作成を支援します。

Oracle JDeveloperでは、WSDLファイルの統合テストおよびWS-I Basic Profile準拠のWebサービスの実行をサポートしています。監視およびロギング用の拡張HTTPアナライザが用意されており、相互運用性の問題をより詳細に診断する組込みの分析およびレポート・ツールも提供されています。詳細は、Oracle JDeveloperのオンライン・ヘルプを参照してください。

相互運用性のあるWebサービスを作成するための一般的なガイドライン

一般的なガイドラインの1つ目は、可能な場合にはWS-Iに準拠したWebサービスを作成することです。ただし、WS-Iプロファイルですべての相互運用性の問題が解決するわけではありません。WS-Iプロファイルが存在する以前から、多くのWebサービスが実装されていました。また、Webサービスとして有効化しているレガシー・システムにより、設計が制限される場合もあります。そのため、可能な場合には、開発プロセスの初期段階からWebサービス設計の秘訣を取り入れることです。

次の各項で、相互運用性のあるWebサービスを作成するための一般的なガイドラインを示します。

Webサービスをトップダウン方式で設計する

WSDLからのトップダウン方式を採用することにより、プラットフォームや言語に固有の特徴に制限されないサービス・コントラクトからWebサービスを設計できます。コントラクトレベルの相互運用性は、Webサービスの実装前から確保できます。他のWebサービス・プラットフォーム・ツールでWSDLファイルを処理できるようになり、サービスが既存のレガシーAPIに影響される可能性も低くなります。

最初はXSDを使用してデータ型を設計する

可能な場合には、XSDスキーマ・エディタを使用してスキーマ型を持つデータ型を設計します。.NETのDataSetデータ型やJavaコレクションなど、プラットフォーム固有のデータ型の使用は避けます。

データ型はシンプルにする

xsd:choiceなどの不必要に複雑なスキーマ・データ型の使用は避けます。最高の相互運用性はシンプルなデータ型により実現され、パフォーマンスの向上という利点ももたらします。

1次元配列を使用する

可能な場合は、1次元配列を使用します。多次元配列ではなく、配列の配列を使用します。

(RPCエンコード形式でのみ適用される)多次元配列は、.NETプラットフォームではサポートされていません。また、多次元配列の場合は、内部配列の長さが同じである必要があります。配列の配列を使用した方が、内部の配列の長さが異なってもかまわないという点で柔軟性があります。

注意:
XSDではWSDLでの多次元配列の定義がサポートされていますが、Javaなどのプログラミング言語ではそれらが配列の配列にマッピングされ、ペイロードが多次元形式で表示されます。ペイロードが多次元形式に変換されるときに、Java VMによって各内部配列の長さが同じであることが確認され、その他のチェックも実行されます。

空の配列と配列へのNULL参照とを区別する

たとえば、minoccurs=0およびxsd:nillable=trueという属性を含む配列がある場合、サービス実装がこの配列へのNULL参照を返そうとすると、ペイロードの表示に問題が発生します。ペイロード内のminoccurs=0としてのこの要素を完全に無視されるような実装もあれば、ペイロード内のこの要素を属性xsi:nil=trueで指定するような実装もあります。

同じ問題が、配列をデシリアライズしようとした場合にも発生します。NULL参照にデシリアライズすることも、何も要素を含まない配列にデシリアライズすることもできます。この場合のガイドラインは、必ず長さチェックの前にNULLをチェックすることです。

スパース配列、可変サイズ配列または多次元配列は使用しない

XSDではスパース配列、可変サイズ配列および多次元配列がサポートされていますが、ターゲット・プラットフォームではサポートされていないこともあります。WebサービスをWSDLからトップダウン方式で作成する場合は、これらの配列タイプの使用を避け、通常の配列を使用してください。

xsd:anyTypeは使用しない

通常、xsd:anyTypeはJavaプラットフォームでjava.lang.Objectにマッピングされます。これにより、個別のシリアライザおよびデシリアライザの登録を必要とするランタイムを通過することができます。ガイドラインは、ランタイムで使用可能なすべてのタイプを見つけて、それらをWSDLで定義することです。

次の例は、MyAnyTypeというクラスと、それを拡張するMyPossibleType1およびMyPossibleType2という2つのクラスを示しています。この場合は、Webメソッド内でxsd:anyTypeのかわりにMyAnyTypeを使用します。

例9-1 メンバー変数を含むクラス

public class MyAnyType {
//No member variable
}

public class MyPossibleType1 extends MyAnyType {
//member variable.
}

public class MypossibleType2 extends MyAnyType {
//member variable
}
..

サポートされていないxsd:typeはSOAPElementにマッピングする

WSDLでサポートされていないxsd:typeが1つあるだけで、相互運用性に影響を及ぼす可能性があります。簡単な回避策は、JAX-RPCマッピング・ファイルなどのマッピング・メカニズムを使用して、サポートされていないXSDタイプをSOAPElementにマッピングすることです。サポートはされているが実行時に失敗するような型も、SOAPElementにマッピングして、クライアントまたはサーバーの内部でSOAPElementを解析することができます。

NULL値は慎重に使用する

NULL値を使用して行う処理を決定します。たとえば、配列型にNULL値を許可しますか。NULL文字列または空の文字列を使用しますか。プラットフォーム間でNULL値を送信すると、受信者側で例外の原因となりますか。

可能な場合は、NULL値を送信しないようにします。アプリケーションでどうしてもNULL値を使用する必要がある場合は、NULL値が許可されていることが明確にわかるようにスキーマ型を設計します。

WSDLの検証にコンプライアンス・テスト・ツールを使用する

WebサービスがWS-Iに準拠するよう設計されている場合は、WS-Iモニター・ツールを使用してメッセージを記録し、アナライザ・ツールを使用して準拠しているかどうかを検証します。WS-Iツールは、Webサイトhttp://www.ws-i.org/deliverables/workinggroup.aspx?wg=testingtools/から無料でダウンロードできます。

各プラットフォームにネイティブの型の違いを考慮する

xsd:unsignedshortやxsd:unsignedintなどの一部のスキーマ型には、必ずしもネイティブのデータ型のダイレクト・マッピングがあるわけではありません。たとえば、Javaプラットフォームに相当する符号なし型はありません。xsd:double、xsd:float、xsd:decimalなどのスキーマの数値型は、一度プラットフォームにネイティブのデータ型にマッピングされると精度が変わることがあります。

また、xsd:string型には制限があります。文字列には不正なXML文字を含めることはできず、\r(キャリッジ・リターン)文字は通常は\n(改行)文字にマッピングされます。

ソース・データで使用されている文字セットがわからない場合は、xsd:stringでなくbyte[]を使用してください。バイナリ・コンテンツの方がテキスト・コンテンツよりも運用性が高くなります。

Javaクラスからボトムアップ方式でWebサービスを作成する場合は、可能な限り最も近いデータ型を使用します。したがって、よりxsd:typeに近いJavaデータ型を使用してください。たとえば、日時を表すためにxsd:dateTimeを使用する場合は、java.lang.Dataやjava.util.Calendarではなくjavax.xml.datatype.XMLGregorianCalendarデータ型を使用します。XMLGregorianCalendarデータ型のほうが、小数秒を格納できるため、より正確な時刻を返すことができます。

WSDLからトップダウン方式でWebサービスを作成する場合は、時刻の正確性が非常に重要であれば、マッピング・ファイルを使用してxsd:dateTimeをXMLGregorianCalendarにマッピングします。

注意:
Java EE以前のプラットフォーム(Java EE 1.*など)ではすべてCalendarを使用していましたが、現在のJava EE準拠プラットフォームではXMLGregorianCalendarを使用しています。この方が長い小数秒を処理できるため、.Netの相互運用性が高くなります。

RPC-encodedメッセージ書式は使用しない

RPC-encodedメッセージ書式自体に、他のプラットフォームやクライアントとの相互運用性がないわけではありません。今日稼働しているWebサービスの多くは、RPC-encodedです。RPC-encodedメッセージ書式の使用を避ける理由は、基礎となる仕様の解釈や実装の選択の違いが相互運用性の妨げになるという問題を回避するためです。たとえば、スパース配列、多次元配列、カスタム・フォルト・コードQName、un-typedペイロードなどの処理がその例です。

名前の競合を回避する

Javaクラスからボトムアップ方式でWebサービスを作成する場合、クラス内に明示的なパッケージ名を使用することにより名前の競合を回避できます。WSDLからトップダウン方式でWebサービスを作成する場合は、一意のネームスペースURIを使用することにより名前の競合を回避できます。

注意:
トップダウン・アプローチを使用しているほとんどのWebサービス・アセンブリ・ツールでは、デフォルトで、生成されたクラスのパッケージ名をネームスペースURIから導出しようとします。ボトムアップ・アプローチを使用しているツールでは、Javaパッケージ名を使用してネームスペースURIを導出しようとします。
有効なパッケージ名の制限のため、この導出は1-1ではありません。したがって、ネームスペースURIの指定は、別のネームスペースURIにより生成されたパッケージと名前が競合することがないように行うことが非常に重要です。

メッセージ・ハンドラ、カスタム・シリアライザまたはインターセプタを使用する

メッセージ・ハンドラ、カスタム・シリアライザまたはインターセプタを使用すると、相互運用性の問題を簡単に修正できます。これは、デシリアライザで処理される前、またはシリアライザによりペイロードが生成されてからワイヤ書式になるまでに、ペイロードに関する問題を非常に細かいレベルで修正するという考え方です。

WS-*仕様は慎重に適用する

多くのWS-*仕様はまだ導入の初期段階であり、多様なスタックを持つ相互運用性の問題を浮き彫りにする可能性もあります。WS-*機能を適用する前に、それが本当に必要かどうかを確認することをお薦めします。あるいは、Webサービスの領域で最も一般的に使用されている機能を適用することをお薦めします。たとえば、セキュリティに対して基本認証、X.509またはKerberosを選択する場合など、使用可能なオプションが複数あれば、Webサービスの領域で最も一般的に使用されているオプションを選択してください。

A 注釈リファレンス

この付録では、Oracle Infrastructure Webサービスで使用される非同期Webサービスおよびポリシー注釈について説明します。

この付録のトピックは、次のとおりです。

- 注釈の概要

- @AsyncWebService注釈

- @AsyncWebServiceQueue注釈

- @AsyncWebServiceResponseQueue注釈

- @CallbackManagementPolicy注釈

- @CallbackMethod注釈

- @CallbackMtomPolicy注釈

- @CallbackProperties注釈

- @CallbackSecurityPolicy注釈

- @PortableWebService注釈

- @PortableWebServiceProvider注釈

- @Property注釈

- @ResponseWebService注釈

- @Retry注釈

注釈の概要

WebLogic Webサービス・プログラミング・モデルでは、(http://www.jcp.org/en/jsr/detail?id=175のJSR-175で規定されている)http://today.java.net/pub/a/today/2007/05/22/using-annotations-in-java-ee-5.html機能のJDK 6.0メタデータ注釈を使用しています。このプログラミング・モデルでは、注釈付きのJavaファイルを使用してWebサービスの形状や特性を作成します。

表A-1は、この付録で説明している非同期Webサービスおよびポリシー注釈をまとめたものです。

使用可能な注釈の詳細は、Oracle Fusion Middleware Oracle Web ServicesのためのJava APIリファレンス』を参照してください。事前定義済ポリシーの詳細は、Web Servicesのセキュリティおよび管理者ガイドの事前定義済ポリシーに関する項を参照してください。

表A-1 Oracle Infrastructure Webサービスの注釈

注釈

説明

@AsyncWebService注釈

Webサービスを非同期Webサービスとして宣言します。

@AsyncWebServiceQueue注釈

後で処理されるようリクエストを保存するために使用するキューの詳細を指定します。

@AsyncWebServiceResponseQueue注釈

後で処理されるようレスポンスを保存するために使用するキューを定義します。

@CallbackManagementPolicy注釈

管理ポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。

@CallbackMethod注釈

コールバックportType内の対応する操作のWSDLエンティティの名前をカスタマイズし、メソッドが同期か非同期かを設定し、レスポンスの自動送信を無効化できます。

@CallbackMtomPolicy注釈

MTOMポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。

@CallbackProperties注釈

コールバック・サービスをコールするときにメッセージ・コンテキスト内で必須となるプロパティを指定できます。

@CallbackSecurityPolicy注釈

1つ以上のセキュリティ・ポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。

@PortableWebService注釈

JWSファイルがOracle Infrastructure Webサービスを実装することをクラス・レベルで指定します。

@Property注釈

コールバック・サービスをコールするときにメッセージ・コンテキスト内で必須となる単一のプロパティを指定できます。

@ResponseWebService注釈

レスポンスWebサービス・ポート情報をカスタマイズします。

@AsyncWebService注釈

oracle.webservices.annotations.async.AsyncWebService注釈は、Webサービスを非同期Webサービスとして宣言します。

デフォルトでは、Webサービスに関連付けられた操作はすべて非同期となります。特定のメソッドを同期としてマークするには、「@CallbackMethod注釈」を参照してください。メソッドを同期的にも非同期的にもコールできるようにする場合は、メソッドを2つ作成して、それぞれに応じた注釈を付ける必要があります。

例:

@PortableWebService
@AsyncWebService
public class HelloService {
public String hello(String name) {
return "Hi " + name;
}
}

@AsyncWebServiceQueue注釈

oracle.webservices.annotations.async.AsyncWebServiceQueue注釈は、後で処理されるようリクエストを保存するために使用するキューを定義します。詳細は、リクエスト・キューおよびレスポンス・キューの構成に関する項を参照してください。

例:

@AsyncWebServiceQueue (
connectionFactory = "weblogic.jms.XAConnectionFactory",
queue = "oracle.j2ee.ws.server.async.NonDefaultRequestQueue",
enableTransaction = true
transactionTimeout=3600
messageProcessorInitialPoolSize=1
messageProcessorMaxPoolSize=16
)

次の表に、oracle.webservices.annotations.async.AsyncWebServiceQueue注釈に渡すことができる属性を定義します。

表A-2 oracle.webservices.annotations.async.AsyncWebServiceQueue注釈の属性

属性

説明

デフォルト

connectionFactory

リクエスト・キューのJMSキュー接続ファクトリの名前。

weblogic.jmx.XAConnectionFactory

queue

非同期リクエストを格納するために使用するJMSキューの名前。

oracle.j2ee.ws.server.async.DefaultRequestQueue

enableTransaction

MDBが非同期リクエストをトランザクションとして処理する必要があるかどうかを指定するフラグ。

注意: ユーザー・トランザクションは、独立してコミットまたはロールバックできるように、MDBトランザクションとは別に保守されます。

false

transactionTimeout

キューに並んだメッセージを処理するためのトランザクション・タイムアウト(秒単位)。この属性は、そのトランザクションが有効になっている場合かメソッドが多重呼出し不変ではない場合のみ有意です。このタイムアウトは、リクエスト・メッセージを処理するMDBに適用されます。

0: デフォルトでは、サーバーレベルで構成された値が使用されます。

messageProcessorInitialPoolSize

プール内で非同期リクエストを処理するために使用可能なメッセージ・プロセッサ・インスタンスの最初の数。

この値の設定の詳細は、「カスタムのリクエスト・キューおよびレスポンス・キューの作成」を参照してください。

1

messageProcessorMaxPoolSize

プール内で非同期リクエストを処理するために使用可能なメッセージ・プロセッサ・インスタンスの最大数。

値が大きいほど、スループットは向上します。ただし、使用されるリソース(スレッドやデータベース接続など)は多くなります。厳密なリソース要件は、非同期リクエスト・メッセージの保存に使用される永続ストアのタイプによって異なります。

この値の設定の詳細は、「カスタムのリクエスト・キューおよびレスポンス・キューの作成」を参照してください。

16

@AsyncWebServiceResponseQueue注釈

oracle.webservices.annotations.async.AsyncWebServiceResponseQueue注釈は、後で処理されるようレスポンスを保存するために使用するキューを定義します。

例:

@AsyncWebServiceQueue (
connectionFactory = "weblogic.jms.XAConnectionFactory",
queue = "oracle.j2ee.ws.server.async.NonDefaultResponseQueue",
enableTransaction = true
messageProcessorInitialPoolSize=1
messageProcessorMaxPoolSize=16
)

次の表に、oracle.webservices.annotations.async.AsyncWebServiceResponseQueue注釈に渡すことができる属性を定義します。

表A-3 oracle.webservices.annotations.async.AsyncWebService ResponseQueue注釈の属性

属性

説明

デフォルト

enabled

レスポンス・キューが有効かどうかを指定するフラグ。有効になっている場合、リクエストMDBによってリクエストが処理され、レスポンスがレスポンス・キューに格納されます。無効になっている場合、リクエストMDBによってレスポンス処理が実行されます。

true

connectionFactory

リクエスト・キューのJMSキュー接続ファクトリの名前。

weblogic.jmx.XAConnectionFactory

queue

非同期レスポンスに使用されるJMSキューの名前。レスポンスMDBは、レスポンス・キューからメッセージを取得してコールバック・サービスに転送します。

oracle.j2ee.ws.server.async.DefaultResponseQueue

enableTransaction

MDBが非同期レスポンスをトランザクションとして処理する必要があるかどうかを指定するフラグ。

注意: ユーザー・トランザクションは、独立してコミットまたはロールバックできるように、MDBトランザクションとは別に保守されます。

false

messageProcessorInitialPoolSize

プール内で非同期レスポンスを処理するために使用可能なメッセージ・プロセッサ・インスタンスの最初の数。

この値の設定の詳細は、「カスタムのリクエスト・キューおよびレスポンス・キューの作成」を参照してください。

1

messageProcessorMaxPoolSize

プール内で非同期レスポンスを処理するために使用可能なメッセージ・プロセッサ・インスタンスの最大数。

値が大きいほど、スループットは向上します。ただし、使用されるリソース(スレッドやデータベース接続など)は多くなります。厳密なリソース要件は、非同期リクエスト・メッセージの保存に使用される永続ストアのタイプによって異なります。

この値の設定の詳細は、「カスタムのリクエスト・キューおよびレスポンス・キューの作成」を参照してください。

16

@CallbackManagementPolicy注釈

oracle.webservices.annotations.async.CallbackManagementPolicy注釈は、管理ポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。デフォルトではいずれの管理ポリシーもアタッチされません。

例:

@CallbackManagementPolicy("oracle/log_policy")

次の表に、oracle.webservices.annotations.async.CallbackManagementPolicy注釈に渡すことができる属性を定義します。

表A-4 oracle.webservices.annotations.async.CallbackManagementPolicy注釈の属性

属性

説明

デフォルト

value

管理ポリシーのURI。

""

enabled

指定したセキュリティ・ポリシーがコールバック・クライアントに対して有効かどうかを指定するフラグ。

true

sendAutoResponse

非同期操作の完了時にレスポンスが自動的に送信されるかどうかを指定するフラグ。場合によっては、レスポンスの自動送信を無効にして、アプリケーションが待機状態のときに手動でアクセスしてください。

true

@CallbackMethod注釈

oracle.webservices.annotations.async.CallbackMethod注釈を使用すると、コールバックportType内の対応する操作のWSDLエンティティの名前をカスタマイズし、メソッドが同期か非同期かを設定できます。この注釈は、javax.jws.WebMethod注釈と似ています。

例:

@CallbackMethod(exclude=true)

次の表に、oracle.webservices.annotations.async.CallbackMethod注釈に渡すことができる属性を定義します。

表A-5 oracle.webservices.annotations.async.CallbackMethod注釈の属性

属性

説明

デフォルト

name

コールバックportType内の注釈付きメソッドに対応するコールバック・メソッドの名前。この注釈は、POJO実装クラスからコールバック・インタフェースを生成する際に使用されるのみで、実行時には無視されます。

"onResult" + <注釈付きメソッドの名前>

operationName

コールバックportType内のこのメソッドのwsdl:operationの名前。

"onResult" + <注釈付きメソッドの名前>

action

コールバックportType内のこのメソッドのアクションの名前。SOAPバインディングでは、この値によってSOAPアクションの値が決まります。

操作の名前。

serviceRefName

レスポンス・メッセージの送信に使用されるサービス参照用の名前。

この値は、デプロイされたアーカイブに対して一意である必要があります。次のものを定義するために使用されます。

- 標準デプロイメント・ディスクリプタ内の<service-ref>要素の下にある<service-ref-name>および<display-name>要素。

- 独占デプロイメント・ディスクリプタ内の<service-ref-mapping>要素の中にある名前属性

<注釈付きクラスの名前> + "ResponseWebService.SERVICE_REF_NAME_SUFFIX"

exclude

メソッドが非同期かどうかを指定するフラグ。この値をtrueに設定すると、メソッドが同期であることを指定します。この場合、他の属性設定はすべて無視されます。

false

@CallbackMtomPolicy注釈

oracle.webservices.annotations.async.CallbackMtomPolicy注釈は、MTOMポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。デフォルトではいずれのMTOMポリシーもアタッチされません。

例:

@CallbackMtomPolicy("oracle/wsmtom_policy")

次の表に、oracle.webservices.annotations.async.CallbackMtomPolicy注釈に渡すことができる属性を定義します。

表A-6 oracle.webservices.annotations.async.CallbackMtomPolicy注釈の属性

属性

説明

デフォルト

value

MTOMポリシーのURI。

""

enabled

指定したセキュリティ・ポリシーがコールバック・クライアントに対して有効かどうかを指定するフラグ。

true

@CallbackProperties注釈

oracle.webservices.annotations.async.CallbackProperties注釈を使用すると、コールバック・サービスをコールするときにメッセージ・コンテキスト内で必須となる一連のプロパティを指定できます。

例:

@CallbackProperties(
{
@Property(
key = SecurityConstants.ClientConstants.WSS_CSF_KEY,
value = "basic.credentials")
}
)

次の表に、oracle.webservices.annotations.async.CallbackProperties注釈に渡すことができる属性を定義します。

表A-7 oracle.webservices.annotations.async.CallbackProperties注釈の属性

属性

説明

デフォルト

value

oracle.webservices.annotations.Propertyタイプ値の配列。各プロパティは、キーと値の組合せを指定します。

""

@CallbackSecurityPolicy注釈

oracle.webservices.annotations.async.CallbackSecurityPolicy注釈は、1つ以上のセキュリティ・ポリシーを、コールバック・サービスに接続される非同期Webサービスのコールバック・クライアントにアタッチします。デフォルトではいずれのセキュリティ・ポリシーもアタッチされません。

例:

@CallbackSecurityPolicy("oracle/wss10_saml_token_with_message_protection_client_policy")

次の表に、oracle.webservices.annotations.async.CallbackSecurityPolicy注釈に渡すことができる属性を定義します。

表A-8 oracle.webservices.annotations.async.CallbackSecurityPolicy注釈の属性

属性

説明

デフォルト

value

クライアント側セキュリティ・ポリシーのURLを指定する文字列タイプの値の配列。

""

enabled

指定したセキュリティ・ポリシーがコールバック・クライアントに対して有効かどうかを指定するフラグ。

true

@PortableWebService注釈

oracle.webservices.annotations.PortableWebService注釈は、JWSファイルがOracle Infrastructure Webサービスを実装することをクラス・レベルで指定します。

例:

@PortableWebService
@AsyncWebService
public class HelloService {
public String hello(String name) {
return "Hi " + name;
}
}

次の表に、oracle.webservices.annotations.PortableWebService注釈に渡される属性を定義します。

表A-9 oracle.webservices.annotations.PortableWebServiceAnnotationの属性

属性

説明

デフォルト

endpointInterface

サービスの抽象Webサービス・コントラクトを定義しているサービス・エンドポイント・インタフェースの名前。

この注釈を使用すると、インタフェース・コントラクトを実装から分離できます。この注釈が存在する場合、サービス・エンドポイント・インタフェースを使用して抽象WSDLコントラクト(portTypeおよびbinding)が決定されます。サービス・エンドポイント・インタフェースには、JavaからWSDLへのマッピングをカスタマイズするためにJSR-181注釈を含めることができます。

サービス実装はサービス・エンドポイント・インタフェースを実装できますが、これは必須ではありません。

この属性が指定されていない場合、Webサービス・コントラクトはサービス実装で定義されている注釈から生成されます。サービス・エンドポイント・インタフェースがターゲット環境で必要な場合は、実装定義の名前を使用して実装定義のパッケージ内に生成されます。

注意: エンドポイント・インタフェースに注釈を付ける場合、この属性は無効です。

""

name

Webサービスの名前。この名前は、WSDL 1.1にマップされるときにwsdl:portTypeに対して使用されます。

""

portName

Webサービスのポート名。この名前は、WSDL 1.1にマップされるときにwsdl:portに対して使用されます。

注意: エンドポイント・インタフェースに注釈を付ける場合、この属性は無効です。

""

serviceName

Webサービスのサービス名。この名前は、WSDL 1.1にマップされるときにwsdl:serviceに対して使用されます。

注意: エンドポイント・インタフェースに注釈を付ける場合、この属性は無効です。

""

targetNamespace

ターゲット・ネームスペース。

サービス・エンドポイント・インタフェースに注釈を付ける際に、wsdl:portTypeおよび関連付けられたすべての要素に対して使用されるターゲット・ネームスペース。

(endpointInterface属性を介して)サービス・エンドポイント・インタフェースを参照していないサービス実装に注釈を付ける際は、wsdl:portType、wsdl:serviceおよび関連付けられたXML要素に対してターゲット・ネームスペースが使用されます。

(endpointInterface属性を介して)サービス・エンドポイント・インタフェースを参照しているサービス実装に注釈を付ける際は、wsdl:portType、wsdl:serviceおよび関連付けられたXML要素に対してターゲット・ネームスペースが使用されます。

""

wsdlLocation

Webサービスを記述する事前定義済WSLDの場所。値は、既存のWSDLファイルを参照する相対URLまたは絶対URLです。

この属性は、サービス実装が事前定義済WSDLコントラクトを実装していることを示します。サービス実装とWSDLで定義されているportTypeおよびbindingとが矛盾している場合、エラー・メッセージが戻されます。

1つのWSDLファイルに複数のportTypeおよびbindingが含まれる場合もあります。サービス実装の注釈によって、Webサービスに対応する特定のportTypeおよびbindingが決まります。

""

@PortableWebServiceProvider注釈

oralce.webservices.annotations.PortableWebServiceProvider注釈は、JavaクラスをOracle Infrastructure Webサービス・プロバイダを実装するものとして指定します。

例:

@PortableWebServiceProvider
@AsyncWebService
public class HelloService {
public String hello(String name) {
return "Hi " + name;
}
}

次の表に、oracle.webservices.annotations.PortableWebServiceProvider注釈に渡される属性を定義します。

表A-10 oracle.webservices.annotations.PortableWebServiceProvider注釈の属性

属性

説明

デフォルト

portName

Webサービス・ポートの名前。

""

serviceName

Webサービスの名前。

""

targetNamespace

ターゲット・ネームスペース。

""

wsdlLocation

Webサービスを記述する事前定義済WSLDの場所。値は、既存のWSDLファイルを参照する相対URLまたは絶対URLです。

この属性は、サービス実装が事前定義済WSDLコントラクトを実装していることを示します。サービス実装とWSDLで定義されているportTypeおよびbindingとが矛盾している場合、エラー・メッセージが戻されます。

1つのWSDLファイルに複数のportTypeおよびbindingが含まれる場合もあります。サービス実装の注釈によって、Webサービスに対応する特定のportTypeおよびbindingが決まります。

""

@Property注釈

oracle.webservices.annotations.Property注釈を使用すると、コールバック・サービスをコールするときにメッセージ・コンテキスト内で必須となる単一のプロパティを指定できます。

例:

@Property(
key = SecurityConstants.ClientConstants.WSS_CSF_KEY,
value = "basic.credentials")

次の表に、oracle.webservices.annotations.CallbackProperty注釈に渡すことができる属性を定義します。

表A-11 oracle.webservices.annotations.async.CallbackProperty注釈の属性

属性

説明

デフォルト

key

メッセージ・コンテキスト・プロパティの名前を指定する文字列タイプの値。

""

value

メッセージ・コンテキスト・プロパティの値を指定する文字列タイプの値。

""

@ResponseWebService注釈

oracle.webservices.annotations.async.ResponseWebService注釈を使用すると、レスポンスWebサービス・ポート情報をカスタマイズできます。

次の表に、oracle.webservices.annotations.async.ResponseWebService注釈に渡される属性を定義します。

表A-12 oracle.webservices.annotations.async.ResponseWebService注釈の属性

属性

説明

デフォルト

name

レスポンスportTypeの名前。

WSDL 1.1にマップされるときにwsdl:portTypeの名前として使用されます。

<注釈付きクラスの名前> + "Response"

targetNamespace

wsdl:portType、wsdl:serviceおよび関連付けられたすべての要素に対して使用されるターゲット・ネームスペース。

非同期Webサービスのターゲット・ネームスペースと同じです。

partnerLinkRole

WSDLのパートナ・リンク要素内で使用されるコールバックportTypeのロール名。

なし

serviceRefName

レスポンス・メッセージの送信に使用されるサービス参照用のサービス参照名。

この値は、デプロイされたアーカイブに対して一意である必要があります。次のものを定義するために使用されます。

- 標準デプロイメント・ディスクリプタ内の<service-ref>要素の下にある<service-ref-name>および<display-name>要素。

- 独占デプロイメント・ディスクリプタ内の<service-ref-mapping>要素の中にある名前属性

<注釈付きクラスの名前> + "ResponseWebService.SERVICE_REF_NAME_SUFFIX"

serviceName

このリリースでは使用されません。

なし

portName

このリリースでは使用されません。

なし

@Retry注釈

oracle.webservices.annotations.async.Retry注釈は、この非同期メソッドを多重呼出し不変とするのか、システム障害などによって実行が異常終了した場合には再試行可能とするかどうかを指定します。この注釈はクラスまたはメソッドのレベルで適用可能ですが、メソッドレベルの設定により、クラスレベルの設定はオーバーライドされます。

デフォルトでは、すべての非同期メソッドは多重呼出し不変で、これは非同期メソッドを2回以上コールしても副次的な影響がないことを意味します。非同期メソッドが多重呼出し不変でない場合は、明示的にこの注釈のenable属性にfalseを設定する必要があります。

次の表に、oracle.webservices.annotations.Retry注釈に渡される属性を定義します。

表A-13 oracle.webservices.annotations.Retry注釈の属性

属性

説明

デフォルト

enable

そのメソッドが多重不変呼出しであり、実行が異常終了した場合には安全に再試行ができるかどうかを指定するフラグ。

true

supportsGlobalTransaction

そのメソッドがグローバル・トランザクションに参加できるかどうかを指定するフラグ。

このフィールドは、グローバル・トランザクション動作を指定する注釈(javax.ejb.TransactionAttribute注釈やWS-AT注釈など)が他に存在しない場合のみ使用されます。たとえば、トランザクションのタイプがRequired、Mandatory、およびSupportsに設定されている場合、このメソッドはグローバル・トランザクションに参加するとみなされます。

注意: グローバル・トランザクション固有の注釈のみならずこのフィールドが指定されている場合には、値が一致している必要があります。

そのメソッドがグローバル・トランザクションに参加できる場合には、supportsGlobalTransaction属性をtrueに設定します。この場合、システムは多重呼び出し不変ではない動作を最も信頼できる方法で実現できます。メソッドの実行とレスポンスの投稿は、単一グローバル・トランザクション内で達成されます。処理手順のいずれかが異常終了という結果になると、そのトランザクションはロール・バックされて、メソッドは新しいトランザクションで再び実行されます。このシナリオでは、メソッドは、完了したトランザクションの一部として1回のみ実行され、その実行結果はレスポンス・キューに1回のみ投稿されることが保証されます。

メソッドがグローバル・トランザクションに参加できない場合には、supportsGlobalTransactionをfalseに設定します。システムでは、多重呼び出し不変ではないメソッドがせいぜい1回実行されることが保証されます。次のいずれかが発生した場合、フォルト・レスポンス・メッセージがコールバック・サービスに返されます。

- 異常終了したせいで、非同期メソッドの実行が完了しない場合。

- メソッドは完全に実行されたがレスポンスがキューに投稿されてしまう前に異常終了が発生した場合。

false

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。