ヘッダーをスキップ
Oracle Fusion Middleware Oracle Application Development Framework Fusion開発者ガイド
11gリリース1 (11.1.1.7.0)
B52028-05
  目次へ移動
目次

前
 
次
 

13 WebサービスのFusion Webアプリケーションへの統合

この章では、Fusion Webアプリケーション内でサード・パーティのWebサービスをコールし、すべての共通リモート・サービス・データ・アクセス・タスクについてサービス・プロキシおよびサービス・データ・オブジェクト(SDO)でプログラム的に直接作業する方法について説明します。またユーザー・インタフェースでWebサービスを処理する場合の、サードパーティWebサービス用のADFデータ・コントロール作成方法も説明します。

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

13.1 Fusion WebアプリケーションのWebサービスの概要

企業はWebサービスを使用して、元のアプリケーションのプラットフォームや言語に関係なくビジネス機能を公開できます。これは、ビジネス機能を、他のアプリケーションでも認識され、使用可能な標準XMLコンストラクトで構成されるメッセージに抽象化して公開するからです。

Webサービスは統合と再利用が簡単なモジュール化ビジネス・サービスで、SOA内のコンポーネントとして理想的です。JDeveloperでは、トップダウンWebサービス(WSDLから作成されるサービス)、ボトムアップWebサービス(データベースのJavaクラスやPL/SQLストアド・プロシージャなどの基礎となる実装から作成されるサービス)、およびアプリケーション・モジュールをサービスとして公開するなどの既存の機能から作成されるサービスを作成できます。

WebサービスはWebアプリケーションで使用できますが、その一般的な理由は次のとおりです。

13.2 アプリケーション・モジュールからのWebサービスのコール

サービス指向アーキテクチャでは、アプリケーション・モジュールに基づいていないWebサービスから提供される機能をOracle ADFアプリケーション・モジュールで利用する必要がある場合もあります。Webサービスは、任意のプログラミング言語で実装し、ネットワーク上の任意のサーバーに配置できます。各Webサービスでは、言語に依存しない標準的なXMLフォーマットで記述することにより、一連の該当するメソッドをそのAPI内で指定します。このXMLドキュメント(構文は、Web Services Description Language (WSDL)に準拠)を使用すると、Webサービスのメソッドの名前に加えて、それらのメソッドが予期するパラメータや実際の戻り値のデータ型も、JDeveloperで理解できます。


注意:

アプリケーション・モジュールはWebサービスとして公開し、デプロイ済のFusion Webアプリケーション間で使用することもできます。外部サービスを使用したADFビジネス・コンポーネントの再利用の詳細は、第11章「サービス対応のアプリケーション・モジュールの統合」を参照してください。


JDeveloperに組み込まれているWebサービス・ウィザードを使用すると、そのようなタスクを簡単に実行できます。該当するウィザードを使用してWebサービス・プロキシ・クラスを作成し、ローカルなJavaオブジェクトに追加するメソッド・コールを使用してサービスをコールします。

13.2.1 外部サービスのプログラム的なコール方法

アプリケーション・モジュールからWebサービスをコールするには、起動するサービスのWebサービス・プロキシ・クラスを作成します。Webサービス・プロキシとは、該当するアプリケーション内のWebサービスを表す、生成されたJavaクラスのことです。該当するWebサービスのサービスURLをカプセル化し、サービスをコールをするための低レベルの詳細情報を処理します。

Webサービスを使用するには、該当するWSDLドキュメントを特定するURLを知る必要があります。たとえば、WSDLドキュメントは、電子メールの添付ファイルとして受信し、ローカルのハード・ドライブに保存した場合、URLは次のようになります。

file:///D:/temp/SomeService.wsdl

また、URLは、次のようなHTTPベースのURLの場合もあります。

http://someserver.somecompany.com/SomeService/SomeService.wsdl

一部のWebサービスの場合、そのWSDLドキュメントは、サービスURLを変更する特殊なパラメータを使用して利用可能になります。たとえば、http://someserver.somecompany.com/SomeServiceのHTTPアドレスでリクエストを受信することが期待されているWebサービスの場合は、同一のURLの末尾に次のような追加のパラメータを付けて、対応するWSDLドキュメントを公開することもあります。

http://someserver.somecompany.com/SomeService?WSDL

標準が確立されていないため、WSDLドキュメントに対する正確なURLを知っておくのみで十分です。URL情報があれば、該当するサービスをコールするためのWebサービス・プロキシ・クラスを作成できます。

