Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC を使用した Web サービスの高度な機能のプログラミング 11g リリース 1 (10.3.1) B55544-01 |
|
戻る |
次へ |
この章では、Database Web サービスを使用する方法について説明します。
異機種環境と接続されていない環境で、Web サービスのインタフェースを介してストアド プロシージャ、データおよびメタデータにアクセスするニーズが増加しています。Database Web サービスの技術は、データベースに対しする Web サービスを有効にします。以下の 2 つの方向に機能します。
Database コールイン — Web サービスとしてのデータベース リソースへのアクセス
Database コールアウト — データベースからの外部 Web サービスの消費
Oracle データベースが Web サービス プロバイダに取り込まれると、Java ストアド プロシージャ、PL/SQL パッケージ、詳細キュー、定義済みの SQL クエリおよび DML などの機能を利用できます。
注意 : このリリースでは、クエリ、Java、DML および詳細キュー以外の Web サービスの作成はサポートされない。 |
クライアント アプリケーションは、クエリを実行し、Oracle データベースからデータを取得して、標準の Web サービス プロトコルを使用することによってストアド プロシージャを呼び出します。Oracle 固有のデータベースの接続プロトコルへの依存はありません。アプリケーションは、キャッシュされた WebLogic Server へのすべての接続において適用できます。このアプローチは、異種の環境、分散型環境および接続されていない環境でとても役立ちます。
Database Web サービスは WebLogic Web サービスの一部であるため、一貫性のある統一された開発とデプロイメント環境に参加できます。Web サービスのエクスポーズされたデータベースと Web サービス クライアントの間で交換されたメッセージは、WebLogic Web サービスによって提供されている管理機能 (セキュリティ、信頼性、監査およびロギング) のすべてを活用できます。
次の図は、Web サービスのコールインを示しています。
上の図に示した処理に対する手順を以下に示します。
データベース サービスのタイプに対する要求はアプリケーション サーバに受信します。サービス エンドポイントは、暗黙に要求されたサービスのタイプを指定します。
JAX-RPC 処理サーブレットは、要求をデコードするために SOAP ライブラリと XML パーサを参照します。
サーブレットは、エクスポーズされたデータベース操作に対応するクラスにリクエストを渡します。生成されたクラスは、データベースの PL/SQL パッケージ、クエリ、DML、AQ ストリーム、または Java クラスを表すことができます。
データベースは、応答を JAX-RPC 処理サーブレットに渡し、それをエンコードするために JAX-RPC 処理サーブレットは SOAP ライブラリと XML パーサを参照します。
WSDL に基づいてフォーマットされた SOAP 応答がクライアントに返されます。
Web サービスを含むように、リレーショナル データベース ストレージ、インデックス、および検索機能を拡張できます。Web サービスを呼び出すことによって、データベースは、生成されたオンデマンドの動的データ (株価、為替レート、または気象情報など) の記録、集約、更新およびクエリができます。サービスのコンシューマとしてのデータベース使用例として、複数のサプライヤからのインベントリ情報を取得してローカル インベントリ情報を更新するために事前定義済みのデータベース ジョブから外部 Web サービスを呼び出します。もう 1 つの例は、Web Crawler の例です。データベース ジョブはいくつかのソースから製品情報と価格情報を照合できるようスケジュールします。
以下の図に、データベース コールアウトを示します。
上の図に示した処理のための手順を以下に示します。
SQL 呼び出しおよび PL/SQL 呼び出しの仕様 - ユーザ定義関数の呼び出し (SQL 文内で直接呼び出すか、ビューで呼び出す) または変数 を介して Web サービスを呼び出す。
UTL_DBWS
PL/SQL パッケージを使用した動的 Web サービスの呼び出し。Call オブジェクトは WSDL に基づいて動的に作成され、その後、Web サービス オペレーションを呼び出すことができます。
Oracle Database PL/SQL パッケージおよびタイプ リファレンスは、UTL_DBWS
PL/SQL パッケージ使用の詳細について説明します。
Pure Java 静的プロキシ クラス - JAX-RPC を使用しているクライアント プロキシ クラスを生成します。サービスの場所が既知のため、UDDI レジストリ内のサービスをルックアップせずに、このメソッドは Web サービスを簡単に呼び出します。クライアント プロキシ クラスは、パラメータのマーシャリングとアンマーシャリングが含まれる SOAP リクエストを構成するすべての作業を実行します。
JAX-RPC 上の DII (Dynamic Invocation Interface) を使用した Pure Java - 動的呼び出しは SOAP リクエストを構成して、クライアント プロキシを使用せずにサービスにアクセスする機能を提供します。
メソッドの使用は、SQL やPL/SQLから実行するか、Java クラスから実行するか、またはサービスがあらかじめ知られているか (静的呼び出し)、実行時にのみ知られているか (DII)、によって異なります。
次の節では、Web サービスがあらかじめ知られている (静的呼び出し) 場合、コールインおよびコールアウトに対する SQL と XML の間のタイプ マッピングについて説明します。
Web サービスが実行時に既知の場合、Dynamic Invocation Interface (DII) または UTL_DBWS
PL/SQL パッケージのみが使用されます。JAX-RPC DII の使用の詳細については、以下の Web アドレスの API を参照してください。http://java.sun.com/j2ee/1.4/docs/#api
Database Web サービスのコールインでは、PL/SQL ストアド プロシージャまたはSQL 文などの SQL オペレーションが 1 つまたは複数の Web サービス オペレーションにマップされます。SQL オペレーションのパラメータは、SQL タイプから XML タイプにマップされます。
注意 : 複数のオペレーションがあるのは、OracleAS Web サービスが XML に SQL 結果セットの異なる表現などの SQL 値の追加のデータ表現選択肢を提供するためです。 |
次の表では、Web サービス コールインの SQL から XML へのマッピングについて説明します。最初のカラムでは、SQL タイプをリストします。XML タイプ (リテラル)、表の 2 番目のカラムは、use 属性のデフォルトのリテラル値に対する SQL から XML タイプへのマッピングを示します。XML タイプ (エンコード)、3 番目のカラムは、use 属性のエンコード値に対するマッピングを示します。リテラル値とエンコード値は、SOAP メッセージの本文をエンコーディングするためのルールを示します。
表 10-1 Web サービス コールインに対する SQL から XML タイプへのマッピング
SQL タイプ | XML タイプ (リテラル) | XML タイプ (エンコード) |
---|---|---|
INT |
int |
int |
INTEGER |
int |
int |
FLOAT |
double |
double |
NUMBER |
decimal |
decimal |
VARCHAR2 |
string |
string |
DATE |
dateTime |
dateTime |
TIMESTAMP |
dateTime |
dateTime |
BLOB |
byte[] |
byte[] |
CLOB |
String |
String |
LONG |
String |
String |
RAW |
byte[] |
byte[] |
Primitive PL/SQL indexby table |
Array |
Array |
PL/SQL Boolean |
boolean |
boolean |
PL/SQL indexby table |
complexType |
complexType |
PL/SQL record |
complexType |
complexType |
REF CURSOR (nameBeans) |
Array |
Array |
REF CURSOR nameXML) |
any |
test_xml |
REF CURSOR nameMLRowSet |
swaRef |
test_xml |
SQL object |
complexType |
complexType |
SQL table |
complexType |
complexType |
SYS.XMLTYPE |
any |
test_xml |
注意 : 国別言語サポート (「NLS」または「グローバリゼーション サポート」とも呼ばれます) の文字を SQL SYS.XMLTYPE 値に使用している場合、正しく処理されません。 |
REF CURSOR を返すクエリやPL/SQL 関数は、下記にリストされている 3 つのメソッドによってマップされます。ここでの、name はクエリか PL/SQL 関数の名前です。
nameBeans - このメソッドは配列を返します。配列の各要素はカーソルの 1 つの行を示す XSD 複合型のインスタンスです。複合型の下位要素は、同じ行のカラムに対応します。
nameXMLRowSet - このメソッドは、XML 形式の OracleWebRowSet を含む swaRef または text_xml 応答を返します。
nameXML - このメソッドは、Oracle XDB の行セットを含む任意の XML または text_xml 応答を返します。
OUT と IN OUT PL/SQL の両方のパラメータは、WSDL ファイルの IN OUT パラメータにマップされます。
表 10-1 では、2 つの異なるマッピング タイプを提供します。1 つはリテラルと別のはエンコードのために使用できます。デフォルトのマッピングはリテラルである。Database Web サービスに関しては、エンコードを使用する特別な理由はありません。エンコード使用の設定を呼び出すシナリオを使用する場合のために、エンコードに対するマッピングが提供されています。この章で説明されているすべてのトピックは、特に指定しない限りリテラル使用の設定を使用することを前提としています。
Oracle JDeveloper 11g を使用することで、PL/SQL Web サービスを生成およびデプロイすることができます。JDeveloper の「PL/SQL Web サービス ウィザードの作成」は、PL/SQL パッケージまたはオブジェクト タイプを使用する Java ストアド プロシージャから Web サービスを簡単に生成できます。Java ストアド プロシージャは、それを呼び出す SQL 仕様により定義され、[PL/SQL Web サービス] ウィザードにより、パッケージと同じように扱われます。Web サービスをボトムアップ形式で作成できます。つまり、WSDL から Database Web サービスを作成することはできません。
詳細については、Oracle JDeveloper オンライン ヘルプの「Web サービスの開発」節の「PL/SQL Web サービスの作成」を参照してください。
注意 : このリリースでは、クエリ、Java、DML および詳細キュー以外の Web サービスの作成はサポートされない。 |