ヘッダーをスキップ
Oracle® Database Java開発者ガイド
12cリリース1 (12.1)
B72466-05
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

13 データベースWebサービス

この章では、データベースWebサービスの概要、および既存の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 Databaseのデータの問合せと取得、および標準Webサービス・プロトコルを使用したストアド・プロシージャのコールが可能です。Oracle固有のデータベース接続プロトコルには依存しません。このアプローチによって、異機種間環境、分散環境、および非接続環境における高い有益性が提供されます。

データベースをサービス・プロバイダとして使用して、Webサービスからデータベースをコールできます。これによって、既存または新規のSQL、PL/SQL、Javaストアド・プロシージャまたはJavaクラスをOracle Database内で活用できます。データベース表は、Webサービス・クライアントからアクセスして操作できます。

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

WebサービスからのコールでのJPublisherの使用方法

JPublisherを使用すると、データベース操作に対応したJavaラッパーを生成し、Oracle Application ServerのWebサービスとしてデプロイできます。

図13-1に、JPublisherを使用してPL/SQLパッケージ、SQLオブジェクト、コレクションおよびパッケージをJavaクラスとして公開する方法を示します。公開されたクラスには、WebLogic Server(WLS)Webサービス・サーブレットを介して、どのWebサービスからもアクセスできます。

図13-1 Webサービスからのデータベースのコール

Webサービスからのデータベースのコール

関連項目:

『Oracle Database JPublisherユーザーズ・ガイド』

Webサービス・プロバイダとしてのOracle Databaseの機能

Webサービス・プロバイダとしてOracle Databaseを使用する場合は、次の機能が提供されます。

  • PL/SQL Webサービスの拡張

    CLOBBLOBXMLTYPE、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操作として実装されます。

WebサービスからのOracle DatabaseのコールをサポートするJPublisher

次のJPublisherの機能は、Oracle Database内で実行されているコードへのWebサービスのコールをサポートします。

  • Javaインタフェースの生成

  • JPublisherスタイルとスタイル・ファイル

  • REF CURSORを返して結果セットへのマッピング

  • JPublisherの公開内容をフィルタするオプション

  • データベース内のJavaクラスをPL/SQLのコール仕様を使用せずにコールする場合のサポート

  • SQL問合せまたはDML文の公開のサポート

  • 一意のメソッド名のサポート

  • Oracle Streams AQのサポート


関連項目:

『Oracle Database JPublisherユーザーズ・ガイド』

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

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

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

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

WebサービスのコールでのOracle Databaseの使用方法

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サービス・リクエストの結果を処理できます。

図13-2に、データベース内のJavaクライアントからWebサービスをコールする方法を示します。

図13-2 データベース内からのWebサービスのコール

図13-2の説明が続きます
「図13-2 データベース内からのWebサービスのコール」の説明

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問合せで使用できます。

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

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

図13-3の説明が続きます
「図13-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問合せで使用できます。

JPublisherにおける生成の概要

JPublisherでは、WebサービスからWSDLファイルを受信して、静的Java、プロキシ・クラスまたはPL/SQLのコール仕様を作成できます。

図13-4は、Webサービスからのコール用のスタブの作成を示しています。

図13-4 Webサービスからのコール用のスタブの作成

図13-4の説明が続きます
「図13-4 Webサービスからのコール用のスタブの作成」の説明

このサポートは、次に示すJPublisherの主要なオプションを使用して作成されます。

  • -proxywsdl=url

    WSDL文書が指定のURLにある場合は、このオプションを使用してJAX-RPC静的クライアント・プロキシを生成します。このオプションを設定すると、インスタンス・メソッドをstaticメソッドとして公開するための追加ラッパー・クラス、およびPL/SQLラッパーが生成されます。これにより、次の手順が実行されます。

    1. JAX-RPCクライアント・プロキシ・クラスを生成します。

    2. ラッパー・クラスを生成し、インスタンス・メソッドをstaticメソッドとして公開します。

    3. PL/SQLからアクセスする必要があるクラスのPL/SQLラッパーを生成します。

    4. 生成されたコードをデータベースにロードします。


    注意:

    この-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サービスにアクセスするためのパーミッションをクライアント・プロキシ・クラスに付与する際に使用します。

SQL型のマッピングの調整

現在、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ユーザーズ・ガイド』