ADFビジネス・コンポーネント・サービスには次の形式のサービスへのURLがあります。

  • 統合されたWebLogic Server上でのURLの形式はhttp://host:port/EJB-context-root/@WebService-name?WSDLで、たとえば、次のようになります。

    http://localhost:8888/EJB-StoreFrontService/StoreFrontService?WSDL
    
  • Oracle WebLogic Server。URLの形式はhttp://host:port/context-root/@WebService-name?WSDLで、たとえば、次のようになります。

    http://localhost:8888/StoreFrontService/StoreFrontService?WSDL
    

Webサービス・プロキシ・クラスは、WebサービスのパブリックAPIに対応する一連のJavaメソッドを表します。Webサービス・プロキシ・クラスを使用すると、Webサービス内の任意のメソッドを、他の任意のローカルなJavaクラスのメソッドの場合と同じ方法でコールすることができます。

プロキシ・クラスを使用してアプリケーション・モジュールからWebサービスをコールするには、次の作業を実行します。

  1. WebサービスのWebサービス・プロキシ・クラスを作成します。コールするWebサービス用のWebサービス・プロキシ・クラスを作成するには、Webサービス・プロキシ作成ウィザードを使用します。

  2. プロキシ・クラスにメソッドを実装し、目的のWebサービスにアクセスします。

  3. 該当するWebサービス・プロキシ・クラスのインスタンスをアプリケーション・モジュール内で作成し、Webサービス・プロキシ・オブジェクト上でメソッドを1つ以上起動します。

13.2.1.1 サービスにプログラム的にアクセスするためのWebサービス・プロキシ・クラスの作成

コールするWebサービス用のWebサービス・プロキシ・クラスを作成するには、Webサービス・プロキシ作成ウィザードを使用します。

サービスにプログラム的にアクセスするためにWebサービス・プロキシ・クラスを作成するには:

  1. アプリケーション・ナビゲータで、Webサービス・プロキシを作成するプロジェクトを右クリックし、「新規」をクリックします。

  2. 「新規ギャラリ」で、「ビジネス層」を展開し、「Webサービス」を選択します。次に「Webサービス・プロキシ」を選択し、「OK」をクリックします。

  3. ウィザードの「Webサービス記述を選択」ページで、生成されたWebサービス・プロキシ・クラスのJavaパッケージ名を入力または選択します。

  4. アプリケーションでコールするサービスのWSDLのURLを入力し、このフィールドから次に進みます。

    「次へ」ボタンが有効になっていない場合は、「指定不可の理由」ボタンをクリックすると、WSDLドキュメントの読込みを試行した際にJDeveloperが検出した問題がわかります。URLを検証した後、必要に応じて問題を解決し、この手順を繰り返します。

  5. ウィザードの「次へ」が有効になっている場合は、WSDLドキュメントをJDeveloperが認識し、検証済です。「次へ」をクリックし、続行します。

  6. ウィザードの以降のページに進み、Webサービス・プロキシの詳細を指定します。ウィザードの各ページの詳細は、[F1]を押すか、「ヘルプ」をクリックしてください。

  7. 「終了」をクリックします。

13.2.1.2 サービスを起動するためのWebサービス・プロキシ・テンプレートのコール

Webサービス・プロキシを作成したら、目的のWebサービスにアクセスするためにプロキシ・クラスにメソッドを実装する必要があります。

サービスを起動するためにWebサービス・プロキシ・テンプレートをコールするには:

  1. ソース・エディタでport_nameClient.javaという名前のプロキシ・クライアント・クラスを開き、メイン・メソッド内にある// Add your own code to call the desired methodsというコメントを検索します。

  2. 適切なコードを追加してWebサービスを起動します。

  3. JDeveloperにより生成されたクライアント・モジュール・クラスの完全セットをデプロイし、このクラスをアプリケーションで参照します。

13.2.1.3 アプリケーション・モジュールでプロキシ・クラスを使用したWebサービス・メソッドのコール

Webサービス・プロキシ・クラスが生成されると、アプリケーション・モジュールのカスタム・メソッド内で使用できます(例13-1を参照)。該当メソッドによりWebサービス・プロキシ・クラスのインスタンスが作成され、その結果についてWebサービス・プロキシ・クラスからWebサービス・メソッドがコールされます。

例13-1 Webサービス・メソッドをコールするWebサービス・プロキシ・クラス

// In YourModuleImpl.java
public void performSomeApplicationTask(String symbol) throws Exception {
  // application-specific code here
   :
  // Create an instance of the web service proxy class 
  StockQuoteServiceSoapHttpPortClient svc =
            new StockQuoteServiceSoapHttpPortClient();
  // Call a method on the web service proxy class and get the result
  QuoteInfo quote = svc.quoteForSymbol(symbol);
  float currentPrice = quote.getPrice();
  // more application-specific code here
}

13.2.2 新しいWebサービス接続の作成方法

