Oracle® Fusion Middleware Oracle WebLogic Server JAX-RPC Webサービスの高度な機能のプログラミング 11gリリース1 (10.3.6) B61634-06 |
|
![]() 前 |
![]() 次 |
この章では、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パッケージのみが使用されます。
Database Webサービスのコールインでは、PL/SQLストアド・プロシージャまたはSQL文などのSQL操作が1つまたは複数のWebサービス操作にマップされます。SQL操作のパラメータは、SQLタイプからXMLタイプにマップされます。
注意: 複数の操作があるのは、OracleAS WebサービスがSQL値をXMLで表すためのデータ表現方法を複数提供しているためです。たとえば、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サービスの作成はサポートされません。 |