14.2 Webサービス・コンシューマとしてのOracle Databaseの使用について

リレーショナル・データベースの格納、索引付けおよび検索の各機能を拡張すると、連携データの使用可能化に加え、半構造化データと非構造化データ(Webサービスを含む)を含めることができます。Webサービスをコールすることによって、データベースでは、株価、通貨為替相場、天気情報などのオンデマンドで生成された動的データの追跡、集計、リフレッシュおよび問合せを実行できます。

Oracle Databaseをサービス・コンシューマとして使用する例には、事前定義のデータベース・ジョブから外部Webサービスをコールして複数のサプライヤからインベントリ情報を入手し、使用しているローカルのインベントリ・データベースを更新する場合があります。他にはWebクローラの例があります。これは、データベース・ジョブをスケジュールして、多数のソースから製品情報と価格情報を照合できます。

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

14.2.1 Oracle JVM Webサービス・コールアウト・ユーティリティの使用について

Oracle Database 12c リリース2 (12.2.0.1)以降、Oracle Databaseから、Oracle JVM Webサービス・コールアウト・ユーティリティを使用してネットワークで実行されているWebサービスから操作をコールできます。このユーティリティでは、WSDL形式で指定されたSOAP WebサービスまたはWADL形式で指定されたREST Webサービスを使用できます。

このユーティリティを使用する前に、次の操作を実行してください。

  • JAVA_HOME環境変数を設定します。

  • 次のコマンドを使用してOJVMWCU_INSTALLスキーマを作成します。

    create user OJVMWCU_INSTALL identified by <ANY_PASSWROD>

    注意:

    • OJVMWCU_INSTALLスキーマを作成してからinstall_ojvmwcu.sqlスクリプトを実行する必要があります。install_ojvmwcu.sqlスクリプトでは、OJVMWCU_INSTALLスキーマがデータベースに存在するか否かがチェックされます。存在しない場合、スキーマが存在しないため実行を停止することを示すメッセージが表示されます。

    • OJVMWCU_INSTALLスキーマは、Oracle JVM Webサービス・コールアウト・ユーティリティを使用するためだけに作成するので、他の目的には使用しないでください。

  • install_ojvmwcu.sqlスクリプト、続いてgrant_ojvmwcu.sqlスクリプトを実行します。どちらのスクリプト・ファイルも、ORACLE_HOME/javavm/ojvmwcu/installディレクトリにあります。

    grant_ojvmwcu.sqlスクリプトはユーザー名を引数として取り、SYSDBAとして実行する必要があります。例: sqlplus / as sysdba @ grant_ojvmwcu.sql scott

次の各項で、このユーティリティについて詳しく説明します。

14.2.1.1 Oracle JVM Webサービス・コールアウト・ユーティリティのアーキテクチャ

Oracle JVM Webサービス・コールアウト・ユーティリティは、次の2つのフェーズで構成されます。

  • クライアント・スタブの生成

  • Oracle JVM固有のアーティファクトの生成

次の図に、Oracle JVM Webサービス・コールアウト・ユーティリティのアーキテクチャを示します。

図14-1 Oracle JVM Webサービス・コールアウト・ユーティリティのアーキテクチャ

図14-1の説明が続きます
「図14-1 Oracle JVM Webサービス・コールアウト・ユーティリティのアーキテクチャ」の説明

クライアント・スタブの生成

Oracle JVM Webサービス・コールアウト・ユーティリティでは、JAX-WSライブラリを使用し、SOAP Webサービスにアクセスするために「Oracle JVM Webサービス・コールアウト・ユーティリティに対する入力」で指定された入力からJavaクライアント・スタブを生成します。RESTサービスに対して、Oracle JVM Webサービス・コールアウト・ユーティリティではサード・パーティ・ツールwadl2javaを使用します。このツールは別途ダウンロードする必要があります。

注意:

RESTサービスを使用する場合は、wadl2javaツールをダウンロードした後に、次のいずれかを実行する必要があります。

  • WADL_HOME環境変数をwadl2javaツール・ディレクトリのパスに設定します

  • –tコマンドライン・オプションを使用してwadl2javaツール・ディレクトリのパスを指定します。

Oracle JVM固有のアーティファクトの生成