Webサービス・プロキシの開発後、プロキシの接続を追加で作成し、テストやデプロイメントで使用できます。たとえば、テスト用にユーザー名とパスワードを含む接続を作成できます。

接続情報はアプリケーション内の他の接続と一緒にconnections.xmlファイルに保存されます。エンドポイントURLの抽象化によって、Enterprise Managerを使用したデプロイ後に、クライアント・コードを変更せずに接続を編集することもできます。

Webサービス接続の作成方法:

  1. アプリケーション・ナビゲータで、Webサービス・プロキシを右クリックし、「ADF Webサービス接続を作成しています」を選択します。

    「新規ADF Webサービス接続」ダイアログに、選択したプロキシに関連付けられた接続のデフォルト設定が表示されます。

  2. 必要に応じて接続情報を変更し、「OK」をクリックします。


警告:

既存の接続と同じ名前で新しいWebサービス接続を作成すると、既存の接続が新しい情報によって上書きされます。


新しいWebサービス接続の作成後、この接続を使用するようにクライアントを変更できます。例13-2に示すようなコードを使用して、クライアントから接続にアクセスできます。

例13-2 クライアントからWebサービス接続へのアクセス

Context ctx = ADFContext.getCurrent().getConnectionsContext();
WebServiceConnection wsc = (WebServiceConnection) ctx.lookup("MyAppModuleService");
MyAppModuleService proxy = wsc.getJaxWSPort(MyAppModuleService.class);

lookup()メソッドに渡す引数は、Webサービス接続に渡した名前です。この例ではMyAppModuleServiceです。

13.2.3 Webサービス・プロキシの作成時の処理

JDeveloperは、WSDLドキュメント内で検出されたWebサービス・ポートの名前を反映した名前を使用して、ユーザーが指定したパッケージ内でWebサービス・プロキシ・クラスを生成します。Webサービス・ポート名は、人間が判読できるStockQuoteServiceのような適切な名前の場合もあれば、StockQuoteServiceSoapHttpPortのようなわかりにくい名前の場合もあります。このポート名は、ユーザーが使用中のWebサービスを公開した開発者によって決定されます。たとえば、サービスのポート名がStockQuoteServiceSoapHttpPortであると仮定すると、JDeveloperはStockQuoteServiceSoapHttpPortClientという名前のWebプロキシ・クラスを生成します。

Webサービス・プロキシは、アプリケーション・ナビゲータ内で、WebServiceNameProxyという単一の論理ノードとして表示されます。たとえば、WebサービスStockQuoteServiceのノードは、ナビゲータ内でStockQuoteServiceProxyという名前で表示されます。JDeveloperでは、プロキシ・クラスの生成処理の一部として、サーバーの起動に使用するメインのWebサービス・プロキシ・クラスのみでなく、多数の補助クラスとインタフェースも生成されます。アプリケーション・ナビゲータのWebServiceNameProxyノードの下でこれらのファイルを参照できます。生成されたファイルは、Webサービスを起動するための低レベルの実装の一部で使用されます。

生成された補助クラスのうち、参照する必要のあるものは、構造化されたWebサービス・パラメータまたは戻り型を保持するように作成されるクラスのみです。たとえば、WebサービスStockQuoteServicequoteForSymbol()メソッドが、Stringパラメータを1つ受け取り、株の時価を表す浮動小数点値を1つ返すものとします。Webサービスの設計者がシンプルな浮動小数点数を1つ返すように選択すると、Webサービス・プロキシ・クラスは次のような対応するメソッドを持つことになります。

public float quoteForSymbol(String symbol)

また、Webサービスの設計者が結果として複数の情報を返す方が便利であると考える場合は、サービスのWSDLファイルには、包含される複数の要素を記述する名前付き構造の定義が1つ含まれることになります。たとえば、シンボル名と時価が結果としてサービスから返されるとします。これら2つのデータ要素を含めるために、WSDLファイルでは、文字列型のsymbolという名前の要素と浮動小数点型のpriceという名前の要素を持つQuoteInfoという名前の構造を1つ定義する場合もあります。このような状況でJDeveloperがWebサービス・プロキシ・クラスを生成する場合、Javaメソッド・シグネチャは次のようになります。

public QuoteInfo quoteForSymbol(String symbol)

戻り型QuoteInfoでは、Webサービス・プロキシ実装を構成する補助クラスの1つを参照します。それは、WSDLドキュメントの中で定義されている構造の名前と型がプロパティに反映されているシンプルなBeanです。同様に、Webサービスが受け取るパラメータ値が構造または構造の配列である場合は、それに対応する生成されたBeanを使用して、それらの構造をJavaコード内で操作する必要があります。

13.2.4 実行時に行われる処理: Webサービス・プロキシ・クラスを使用してWebサービスをコールした場合

