この章では、データベースWebサービスの概要、および既存のWebサービスのコール方法について説明します。この章の内容は、次のとおりです。
Webサービスは、プラットフォーム、言語またはデータ形式に関係なく、Web上でのアプリケーション間の相互作用を可能にします。eXtensible Markup Language(XML)、Simple Object Access Protocol(SOAP)、Web Services Descriptiion Language(WSDL)およびUniversal Description, Discovery, and Integration(UDDI)を含む主要な構成要素は、ソフトウェア業界全体で採用されています。通常、Webサービスの対象は、中間層アプリケーション・サーバーに実装およびデプロイされたサービスです。ただし、異機種間環境および非接続環境では、データとメタデータの他に、Webサービス・インタフェースを介してストアド・プロシージャにアクセスする必要性が増大しています。
データベースWebサービス・テクノロジは、データベースを通じてWebサービスにアクセスする手法です。これには、次の2方向の動作があります。
Webサービスとしてのデータベース・リソースへのアクセス
データベースによる外部Webサービスの消費
Oracle Databaseは、データベース内にデプロイされているPL/SQLパッケージとJavaクラスを介して、Webサービスにアクセスできます。Oracle DatabaseのWebサービス・プロバイダへの転換によって、Javaストアド・プロシージャ、PL/SQLパッケージ、事前定義のSQL問合せおよびデータ操作言語(DML)への投資が活用されます。反対に、データベースによる外部Webサービスの消費は、SQLエンジンとの統合とともに、企業情報の統合を可能にします。
Webサービスでは業界標準のメカニズムを使用して、プロバイダのプラットフォームや位置、実装およびデータ形式に関係なく、リモート・コンテンツおよびリモート・アプリケーションへの容易なアクセスが提供されます。クライアント・アプリケーションでは、Oracle Databaseのデータの問合せと取得、および標準Webサービス・プロトコルを使用したストアド・プロシージャのコールが可能です。Oracle固有のデータベース接続プロトコルには依存しません。このアプローチによって、異機種間環境、分散環境、および非接続環境における高い有益性が提供されます。
データベースをサービス・プロバイダとして使用して、Webサービスからデータベースをコールできます。これによって、既存または新規のSQL、PL/SQL、Javaストアド・プロシージャまたはJavaクラスをOracle Database内で活用できます。データベース表は、Webサービス・クライアントからアクセスして操作できます。
この項の内容は、次のとおりです。
JPublisherを使用すると、データベース操作に対応したJavaラッパーを生成し、Oracle Application ServerのWebサービスとしてデプロイできます。
図12-1に、JPublisherを使用してPL/SQLパッケージ、SQLオブジェクト、コレクションおよびパッケージをJavaクラスとして公開する方法を示します。公開されたクラスには、WebLogic Server(WLS)Webサービス・サーブレットを介して、どのWebサービスからもアクセスできます。
関連項目: 『Oracle Database JPublisherユーザーズ・ガイド』 |
Webサービス・プロバイダとしてOracle Databaseを使用する場合は、次の機能が提供されます。
PL/SQL Webサービスの拡張
CLOB
、BLOB
、XMLTYPE
、ref cursor、PL/SQLレコードおよび表など、さらなるPL/SQL型に対するWebサービスのサポートの拡張により、PL/SQL Webサービスが改善されます。これによって、既存のPL/SQLパッケージの大部分がWebサービスとして使用できます。
データベース内のJavaをWebサービスとして公開
Oracle Database内にデプロイされた既存のJavaクラスをWebサービスとして公開します。データ関連のサービスを実装するJavaクラスは、中間層とデータベース間で移行できます。Javaの移植性が、結果としてデータベースの独立性につながります。
SQL問合せWebサービスの提供
ウェアハウス問合せまたはビジネス・インテリジェンス問合せ、データ監視問合せ、およびすべての事前定義のSQL文を、Webサービスとして活用します。
DML Webサービスの使用可能化
SQL DMLによって実装された、セキュアで、永続的なトランザクションのスケーラブルなロギング、監視および追跡の各操作をWebサービスとして提供します。DML Webサービスは、アトミックかグループ、またはバッチのINSERT操作、UPDATE操作およびDELETE操作として実装されます。
次のJPublisherの機能は、Oracle Database内で実行されているコードへのWebサービスのコールをサポートします。
Javaインタフェースの生成
JPublisherスタイルとスタイル・ファイル
REF CURSORを返して結果セットへのマッピング
JPublisherの公開内容をフィルタするオプション
データベース内のJavaクラスをPL/SQLのコール仕様を使用せずにコールする場合のサポート
SQL問合せまたはDML文の公開のサポート
一意のメソッド名のサポート
Oracle Streams AQのサポート
関連項目: 『Oracle Database JPublisherユーザーズ・ガイド』 |
リレーショナル・データベースの格納、索引付けおよび検索の各機能を拡張すると、連携データの使用可能化に加え、半構造化データと非構造化データ(Webサービスを含む)を含めることができます。Webサービスをコールすることによって、データベースでは、株価、通貨為替相場、天気情報などのオンデマンドで生成された動的データの追跡、集計、リフレッシュおよび問合せを実行できます。
Oracle Databaseをサービス・コンシューマとして使用する例には、事前定義のデータベース・ジョブから外部Webサービスをコールして複数のサプライヤからインベントリ情報を入手し、使用しているローカルのインベントリ・データベースを更新する場合があります。他にはWebクローラの例があります。これは、データベース・ジョブをスケジュールして、多数のソースから製品情報と価格情報を照合できます。
この項の内容は、次のとおりです。
SQL、PL/SQLまたはJavaで作成されたWebサービスのクライアント・コードは、Oracle Database内で実行され、外部Webサービスをコールします。次の方法のいずれかを使用して、データベース内のJavaクライアントからWebサービスをコールできます。
SQLおよびPL/SQLのコール仕様
Webサービスを、JPublisherで生成されたユーザー定義のファンクション・コールを使用して、SQL文またはビュー内のいずれかで直接起動するか、または変数を介して起動します。
Pure Java static
プロキシ・クラス
JPublisherを使用して、JAX-RPC(XMLベースのリモート・プロシージャ・コールのJava API)を使用するクライアント・プロキシ・クラスを生成します。この方法では、サービスの位置がすでに認識されているため、UDDIレジストリでサービスを参照する必要がなく、Webサービスを簡単に起動できます。クライアント・プロキシ・クラスは、パラメータのマーシャリングとアンマーシャリングも含めて、SOAPリクエストの構成に必要な作業をすべて実行します。
JAX-RPCで動的起動インタフェース(DII)を使用するPure Java
動的起動によって、クライアント・プロキシを使用することなく、SOAPリクエストを構成し、サービスにアクセスする機能が提供されます。
PL/SQLを使用してWebサービスをコールするには、UTL_DBWS
PL/SQLパッケージを使用します。このパッケージでは、基本的にDIIクラスと同じApplication Program Interface(API)が使用されます。
Webサービスのデータソースを使用すると、あらゆるWebサービス・リクエストの結果を処理できます。
図12-2に、データベース内のJavaクライアントから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問合せで使用できます。
図12-3に、仮想表のサポートを示します。
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問合せで使用できます。
JPublisherでは、WebサービスからWSDLファイルを受信して、静的Java、プロキシ・クラスまたはPL/SQLのコール仕様を作成できます。
図12-4は、Webサービスからのコール用のスタブの作成を示しています。
このサポートは、次に示すJPublisherの主要なオプションを使用して作成されます。
-proxywsdl=
url
WSDL文書が指定のURLにある場合は、このオプションを使用してJAX-RPC静的クライアント・プロキシを生成します。このオプションを設定すると、インスタンス・メソッドをstatic
メソッドとして公開するための追加ラッパー・クラス、およびPL/SQLラッパーが生成されます。これにより、次の手順が実行されます。
JAX-RPCクライアント・プロキシ・クラスを生成します。
ラッパー・クラスを生成し、インスタンス・メソッドをstatic
メソッドとして公開します。
PL/SQLからアクセスする必要があるクラスのPL/SQLラッパーを生成します。
生成されたコードをデータベースにロードします。
注意: この-proxywsdl オプションは、ステップ2および3のバックグラウンドで-proxyclasses オプションを使用し、-proxyopts の設定を入力として取得します。 |
コードが生成されると、データベース・クライアントは、コール仕様を使用してPL/SQLを介するか、またはJAX-RPCクライアント・プロキシ・クラスを介して、Webサービスにアクセスできます。PL/SQLラッパーはstatic
メソッドを使用します。通常は、クライアントがstatic
メソッドを介してWebサービスに直接アクセスすることはありません。
-httpproxy=
proxy_url
ファイアウォールを介してWSDLにアクセスする場合は、このオプションを使用して、WSDL文書のURLを解決するためのプロキシURLを指定します。
-proxyclasses=
class_list
Webサービスの場合、このオプションは-proxywsdl
オプションのバックグラウンドで使用され、必要に応じて自動的に設定されます。さらに、このオプションを直接使用すると、いつでも一般的な目的で、static
メソッドを使用してJavaクラスのPL/SQLラッパーを作成し、必要に応じてラッパー・クラスを作成してインスタンス・メソッドをstatic
メソッドとして公開できます。
-proxyclasses
オプションは、-proxyopts
設定を入力として取ります。
-proxyopts=
wrapper_specifications
このオプションでは、ラッパー・クラスおよびPL/SQLラッパー生成時のJPublisherの動作を指定します。通常、これはWebサービスに対して行われますが、必須ではありません。-proxywsdl
オプションの標準的な使用方法では、-proxyopts
の設定はデフォルトのままで十分です。-proxyclasses
オプションを直接使用する場合は、特別に設定した-proxyopts
を使用できます。
-endpoint=
Web_services_endpoint
このオプションは-proxywsdl
オプションと併用し、Webサービス・エンドポイントを指定します。
-sysuser=
superuser_name/superuser_password
このオプションを使用して、スーパーユーザー・アカウントの名前とパスワードを指定します。これらの情報は、HTTPを使用してWebサービスにアクセスするためのパーミッションをクライアント・プロキシ・クラスに付与する際に使用します。
現在、Oracle Application Serverでは、LOB
型、XMLTYPE
、REF CURSOR、OUT
引数およびIN OUT
引数はサポートされていませんが、PL/SQLメソッドおよびSQL型をWebサービスとして公開する代替アプローチを使用できます。
JPublisherのデフォルトのアクションを変更すると、ユーザー提供のサブクラスを使用するコードを生成できます。たとえば、REF CURSOR
を戻すPL/SQLメソッドがある場合、JPublisherは戻り型をjava.sql.ResultSet
に自動的にマッピングします。ただし、このResultSet
型はWebサービスとしては公開できません。これを解決するには、次のように、結果セットを、Webサービスがサポートする形式で戻すことができる新規のメソッドを作成します。
public String [] readRefCursorArray(String arg1, Integer arg2) { java.sql.ResultSet rs = getRefCursor(arg1,arg2); ... //create a String[] from rs and return it ... }
メソッドを作成した後、公開するメソッド自体を含むインタフェースを作成します。このマッピングは、次のコマンドを使用することで、JPublisherを使用して簡単に実行できます。
jpub -sql=MYAPP:MyAppBase:MyApp#MyAppInterf...
このコマンドの内容は次のとおりです。
MyApp
には、結果セットを戻すためのメソッドが格納されます。
MyAppInterf
は、公開するメソッドを格納するインタフェースです。
使用しているアプリケーション用にコードを変換した後は、すべてのクラス・ファイルを単一のJavaアーカイブ(JAR)ファイルにアーカイブし、Webサービス・アセンブラを使用してデプロイ可能なWebサービスのエンタープライズ・アーカイブ(EAR)ファイルを作成します。
関連項目: 『Oracle Database JPublisherユーザーズ・ガイド』 |