PL/SQLからWebサービスにアクセスするには、Webサービスによってサポートされる操作ごとに、静的JavaメソッドおよびPL/SQLラッパー・ファンクションが1つずつ必要です。Oracle JVM Webサービス・コールアウト・ユーティリティでは、Webサービスでサポートされる操作ごとに1つ静的メソッドを作成し、異なる注釈を解釈して生成されたクライアント・クラスから操作の詳細を抽出します。抽出された情報には、WebService、Webmethods、WebServiceClientおよびWebEndpointが含まれます。この情報を使用して、各操作が同じ入力パラメータを取り、公開されたWebサービスの対応する操作としてタイプを戻すといった方法で、対応する静的メソッドが生成されます。次に、サポートされる各操作に対応するすべての静的メソッドがJavaクラスに追加されます。

その後、Oracle JVM Webサービス・コールアウト・ユーティリティでは、生成されたJavaクラスの各静的メソッドに対応するPL/SQLラッパー・ファンクションが作成され、Webサービスの名前が付いたPL/SQLパッケージにパックされます。また、Oracle JVMでJavaクラスを実行するための基本的なパーミッションを付与または取り消すためにPL/SQLラッパーが生成されます。

14.2.1.2 Oracle JVM Webサービス・コールアウト・ユーティリティに対する入力

Oracle JVM Webサービス・コールアウト・ユーティリティに対する入力には主に、WSDLまたはWADLのファイルの場所、クライアント・アーティファクトを格納する出力ディレクトリ、生成されたJavaソースを格納するための出力ディレクトリ(必要な場合)および冗長モードがあります。このユーティリティでは、欠落している必須引数のレポートおよびオプション引数のデフォルト値の追加が行われます。次の表では、Oracle JVM Webサービス・コールアウト・ユーティリティのコマンドライン引数について説明します。

表14-1 Oracle JVM Webサービス・コールアウト・ユーティリティに対する入力

引数 引数タイプ 説明
—i <command-line options file> Webサービス 他のコマンドライン・オプションが格納されているファイルを指定します。
—out <output directory> Webサービス 出力ファイルが格納されるディレクトリを指定します。デフォルト値は現行ディレクトリです。
-p Webサービス 生成されるクライアント・スタブのパッケージ名を指定します。デフォルト値はojvm.webserviceです。
—keepsrc Webサービス 生成されたリソースを出力ディレクトリに格納することを指定します。
—v Webサービス 詳細説明の冗長モードを有効にします。
—Xauthfile Webサービス http://username:password@_web-service URL_?wsdl形式の認可情報が含まれるファイルの名前を指定します。
—name Webサービス Webサービスの名前を指定します。Webサービスの操作はこの値で指定されたPL/SQLパッケージ下に格納されます。デフォルト値はdefaultWebServiceです。
-log Webサービス Oracle JVM Webサービス・コールアウト・ユーティリティの出力ストリームを格納するログ・ファイルを指定します。この値を指定しない場合、出力ストリームはSystem.outに表示されます。
-wsdl <WSDL location> Webサービス WSDLファイルのホスト管理される場所を指定します。このオプションは、-WADLオプションとは相互に排他的です。
-wadl <WADL location> Webサービス WADLファイルのホスト管理される場所を指定します。このオプションは、-WSDLオプションとは相互に排他的です。
-t <wadl2java tool location> Webサービス wadl2javaツール・ディレクトリの場所を指定します。デフォルトでは、wadl2javaツールのホーム・ディレクトリを指すWADL_HOME環境変数がチェックされます。この環境変数が適切に設定されていない場合、エラーがスローされます。
-cp <additional classpath> Webサービス Javaソース・ファイルをコンパイルするために使用されるクラス・パスを指定します。CLASSPATH変数の値を使用することも、このオプションを使用して値を指定することもできます。
-auto Webサービス 生成されたクラスを指定のデータベースに自動的にロードします。このオプションが機能するには、次のフィールドは必須です。
  • -user

  • -orasid/-oraserv

-ts <trust_store path> Webサービス SSL証明書がインポートされるトラストストアのパスを指定します。
-user 自動モード Webサービスを起動すると想定されるユーザーを指定します。
-dbhost <host_name> データベース Oracle Databaseがインストールされるホスト名を指定します。このフィールドは、自動モードが指定されると使用されます。デフォルト値はlocalhostです。
-dbport <port_number> データベース Oracle Databaseが稼働するポート番号を指定します。このフィールドは、自動モードが指定されると使用されます。デフォルト値は1521です。
-orasid <Oracle SID> データベース リスナーに登録されたOracle DatabaseのSIDを指定します。このフィールドは、自動モードが指定されると使用されます。
-oraserv <name of corresponding CDB> データベース クラスのロード先となるCDB (コンテナ・データベース)の名前を指定します。このフィールドは、自動モードが指定されると使用されます。

14.2.1.3 Oracle JVM Webサービス・コールアウト・ユーティリティの出力