アプリケーション・モジュールからWebサービスを起動する場合、Webサービス・プロキシ・クラスは、「SOAP」で説明したXMLベースのWebサービス・プロトコルを使用する際の低レベルの詳細処理を実行します。具体的には、次の処理を実行します。

  • メソッドの起動を表すXMLドキュメントを作成

  • メソッド引数をXMLにパッケージング

  • HTTP POSTリクエストを使用してXMLドキュメントをサービスURLに送信

  • Webサービスから受信したXMLエンコード・レスポンスのパッケージングを解除

起動対象のメソッドが戻り値を持つ場合は、アプリケーション・モジュール・コード内で操作できるように、適切な型のオブジェクトとして受信します。

13.2.5 Webサービス・プロキシについて

アプリケーション内でWebサービス・プロキシを実装している場合、「try-catch」ブロックを使用してWebサービス例外を処理するか、Webサービス・プロキシ・クラスでアプリケーション・モジュールを起動します。以降の項で、この機能や、Webサービス・プロキシに関するその他の機能の詳細を説明します。

13.2.5.1 try/catchブロックによるWebサービス例外の処理

生成されたWebサービス・プロキシ・クラスを使用すると、リモートWebサービスの起動は、ローカルJavaクラス内のメソッドをコールするのと同じように簡単になります。その場合に注意が必要な唯一の違いは、HTTPリクエストに関与する問題が存在する場合にWebサービス・メソッドのコールが失敗する可能性がある点です。Webサービス・プロキシに対して実行するメソッド・コールでは、適切なtry...catchブロックを使用してコールをラップすることにより、リクエストの失敗に備える必要があります。例13-3では、Webサービス例外を検出することにより、前述(13.2.1.3項「アプリケーション・モジュールでプロキシ・クラスを使用したWebサービス・メソッドのコール」)の簡単な例を改善しています。この場合は該当するエラーをJboExceptionとして再スローしているだけですが、アプリケーションではさらに適切なエラー処理を実装することもできます。

例13-3 try-catchブロックを使用したWebサービス・メソッド・コールのラップ

// In YourModuleImpl.java
public void performSomeApplicationTask(String symbol) {
  // application-specific code here
  // :
  QuoteInfo quote = null;
  try {
    // Create an instance of the web service proxy class 
    StockQuoteServiceSoapHttpPortClient svc =
               new StockQuoteServiceSoapHttpPortClient();
    // Call a method on the web service proxy class and get the result
    quote = svc.quoteForSymbol(symbol);
  }
  catch (Exception ex) {
    throw new JboException(ex);
  }
  float currentPrice = quote.getPrice();
  // more application-specific code here
}

13.2.5.2 アプリケーションモジュールとWebサービスでのトランザクションの分離

参照情報にアクセスするために使用するWebサービスもあります。また、データを変更するためにコールするサービスもあります。このデータ変更は、社内の自分のチームまたは別のチームのメンバーによってサービスが記述された場合、自社のデータベースに存在する可能性があります。Webサービスが自社のファイアウォールの外部にある場合は、変更対象のデータベースは、当然、別の会社によって管理されます。

いずれの場合でも、起動するWebサービスによって実行されるデータ変更は、アプリケーション・モジュールの現在の作業ユニットとは無関係な独自のトランザクションによって実行されるということを理解しておくことが重要です。たとえば、データを変更するWebサービスを起動した後、rollback()をコールしてアプリケーション・モジュールの現在の作業ユニット内で保留中の変更を取り消しても、該当するプロセス内でコールしたWebサービスによって実行される変更に影響はありません。対応するWebサービス・メソッドを起動して、補正用の変更を実行し、アプリケーション・モジュールのトランザクションのロールバックを無効にする必要がある場合があります。

13.2.5.3 ブラウザ・プロキシ情報の設定

コール対象のWebサービスが自社ファイアウォールの外部にある場合は、HTTPプロキシ・サーバーを使用できるような適切な構成にJavaシステム・プロパティが設定されていることを確認する必要があります。確認する必要のあるJavaシステム・プロパティは、次のとおりです。

  • http.proxyHost - プロキシ・サーバーの名前を設定します。

  • http.proxyPort - プロキシ・サーバーのHTTPポート番号(80の場合が多い)を設定します。

  • http.nonProxyHosts - プロキシ・サーバーを使用しないサーバーを縦線で区切ってリストで指定します(オプション。例 - localhost|127.0.0.1|*.yourcompany.com)。

JDeveloperでは、「設定」ダイアログの「Webブラウザとプロキシ」ページでHTTPプロキシ・サーバーを構成できます。アプリケーションを実行する際、JDeveloperの-Dコマンドライン・オプションを使用すると、このダイアログで指定した設定値に基づき、前述の3つのシステム・プロパティを設定できます。

