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
スクリプトを実行します。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サービス・コールアウト・ユーティリティのアーキテクチャを示します。
クライアント・スタブの生成
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サービス | 生成されたクラスを指定のデータベースに自動的にロードします。このオプションが機能するには、次のフィールドは必須です。
|
-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.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問合せで使用できます。