次の表では、Oracle JVM Webサービス・コールアウト・ユーティリティの出力について説明します。

表14-2 Oracle JVM Webサービス・コールアウト・ユーティリティの出力

ファイル名 説明
README.txt このファイルには、クラスを手動でロードし、パーミッションを付与して実行するための手順が記載されています。
<Web_Service_Name>_wrapper.sql このSQLファイルは、指定のWebサービスの操作ごとにPL/SQLラッパーを作成する場合に使用します。
<Web_Service_Name>.jar このJARファイルには、Webサービスのクライアント・スタブ・クラスが含まれています。

注意:

REST Webサービスでは、すべてのWebメソッド・ラッパーが文字列形式でWebレスポンスを戻します。GenericTypeがJersey-Clientでサポートされていますが、Oracle JVM Webサービス・コールアウト・ユーティリティではサポートされていません。

14.2.1.4 Oracle JVM Webサービス・コールアウト・ユーティリティからのセキュアなWebサービスのコール

Oracle JVM Webサービス・コールアウト・ユーティリティでは、SSLベースのWebサービスがサポートされています。また、このユーティリティでは、Basic HTTP認証によって保護されたWebサービスもサポートされています。SSLベースのWebサービスを使用する場合は、このユーティリティを実行する前にSSL証明書をキーストアに追加するか、-tsコマンドライン・オプションを使用してトラストストア・パスを渡す必要があります。Webコール・アウトの前に、パスをキーストア・パスに設定するために、wrappers.sqlファイルからgrabAndSaveCertificate<WebServiceName>(host, port)プロシージャを使用する必要があります。Basic認証で保護されたWebサービスを使用する場合は、このユーティリティとともに-Xauthfile<auth_file>コマンドライン・オプションを使用します。auth_file引数には、次の形式で認可情報を含めます。

http://username:password@<web-serviceURL>?wsdl

Webコール・アウトの前に、Webサービス資格証明を設定するために、wrappers.sqlファイルからsetwsCred<WebServiceName>(usr,pwd)を使用する必要があります。

14.2.2 Webサービスのデータソース(仮想表サポート)

単一または複数のWebサービスの起動から戻されるデータにアクセスするには、Webサービスのデータソースを使用して仮想表を作成します。この表を使用すると、戻された一連の行を1つの表のように問い合せることができます。

クライアントがWebサービスをコールし、その結果がデータベース内の仮想表に格納されます。結果セットはファンクション間で受け渡しできます。これによって、中間結果を保持する表を使用することなく、変換の順序を設定できます。メモリー使用量を軽減するために、1つのファンクションで一度に数行の結果セットを戻すことができます。

Webサービスでテーブル・ファンクションを使用すると、単一または複数のWebサービスからの一連の入力値を実際の表のように操作できます。次の例では、内部のSELECT文によって複数の行が作成され、それらの行の列は、WebサービスのコールCALL_WSをコールする引数として使用されます。

SELECT column1, cloumn2, ...
FROM TABLE(WS_TABFUN(CURSOR(SELECT s FROM table_name)))
WHERE ...

前述の例の場合、この表の式は、ビューなどを構成するために、他のSQL問合せで使用できます。

図14-2に、仮想表のサポートを示します。

図14-2 仮想表へのリクエスト結果の格納

図14-2の説明が続きます
「図14-2 仮想表へのリクエスト結果の格納」の説明

14.2.3 Webサービス・コンシューマとしてのOracle Databaseの機能

Webサービス・コンシューマとしてOracle Databaseを使用する場合は、次の機能が提供されます。

  • JavaによるWebサービスの使用

    Webサービスのコール用に使いやすいインタフェースが提供されるため、開発者は下位レベルのSOAPプログラミングから解放されます。データベース内で実行中のJavaクラスは、あらかじめロードされたJavaプロキシ・クラスを使用するか、または動的起動を介して、外部Webサービスを直接コールできます。

  • SQLおよびPL/SQLによるWebサービスの使用

    SQL対応のツールやアプリケーションを使用すると、外部Webサービスから動的データを透過的にかつ簡単に消費できます。WebサービスのメソッドをJavaストアド・プロシージャとして公開した後は、Javaストアド・プロシージャの先頭のPL/SQLラッパーによって、すべてのJavaとSOAPのプログラミング詳細がSQLクライアントから隠されます。

  • Webサービスのデータソースの使用

    外部WebサービスをSQLデータソースに転換することによって、アプリケーションとデータの統合を可能にし、外部Webサービスを通常のSQL表として表示します。このテーブル・ファンクションは、外部Webサービスのコールの出力を表し、SQL問合せで使用できます。