13.2.5.4 Webサービス・プロキシ・クラスを使用したアプリケーション・モジュールの起動

Webサービス・プロキシ・クラスを使用してOracle ADFサービスベースのアプリケーション・モジュールを起動すると、コール側コンポーネントとコールしているサービスがコロケートしている場合にコールを最適化できなくなります。別な方法として、第11章「サービス対応のアプリケーション・モジュールの統合」で説明しているサービス・インタフェースによる方法を使用することもできます。

13.3 Webサービス・データ・コントロールの作成

Oracle ADFを使用して開発されたアプリケーションでWebサービスを使用する場合、外部Webサービスのデータ・コントロールを作成するのが最も一般的な方法です。これは、アプリケーションとともに開発するには時間がかかる機能を、Webサービスとして即座に提供でき、異なるアーキテクチャで動作するアプリケーションにアクセスできるからです。

また、Oracle ADFで作成されたコンポーネントを再利用して、他のアプリケーションからアクセス可能なWebサービスとして提供することもできます。

13.3.1 Webサービス・データ・コントロールの作成方法

JDeveloperでは、サービスにWSDLのみを使用して既存のWebサービスのデータ・コントロールを作成できます。ローカル・ファイル・システムまたはUDDIレジストリでWSDLを検索するか、WSDL URLを直接入力します。


注意:

ファイアウォールで保護されている環境で、ファイアウォール外にあるWebサービスを使用する場合は、JDeveloperで「Webブラウザとプロキシ」の設定を構成する必要があります。詳細は、13.2.5.3項「ブラウザ・プロキシ情報の設定」を参照してください。


Webサービス・データ・コントロールの作成方法:

  1. アプリケーション・ナビゲータで、アプリケーションを右クリックして「新規」を選択します。

  2. 「新規ギャラリ」で、「ビジネス層」を展開し、「Webサービス」を選択します。次に「Webサービス・データ・コントロール」を選択し、「OK」をクリックします。

  3. ウィザードの指示に従って、データ・コントロールの作成を完了します。

  4. Webサービス・データ・コントロールの作成ウィザードで、データ・コントロール名であるWSDL URLと、データ・コントロールによってアクセスする特定のWebサービスを指定します。

  5. 「データ・コントロール操作」ページで、データ・コントロールでサポートする操作を選択します。

    SOAPリクエストの起動時にヘッダー・パラメータも含みたい場合は、「HTTPヘッダー・パラメータを含める」を選択します。詳細は、13.3.2項「Webサービス・データ・コントロール用のヘッダー・パラメータの含み方」

  6. 「レスポンス・フォーマット」ページで、SOAPレスポンスのフォーマットを指定します。

  7. 「エンドポイント認証」ページで、エンドポイントURLの認証詳細を指定し、「終了」をクリックします。

13.3.2 Webサービス・データ・コントロール用のヘッダー・パラメータの含み方

Webサービス・データ・コントロールを使用する際に、SOAPリクエストの起動時にHTTPヘッダーにエンタープライズIDを追加したい場合があります。リクエスト内のエンタープライズIDによって、Webサービス・データ・コントロールは、リクエストの転送先クラウド・サービスを指定できます。

Webサービス・データ・コントロールでヘッダー・パラメータを使用するように設定するには、Webサービス・データ・コントロールの作成ウィザードの「データ・コントロール操作」ページで、「HTTPヘッダー・パラメータを含める」を選択します。データ・コントロールの作成後、「データ・コントロール」パネル内のWebサービス・データ・コントロールのメソッドの「パラメータ」ノードの下に、HttpHeaderが表示されます。Webサービス・データ・コントロールのAdapterDataControl要素(.dcxファイル内)に、<httpHeaders paramName="HttpHeader"/>要素が含まれていることがわかります。

HttpHeaderパラメータを使用するには、Webサービス・データ・コントロール用のビュー・コントローラ・プロジェクトでバッキングBeanを作成する必要があります。HttpHeaderパラメータの値はバッキングBean経由で提供されます。バッキングBeanはMapの型のプロパティを持ち、httpヘッダーの名前/値のペアをそのプロパティに追加する必要があります。さらに、Mapの型は<String, List<String>>または<String,String>でなければならず、例13-4のように、getterおよびsetterメソッドを使用してプロパティを公開する必要があります。

例13-4 バッキングBeanによるWebサービス・データ・コントロールでのHttpヘッダー・パラメータのサポート

public class BackingBean {
  private Map<String,Object> httpHeadersMap = new HashMap<String,Object>();
  public BackingBean() {
    List<String> headersList = new ArrayList<String>();
    headersList.add("Oracle");
    httpHeadersMap.put("enterpriseID",headersList);
  }
  public void setHttpHeadersMap(Map<String,Object> httpHeadersMap) {
    this.httpHeadersMap = httpHeadersMap;
  }
  public Map<String,Object> getHttpHeadersMap() {
    return httpHeadersMap;
  }
}

「データ・コントロール」パネルからページに操作を「ADFパラメータ・フォーム」としてドラッグ・アンド・ドロップする際、フィールド・リストからHttpHeaderを削除します。次に、「アクション・バインディングの編集」ダイアログの「パラメータ」セクションで、バッキングBeanのMapプロパティを指す式を提供することで、HttpHeaderパラメータの値を指定します。

13.3.3 Webサービス・データ・コントロールのエンドポイントの調整方法

Webサービス・データ・コントロールを開発すると、エンドポイントを変更できます。これは、アプリケーションをテスト環境から本番環境に移行する場合などに便利です。

Webサービス・データ・コントロールのエンドポイントを変更するには:

  1. アプリケーション・ナビゲータで、Webサービス・データ・コントロールの.dcxファイルを選択します。

  2. 構造ウィンドウで、Webサービス・データ・コントロールを右クリックし、ポップアップ・メニューから「Webサービス接続の編集」を選択します。

  3. 「Webサービス接続の編集」ダイアログで、必要に応じてエンドポイントのURLとポート名を変更します。

  4. 「OK」をクリックします。

13.3.4 Webサービス・データ・コントロールのリフレッシュ方法

Webサービス・データ・コントロールの作成後、Webサービス操作がメソッド・シグネチャ、戻り型、または構造の点で変更されています。この場合、作成し直さなくても、データ・コントロールを更新できます。

Webサービス・データ・コントロールの操作をリフレッシュする方法:

  1. アプリケーション・ナビゲータで、Webサービス・データ・コントロールの.dcxファイルを選択します。

  2. 「構造」ウィンドウで、該当するWebサービス操作を右クリックし、コンテキスト・メニューから「更新」を選択します。

JDeveloperはWebサービスを問い合せ、Webサービス・データ・コントロールを更新して、選択した操作の最新の状態を反映します。

13.3.5 Webサービス・データ・コントロールについて

他の種類のデータ・コントロールと同様に、「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。詳細は、12.3.1項「データ・コントロール」パネルの使用方法」を参照してください。

「データ・コントロール」パネルでは、各データ・コントロール・オブジェクトがアイコンで表されます。表13-1は、各アイコンが表すデータ・コントロール・オブジェクト、「データ・コントロール」パネルの階層内で表示される場所、そのアイコンを使用して作成できるコンポーネントを示しています。

表13-1 Webサービスの「データ・コントロール」パネルのアイコンおよびオブジェクト階層

アイコン 名前 説明 作成できるコンポーネント

データ・コントロール・アイコン


データ・コントロール

データ・コントロールを表します。データ・コントロール自体を使用してUIコンポーネントを作成することはできませんが、その下に表示される子オブジェクトは、いずれも使用できます。Webサービスの定義方法によっては、複数のデータ・コントロールが存在することがあります。

通常、各Webサービスに対するデータ・コントロールは1つです。ただし、他のタイプのビジネス・サービス(アプリケーション・モジュールなど)に対して作成された追加のデータ・コントロールがある場合があります。アプリケーション・モジュールのデータ・コントロールの作成の詳細は、第12章「Fusion WebアプリケーションでのADFモデルの使用」を参照してください。

他のオブジェクトのコンテナとして機能し、コンポーネント作成には使用されません。

コレクション・アイコン


コレクション

名前付きデータ・コレクションを表します。データ・コレクションとは、データ・モデル内のデータ・オブジェクト・セット(行セットとも呼ばれる)です。データ・コレクション内の各オブジェクトは、データ・モデル内の特定の構造化データ項目(とも呼ばれる)を表します。このガイド全体を通して、データ・コレクションおよびコレクションという用語は、区別なく使用されます。

データ・コントロールのコレクションを使用したフォーム作成の詳細は、第22章「データバインドされた基本的なページの作成」を参照してください。

コレクションを使用した表作成の詳細は、第23章「ADFによるデータバインドされた表の作成」を参照してください。

UIコンポーネントを作成するためのマスター/ディテール関係の使用の詳細は、第24章「マスター/ディテール・データの表示」を参照してください。

グラフ、チャートおよびその他の視覚的なUIコンポーネントの作成の詳細は、第26章「データバインドされたADFデータ視覚化コンポーネントの作成」を参照してください。

フォーム、表、グラフ、ツリー、レンジ・ナビゲーションの各コンポーネント、およびマスター/ディテール・コンポーネント。

属性アイコン


属性

オブジェクト内の個別のデータ要素(行の属性など)を表します。属性は、自分の属するコレクションまたはメソッド戻りの下に、子として表示されます。

属性を使用したページのフィールド作成の詳細は、22.2項「属性を使用したテキスト・フィールドの作成方法」を参照してください。

リスト作成の詳細は、第25章「データバインドされた選択リストおよびシャトルの作成」を参照してください。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

属性アイコン


構造化された属性

Javaプリミティブ・タイプ(属性として示される)または任意のタイプのコレクションのいずれでもない、戻りオブジェクトを示します。構造化属性の例としてドメインがあります。これはアプリケーションのメンテナンスを簡素化するために開発者によって作成されたデータ型です。

ドメインの詳細は、38.1項「ドメインを使用したカスタム検証済データ型の作成」を参照してください。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント

メソッド・アイコン


メソッド

データ・コントロールの操作またはその公開された構造のいずれかを表し、パラメータの受入れや、ビジネス・ロジックの実行を行ったり、オプションで単一の値、構造、またはそれらのコレクションを戻すことができます。

パラメータを受け入れるメソッドの使用方法の詳細は、28.2.2.2項「メソッドでのパラメータの使用方法」を参照してください。

コマンド・コンポーネント

パラメータを受け入れるメソッドの場合: コマンド・コンポーネントおよびパラメータ付きフォーム

メソッド戻りアイコン


メソッド戻り値

カスタム・メソッドによって戻されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。

カスタム・メソッドから戻されるのは通常、単一のスカラー値です。ただし、一部のカスタム・メソッドではコレクションを戻すことができます。

メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッド戻りの下に子として表示されるオブジェクトは、コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、および親コレクションで実行できる操作などです。

単一値のメソッド戻り値がドロップされると、メソッドはフレームワークにより自動的に起動されなくなります。メソッドを起動するために、実行可能ファイルとして起動アクションも作成するか、対応するメソッドをボタンとしてドロップする必要があります。実行可能ファイルの詳細は、12.6.2.2項「実行可能バインディング・オブジェクト」を参照してください。

コレクションおよび属性と同じコンポーネント。

名前付き基準については、問合せフォームまたはクイック問合せフォーム。詳細は、第27章「ADFでデータバインドされた検索フォームの作成」を参照してください。

データ・コントロール操作アイコン


操作

親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。データ・コントロール操作は、コレクションまたはメソッド戻り値の下の「操作」 ノードと、ルート・データ・コントロール・ノードの下にもあります。特定のコレクションまたはメソッド戻りの子である操作は、それらのオブジェクトにのみ作用し、データ・コントロール・ノードの下の操作は、そのデータ・コントロール内のすべてのオブジェクトに作用します。

1つ以上のパラメータが操作に必要な場合、それらのパラメータは操作の下の「パラメータ」ノードにリストされます。

Webサービス・データ・コントロールでサポートされている標準の操作は、フォーム・ナビゲーションの「先頭へ」、「最後へ」、「次へ」および「前へ」です。Webサービス・データ・コントロールは更新可能なデータ・コントロールではないため、コミット、ロールバック、実行などの組込み操作を使用することはできません。

ボタン、リンクおよびメニューなどのUIコマンド・コンポーネント。

詳細は、22.4項「レンジ・ナビゲーションのフォームへの組入れ」および22.5項「既存レコードを編集するフォームの作成」を参照してください。

パラメータ・アイコン


パラメータ

メソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。パラメータは、メソッドまたは操作の下の「パラメータ」ノード内に表示されます。

配列および構造化パラメータは、データ・コントロールの下の更新可能な構造化属性およびコレクションとして公開され、UI上にADFフォームまたは更新可能な表としてドロップできます。UIを使用して配列または複合オブジェクト(標準のJava型ではない)のパラメータを作成できます。

ラベル、テキストおよび選択リストの各コンポーネント。


13.4 Webサービス・データ・コントロールのセキュリティ保護

Webサービスを使用すると、アプリケーションは定義済アプリケーション・プログラミング・インタフェースからデータと情報を交換できます。SSL (Secure Sockets Layer)は、信頼性の低いネットワークでの安全なデータ転送を提供しますが、SSLは2点間でのみ機能します。データが相手側に到達すると、SSLセキュリティは解除され、データはそのままの形式でアクセスできるようになります。複雑なWebサービス・トランザクションでは、データの複数メッセージが異なるシステムに送信されることがありますが、SSLはエンドツーエンドのセキュリティを提供できないため、データは盗み読みされる危険があります。

Webサービスでは、あらゆる形態のセキュリティで、次の問題に対応する必要があります。

この項では、「クライアント」とは、デプロイされたWebサービスにSOAPメッセージを送信するWebサービス・データ・コントロールを指します。デプロイされたWebサービスは次のいずれかです。

13.4.1 WS-Security仕様

WS-Security仕様は、複数のセキュリティ・テクノロジを統一し、システムおよびプラットフォーム間での安全なWebサービスの相互運用性を実現します。仕様はhttp://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-soap-message-security-1.0.pdfで参照できます。

WS-Securityは、Webサービスのセキュリティ関連の次の問題に対応しています。

  • 認証と認可

    データの送信者のアイデンティティが確認され、セキュリティ・システムによって、送信者がデータ・トランザクションを実行する権限を持っていることが確認されます。

    認証型はプレーン・テキストまたは信頼性の高いX509認証チェーンで送信される、基本的なusername/passwordペアです。SAMLアサーション・トークンを使用して、クライアントがサービスに対する認証を受けたり、フェデレートされたSSO環境に参加できるようにすることもできます。この場合、認証の詳細は、ベンダー固有の方法を使用してドメイン間で共有します。

  • データの真正性、整合性および否認防止

    業界標準メッセージを使用するXMLデジタル署名は、アルゴリズムをダイジェスト化し、SOAPメッセージにデジタル署名します。

  • データのプライバシ

    業界標準の暗号化アルゴリズムを使用するXML暗号化により、メッセージを暗号化します。

  • サービス拒否攻撃

    SOAPメッセージにタイム・スタンプを押すXML構造を定義します。サーバーは、タイム・スタンプを使用して、定義された間隔後SOAPメッセージを無効にします。

13.4.2 キー・ストアの使用

Java Key Store (JKS)またはOracle Walletを使用して、Webサービス・データ・コントロールをメッセージレベル・セキュリティ用に設定できます。Oracle Walletの設定と使用の詳細は、http://www.oracle.com/technetworkのOracle Technology Networkを参照してください。

メッセージ保護用のキー・ストアの作成と使用の詳細は、『Oracle Fusion Middleware管理者ガイド』のキー・ストア、ウォレット、証明書の管理に関する項と、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』のポリシー構成に関する項を参照してください。

13.4.3 Webサービス・データ・コントロールのセキュリティの定義方法

JDeveloperプロジェクトにWebサービス・データ・コントロールを作成したら、「データ・コントロール・ポリシーの編集」ダイアログを使用して、データ・コントロールのセキュリティを定義できます。

Webサービス・データ・コントロールを定義するには:

  1. アプリケーション・ナビゲータでWebサービス・データ・コントロールの.dcxファイルを選択します。

  2. 構造ウィンドウで、Webサービス・データ・コントロールを右クリックして「Webサービス・セキュリティの定義」を選択します。

    JDeveloperは「データ・コントロール・ポリシーの編集」ダイアログに「ポリシー・ストア」の場所を表示します。別なポリシー・ストアを選択するには、「プリファレンス」ダイアログの「WSポリシー・ストア」ページを使用します。

  3. 「ポート」ドロップダウン・リストから、指定したポリシーを適用するポートを選択します。

  4. 「MTOM」ドロップダウン・リストから、使用するMTOM (メッセージ送信最適化メカニズム)ポリシーを選択します。このフィールドを空白のままにすると、MTOMポリシーは使用されません。

  5. 「信頼性」ドロップダウン・リストから、使用する信頼性ポリシーを選択します。このフィールドを空白のままにすると、信頼性ポリシーは使用されません。

  6. 「アドレス指定」ドロップダウン・リストから、使用するアドレス指定ポリシーを選択します。このフィールドを空白のままにすると、アドレス指定ポリシーは使用されません。

  7. 「セキュリティ」リストで、適用する追加のポリシーを任意に指定できます。ポリシーを追加するには、「セキュリティ・ポリシーの追加」アイコンをクリックします。

  8. 「管理」リストで、適用する追加の管理ポリシーを任意に指定できます。ポリシーを追加するには、「管理ポリシーの追加」アイコンをクリックします。

  9. 該当するポリシーを選択し、対応する「削除」アイコンをクリックすることで、必要に応じて「セキュリティ」リストおよび「管理」リストからポリシーを削除できます。

  10. 「プロパティのオーバーライド」をクリックして、オプションで「セキュリティ」リストおよび「管理」リスト内のポリシーのプロパティをオーバーライドできます。

  11. Webサービス・データ・コントロールの適切なポリシーを選択後、「OK」をクリックして選択内容を適用し、ダイアログを閉じます。

事前に定義したポリシーとポリシーおよびそのプロパティの構成の詳細は、『Oracle Fusion Middleware Webサービスのためのセキュリティおよび管理者ガイド』を参照してください。