データ サービス開発者ガイド

     前  次    新しいウィンドウで目次を開く     
ここから内容の開始

データ サービスの設計

データ サービスを使用することで、企業内の情報の単位 (顧客、注文、製品、サービスなど) を構造化したビューにアクセスできるようになります。

複数のデータ サービスをまとめて構成することで、IT 環境内にデータ統合レイヤを構築できます。 データ サービスの詳細については、BEA AquaLogic Data Services Platform の『コンセプト ガイド』にある「データ サービスによる情報の統合」を参照してください。

データ サービスは、デザイン ビューでは「集積回路」のように表されます。つまり、すべてのクエリ関数、基底のデータ ソース、ナビゲーション関係、および変換ロジックの配置図 (図 4-1) として表示されます。これらの配置されるアーティファクトは、返す結果を特定の形式 (戻り値型) でサポートしなければなりません。 詳細については、「AquaLogic Data Services Platform プロジェクトとプロジェクトのコンポーネント」を参照してください。

データ サービスは、AquaLogic Data Services Platform ベースのプロジェクト内に、クエリ関数およびメタデータのサポートを含んだ単一の XQuery ファイルとして存在します。 詳細については、「XQuery ソースの操作」および AquaLogic Data Services Platform の『XQuery 開発者ガイド』を参照してください。

関数および要素に対するセキュリティ ポリシーとキャッシング ポリシーの設定については、『管理ガイド』の「AquaLogic Data Services Platform リソースの保護」を参照してください。

この章の主な内容は以下のとおりです。

 


企業におけるデータ サービス

現代の企業では、データは急速に 2 つの「世界」に分かれてきています。1 つはテーブル、カラム、ビュー、およびストアド プロシージャからなる従来のリレーショナルな世界であり、もう 1 つはデスクトップやさまざまな Web インタフェースを介してアクセスされる Web サービスおよびその他のデータ形式からなる世界です。

根本的に異なるアーキテクチャや目的に基づいた複数のシステムを通じてデータにアクセスしたりデータを更新したりするコストはますます膨大になり、サービス自体を設定するコストにも匹敵しかねません。

データ サービスと Web サービスを比較する

データ サービスは、以下の点で従来の Web サービスに似ています。

もちろん従来の Web サービスには、返すデータの形式操作を容易にするコア XML データ型はありません。 また、小さい相違点として、データ サービスは XQuery ライブラリ ファイル (.xfl ファイル) に含まれるプライベート関数にアクセスできます。

具体的に言うと、データ サービスは、データの取得、集約、および変換を実行するための XML Query (XQuery) 命令が格納されているファイルです。

物理データ サービスと論理データ サービス

データ サービスには、物理データ サービスと論理データ サービスの 2 種類があります。 物理データ サービスは、リレーショナル データとサービス データで構成されます。 論理データ サービスは、物理データ サービスまたは別の論理データ サービスのコンシューマです。 企業のデータ アクセス レイヤには、物理データ サービスと論理データ サービスの両方が含まれます。

この方法の大きな利点は、AquaLogic Data Services Platform などが提供する仮想データ アクセス レイヤの場合にはデータの転送も保管も発生しないことです (アプリケーションで指定されるキャッシングを除く)。 データ サービスは、データ ソースからデータを動的に取得する読み取り関数のインタフェース呼び出しをエクスポーズするだけです。 取得されたデータはその後、データ サービスの XML 型に基づいて配置されます。 更新ロジックは、各データ サービスに関連付けられます。 リレーショナル データの場合、更新ロジックは自動化されています。それ以外の場合は、カスタム更新関数を開発できます。 詳細については、「データ サービスを介した更新の処理」を参照してください。

注意 : 論理データ サービスは、基底の物理的なデータ ソースを表す物理データ サービスに基づいて構築されます。 物理データ サービスは、物理的なソースのメタデータをインポートすることで作成され、同期を使用して更新されます。 このプロセスで生成されるスキーマ ファイル (XML 型) は、AquaLogic Data Services Platform でも外部でも変更してはいけません。 変更すると、データ サービスおよびそれに依存する論理データ サービスが無効になるおそれがあります (単一のソースに基づくデータ サービスを変更する場合は、その 1 つのソースに基づいて論理データ サービスを作成するのが簡単です)。

データ サービス関数

データ サービスは、データを取得および更新するための理解しやすい統一的なデータ アクセス レイヤをクライアント アプリケーションに提供するように設計されなければなりません。

データ サービスのインタフェースは、以下のような数種類の関数で構成されます。

 


データ サービスのデザイン ビューのコンポーネント

デザイン ビューでは、データ サービス全体を視覚的に表示することができます (図 4-1 を参照)。 各データ サービスは、省略可能なペインに囲まれた状態で WebLogic Workshop に表示されます。ペインには、アプリケーション コンポーネント、デザイン ビューで選択されたプロパティのプロパティなどが示されます。 AquaLogic Data Services Platform ベースのプロジェクトにおけるコンポーネントの詳細については、「AquaLogic Data Services Platform プロジェクトとプロジェクトのコンポーネント」を参照してください。

各データ サービスの中核となるのがその XML 型です。 XML 型は、データ サービスまたは関連するナビゲーション関数から読み取り関数が呼び出されたときに返されるドキュメントの形式を定義します。 詳細については、「XML 型と戻り値型」を参照してください。

デザイン ビューには、以下のものが表示されます。

表 4-2 に、図 4-1 で表示されているデータ サービスの機能コンポーネントの詳細を示します。

表 4-2 データ サービスのグラフィカル コンポーネント
キー
コンポーネント
目的
1
クエリ関数およびプロシージャ
読み取り関数および AquaLogic Data Services Platform プロシージャは通常、XQuery エディタを使用して開発される。
読み取り関数では、データ サービス用の API が提供される。 図 4-1 では、getCustomer() 関数は custID を受け取り、顧客の XML 型の形式でデータを返す (「戻り値型の変更」を参照)。
プロシージャは、多くの場合で void を返す、副作用を実行する関数を参照する。
2
基本のデータ サービス
現在のデータ サービスの直接の構成要素として使用されるデータ サービスが表示される。 基底のデータ サービス表現にある山形記号SQL 使用のためのデータ サービスのパブリッシュに関するアラート ダイアログをクリックすると、現在のデータ サービスによって使用される関数が表示される。 関数名自体をクリックすると、基底のデータ サービスが開く (元のデータ サービスに戻るには、[前へ] ボタンを使用する)。

注意 : 基底のデータ サービスは、1 レベルまでしか表示されない。 すべての基底のデータ サービスと依存関係を識別するには、メタデータ ブラウザを使用する (AquaLogic Data Services Platform の『管理ガイド』にある「メタデータの表示」を参照)。

3
ナビゲーション関数
推測される関係 (リレーショナル) と作成された関係の両方が表示される。 ナビゲーション関数は、そのネイティブ型の形式でデータを返す。 関係表現にある山形記号SQL 使用のためのデータ サービスのパブリッシュに関するアラート ダイアログをクリックすると、その関係に対して定義されているナビゲーション関数が表示される。
関数名をクリックすると、XQuery エディタ ビューに切り替わる。
関係は、AquaLogic Data Services Platform モデラー (「データ サービスのモデル化」を参照) を使用して作成することもできるし、関係ウィザード (「関係ウィザードを使用してナビゲーション関数を作成する」を参照) を使用してデータ サービス内に直接作成することもできる。
4
XML 型
XML 型は、編集可能な XML スキーマによって表される。 XQuery エディタ (「XQuery エディタの操作」を参照) に表示される読み取り関数の戻り値型は、データ サービスの XML 型と一致していなければならない。
5
プライベート関数
プライベート関数は、データ サービス内の他の関数からのみ使用できる。 デザイン ビューでは読み取り関数とナビゲーション関数の間に表示される。

注意 : 複数のデータ サービスが単一の XML 型に依存する場合もあります。 このような状況は、複数のデータ サービスを、常に同じ XML 型を返す 1 つのグループとして設計する場合に便利です。

XML 型と戻り値型

AquaLogic Data Services Platform ベースのプロジェクトの主要な生成物は、データ サービスのクエリ関数と戻り値型 (ターゲット スキーマとも呼ばれる) です。 XML スキーマは、物理データと論理データ、および AquaLogic Data Services Platform クエリから返されるドキュメントの形式を階層形式で表すために使用されます。

戻り値型は、データ サービスおよびデータ モデルの両方のバックボーンと考えることができます。 プログラム的には、戻り値型は for-let-where-return (flwr) クエリの「r」です。

図 4-3 RTLApp からの戻り値型の例

RTLApp からの戻り値型の例

戻り値型には、以下の主要な目的があります。

データ サービスにおける XML 型の指定の詳細については、「XML 型を関連付ける」を参照してください。

XML 型が使用される場合

AquaLogic Data Services Platform モデラー、データ サービス、XQuery エディタ、およびメタデータ ブラウザでは、以下のように XML 型表現が使用されます。

AquaLogic Data Services Platform で実装される XQuery および XML 仕様のバージョンについては、『XQuery 開発者ガイド』を参照してください。

注意 : ADO.NET をサポートするデータ サービスには、さらに固有の XML 型要件があります。 詳細については、『クライアント アプリケーション開発者ガイド』の「ADO.NET クライアントのサポート」を参照してください。

戻り値型が使用される場合

戻り値型は、実行時にクエリによって生成されるデータの構造または形式を定義します。 戻り値型は、XML 型の 1 つのオブジェクトと考えることができます。

注意 : アプリケーションで使用される AquaLogic Data Services Platform クエリの整合性を保持するためには、クエリの戻り値型が、クエリを含んでいるデータ サービスの XML 型と一致していることが重要です。 そのため、戻り値型を変更する場合は、XQuery エディタの [XML 型の保存および関連付け] コマンドを使用して、データ サービスの XML 型をクエリレベルの変更と一致させておく必要があります。 または、戻り値型に基づいて新しいデータ サービスを作成します。 詳細については、「単純なデータ サービス関数の作成」を参照してください。

 


データ サービスの作成

データ サービスの作成には、以下のような数種類の方法があります。

データ サービスは常に、現在の AquaLogic Data Services Platform ベースのプロジェクト内に作成されます。 作成後は、[データ サービス] メニュー (または右クリック) を使用してデータ サービスを開発できます。表 4-5 に、使用可能な右クリック オプションとそれらの使い方を示します。

表 4-5 [データ サービス] メニューのオプション
コマンド
使用方法
[関数の追加]
データ サービスに関数を追加する。 関数の名前の入力後、その名前をクリックすると XQuery エディタが開く。
[関数の追加 (空)]
データ サービスに空の関数を追加する。 型がデータ サービスに関連付けられている場合であっても、空の関数には最初、XML 型の表現が含まれない。 この場合、スキーマの「マークアップ」は手動で追加できる。 XML 型に数多くの要素が含まれ、それらの多くがデータ サービスのクエリ関数で使用されない場合に便利。
[関係の追加]
別のデータ サービスとの関係を作成する。 ファイル ブラウザを使用して、現在のデータ サービスに関連付けるデータ サービスの名前を入力できる。 名前を選択すると、関係ウィザードが表示される (このウィザードで、2 つのサービスを関連付けるナビゲーション関数を定義できる)。
[プライベート関数の追加]
データ サービスにプライベート関数を追加する。 関数の名前の入力後、その名前をクリックすると XQuery エディタが開く。
[XML 型の関連付け]
データ サービスを XML 型に関連付ける。 アプリケーションの任意の場所から、型 (.xsd スキーマ) を選択できる。 データ サービスに現在関連付けられている XML 型がある場合は、置換される。
[XML 型の作成]
組み込みのスキーマ エディタを使用して、XML 型を作成できる。

注意 : データ サービスに XML 型が関連付けられると、このオプションは使用できなくなる。

[XML 型の表示/
ネイティブ タイプの表示
物理データ サービスの場合、要素の XML 型 (例 : xs:int) またはそのネイティブ型 (例 : CUSTOMERID INTEGER(10)) を表示できる。

以下の節では、これらの各コマンドについて詳しく説明します。

データ サービスへの関数の追加

読み取り関数には、適切なセキュリティ資格を持つ呼び出し側のアプリケーションからアクセスできます。 データ サービスに読み取り関数を追加する場合は、デフォルトの関数名をそのまま使用することもできますし、デフォルト名を直接編集することもできます。 その後、新しい関数の名前をクリックすると、XQuery エディタに移動します。 「XQuery エディタの操作」を参照してください。

注意 : アリティ (パラメータの数) が一致しない場合でも、所定のデータ サービス内の関数名はユニークであることが重要です。 これは、JDBC が同じ名前の関数を区別できないためです。

データ サービスへのプロシージャの追加

データ サービス プロシージャ (副作用関数とも呼ばれる) を使用して、必ずしもデータを返さない外部ルーチンを呼び出すことができます。 プロシージャを使用して、データを更新する Web サービスを呼び出すというのが、一般的なシナリオです。 プロシージャを使用して、データベース処理を実行するリレーショナル ストアド プロシージャを呼び出すという使い方もあります。 このような場合には、「success」メッセージだけが返される場合があります。「success」メッセージは、ストアド プロシージャがそのステータスをレポートするように設計され、さらに、呼び出し側のプロシージャが返されたデータを処理するように設定されている場合にのみ発生します。

プロシージャは、メタデータ インポート プロセスの一部として、物理データ サービスのみに追加されます。 詳細については、「AquaLogic Data Services Platform のプロシージャの識別」を参照してください。

データ サービスへのプライベート関数の追加

プライベート関数は、読み取り関数と似ていますが、データ サービス内の他の関数からのみ使用できます。 プロパティ エディタを使用するか、またはソース ビューのプラグマを編集することで、プライベート関数を読み取り関数に変更できます。

データ サービスへの関係の追加

関係を設定すると、データ サービスのインスタンスをパラメータとして使用して、別のデータ サービスを呼び出すことができます。 データは、関連するサービスの形式で返されます。 このようにして、データ サービスに一連の関数を設定できます。

ナビゲーション関数について

1 つまたは複数の関係によって、2 つのデータ サービスを関連付けることができます。

たとえば、CUSTOMER と ORDER が、以下の 3 つのナビゲーション関数を含んだ CUSTOMER-ORDER 関係によって関連付けられているとします。

	cst:getAllOrders(CUSTOMER) 矢印 ORDER*
	cst:getOpenOrders(CUSTOMER) 矢印 ORDER*
	ord:getCustomer(ORDER) 矢印 CUSTOMER

最初の 2 つの関数は、CUSTOMER-ORDER 関係を顧客からその注文の全部または一部に移動する 2 種類の方法です。 3 番目の関数は、ORDER からそれに関連付けられた CUSTOMER に移動する方法です。

多くの一般的な関係では、2 つのナビゲーション関数 (関係を介して一方向に移動するための関数とその逆方向に移動するための関数) が使用されます。

あまり一般的でない一方向の関係には、ナビゲーション関数は 1 つしかありません。

ナビゲーション関数を使用する場合の返されるデータへの影響

データ サービスにおける読み取り関数とナビゲーション関数の機能的な相違点は、返されるデータの形式です。 以下に、簡単な例を示します。

以下の XML 型を持つ OpenOrders データ サービスがある場合、

<openOrders>
<custID>
<first_name>
<last_name>
<orderID>
..
</openOrders>

読み取り関数に 101 などの顧客 ID と、LRP-111 などの注文 ID を渡すと、クエリ結果は次のようになります。

<customerInfo>
<custID>101</custID>
<first_name>Jane</first_name>
<last_name>Smith</last_name>
<orderID>Smith</orderID>
..
</customerInfo>

しかし、データ サービスに TrackOrders テーブルに関連付けられたナビゲーション関数があると、クエリ パラメータは同じものが保持されますが、データは次のような TrackOrders 型の形式で返されます。

<TrackOrders>
<custID>
<first_name>
<last_name>
<orderID>
<ship_date>
<weight>
<delivery_date>
...
</TrackOrders>

データ サービス間の関係を作成する

データ サービスに関係を追加するプロセスは、以下の 3 つの手順で構成されます。

  1. [関係の追加] を選択します。
  2. 図 4-6 右クリック メニューのオプションを使用した、データ サービスへの関係の追加


    右クリック メニューのオプションを使用した、データ サービスへの関係の追加

  3. 関係を既存のデータ サービスに関連付けます。
  4. 関係ウィザードを使用して、関係を定義します。

関係ウィザードを使用してナビゲーション関数を作成する

関係ウィザードを使用して、豊富な機能を備えたバイナリ ナビゲーション関数を開発できます。

ナビゲーション関数の価値は、関数の内部構造、結合条件などが分からなくても、クライアント アプリケーションで複合パラメータを使用してその関数を呼び出せることにあります。 データ サービス作成者から見ると、そのデータ サービス関数を呼び出すかどうかに関係なくアプリケーションに影響を与えずに、関数の内部を変更できます。

デザイン ビューまたはモデル ダイアグラムで関係を作成する場合には、関係ウィザードが表示されます。 ウィザードでは、ナビゲーション関数に対して以下の表記を設定できます。

また、パラメータを識別したり、where 句を指定したりすることもできます。

関係の表記 (ロール名、方向、カーディナリティ) を設定する

関係ウィザードの最初のダイアログでは、ロール名、方向、およびカーディナリティを設定できます。

図 4-7 方向、カーディナリティ、およびロール名を指定する関係ウィザード

方向、カーディナリティ、およびロール名を指定する関係ウィザード

表 4-8 に、図 4-7 で表示されている設定コンポーネントの詳細を示します。

表 4-8 関係の主要な設定
キー
コンポーネント
目的
1
方向
クエリ関数は通常、XQuery エディタを使用して開発される。 双方向の関係がデフォルトの条件。 つまり、関連するデータ サービスを呼び出すナビゲーション関数がそれぞれのデータ サービスに存在することになる。 方向の表記には、実行時の効果はない。
方向は、各データ サービスに関連付けられたプロパティ エディタでも、モデル ダイアグラムでも指定できる。
2
ロール名
関係の各側には、対象ロール名を設定できる。 デフォルトでは、ロール名はそのデータ サービス名と同じ。 たとえば、ADDRESS データ サービスのデフォルト ロール名は、ADDRESS。 関係ウィザードでロール名を変更できる。
ロール名は、データ サービスに関連付けられたプロパティ エディタでも、関係を示すモデル ダイアグラムでも指定できる。

注意 : ロール名の表記には、実行時の効果はない。

3
カーディナリティ
カーディナリティの表記は、関係の各側に対して設定できる。 デフォルトのカーディナリティは、1 対 1 だが、<空白>、0、1、および n の任意の組み合わせに変更できる。
カーディナリティは、データ サービスに関連付けられたプロパティ エディタでも、関係を示すモデル ダイアグラムでも指定できる。
注意 : カーディナリティの表記には、実行時の効果はない。

関数名を設定する、反対側のデータ サービスを指定する、パラメータをマップする、where 句を作成する

関係ウィザードの 2 番目のダイアログでは、ナビゲーション関数名およびその他の特性を設定できます。

図 4-9 関数名、パラメータ、および where 句を指定する関係ウィザード

関数名、パラメータ、および where 句を指定する関係ウィザード

表 4-10 に、図 4-9 で表示されている設定コンポーネントの詳細を示します。

表 4-10 関係の主要な設定
キー
コンポーネント
目的
1
[ナビゲーション関数名]
ナビゲーション関数名は、デフォルトでは「getCustomer」などのように、対象データ サービス名の前に「get」を付加したもの。 同じ名前の関数が存在している場合には、「getCustomer1」のように関数名に数字が付加される。
ただし、ナビゲーション関数名は任意の有効な関数名に変更できる。

注意 : モデル ダイアグラムから関係ウィザードを呼び出すときには、一方のデータ サービスからもう一方のデータ サービスへ線を描く動作をすることで、反対側のデータ サービスを決定できる。 その場合、ナビゲーション関数名を選択するオプションは存在しない。

2
関連するデータ サービス関数
デフォルトでは、対象データ サービスのルート関数が選択される。 ただし、対象データ サービス内にある任意の使用可能な読み取り関数を選択できる。
3
[入力パラメータのマップ]
関連する関数に入力パラメータがある場合、使用可能なパラメータの名前と型が表示される。 プルダウン メニューを使用して、対象データ サービスから要素を選択し、入力パラメータとしてマップできる。
4
[WHERE 句の作成]
関係の各側から結合要素を選択できるプルダウン メニューを使用して、関数に where 句を追加できる。
5
[追加] または [削除]
where 句を追加する、または選択した where 句を削除する。
6
[次へ]
データ サービス間の関係が双方向の場合に [次へ] をクリックすると、2 番目のデータ サービス用の設定ページに移動する。そのページでは、関係のもう一方のデータ サービスに対してナビゲーション関数名やパラメータを指定したり、where 句を追加したりできる。

ナビゲーション関数の作成の例

この節では、簡単な例を取り上げ、関係ウィザードを使用して豊富な機能を備えたナビゲーション関数を作成する方法を示します。 この節の目的は、顧客 ID を指定することで特定の顧客の住所 (ファイルの最初にある使用可能な住所) を返すナビゲーション関数を作成することです。

次の手順では、AquaLogic Data Services Platform に付属の RTLApp が使用されています。

  1. デザイン ビューで RTLServices/ApplOrder データ サービスを開き、右クリック メニューから [関係の追加] を選択します。
  2. 対象データ サービスを選択します。 ここでは、RTLServices/CustomerProfile を選択します。
  3. 図 4-11 ApplOrder ナビゲーション関数の対象データ サービスの選択


    ApplOrder ナビゲーション関数の対象データ サービスの選択

  4. 続いて、方向とカーディナリティを設定できます。
  5. 関係は双方向のままにしておきます。つまり、住所オブジェクトを指定することで顧客のプロファイル情報を取得でき、顧客のプロファイル オブジェクトを使用して住所情報を取得できます。 ただし、顧客は複数の注文を行うことができるので、Customer Profile 矢印 Address のカーディナリティの表記は 1 対 n になります。

    図 4-12 関係の方向とカーディナリティの設定


    関係の方向とカーディナリティの設定

  6. [次へ] をクリックします。 これにより、デフォルト名 getCustomerProfile() が指定された最初のナビゲーション関数が作成されます。
  7. 各ナビゲーション関数の次のステージでは、以下の作業を行います。

    • ナビゲーション関数のデフォルト名をそのまま使用するか、または変更する。
    • ナビゲーション関数に含まれる読み取り関数を指定する (複数の読み取り関数が存在する場合もある)。
    • 基底のクエリ関数でパラメータがサポートされている場合には、呼び出すためのパラメータを指定する。
    • 必要に応じて、1 つまたは複数の where 句を追加する。
    • 図 4-13 最初のナビゲーション関数の定義


      最初のナビゲーション関数の定義

      getCustomerProfile() ナビゲーション関数の場合の特徴は以下のとおりです。

    • 単一の読み取り関数だけが存在する。
    • パラメータはない。
    • where 句の結合要素は、APPL_ORDER/CustomerID と CustomerProfile/Customer/CUSTOMER_ID。
  8. [次へ] をクリックして、デフォルト名が getApplOrder() である反対側のナビゲーション関数を定義します。
  9. 衣料品の注文のデータ サービスには通常、複数の読み取り関数が含まれます。 getApparelOrdersByCustID() を選択すると、反対側のデータ サービスから要素 (cust_id) をマップできるようになります。

    図 4-14 では、最初のナビゲーション関数に対して定義した where 句があらかじめ指定され、読み込み専用形式で表示されています。

    図 4-14 パラメータの選択


    パラメータの選択

  10. [完了] をクリックします。
  11. 図 4-15 生成された getCustomerProfile() ナビゲーション関数


    生成された getCustomerProfile() ナビゲーション関数

ナビゲーション関数をテストする

テスト ビューでナビゲーション関数を実行するときには、複合パラメータの形式で入力を指定できます。複合パラメータは、たとえば顧客レコードを返すクエリの結果などになります。 または、テスト ビューのテンプレート オプションを使用して、適切なパラメータを指定できます。 「XML 型を使用して入力パラメータを指定する」を参照してください。

ソース ビューにおけるナビゲーション関数

データ サービスのソース ビューでは、ナビゲーション関数はプラグマと関数の本文を使用して定義されます。 詳細については、AquaLogic Data Services Platform の『XQuery 開発者ガイド』を参照してください。

たとえば、Payment() という名前のナビゲーション関数に、読み取り関数 getPaymentList() があるとします。

ナビゲーション関数は、次のように表示されます。

declare function ns1:getCustomer($arg as element(ns0:APPL_ORDER)) as element(ns15:PROFILE)* {
for $b in ns16:getCustomerByCustID($arg/CustomerID)
return $b
};

この関数を理解するための重要な要素は、XML 型 PAYMENTList.xsd をモデル化するスキーマをインポートするネームスペース ns15 にあります。 ネームスペースは、次のように定義されます。

import schema namespace ns15="urn:retailerType" at
"ld:DataServices/RTLServices/schemas/Profile.xsd";
注意 : データ サービスのプラグマにあるロール名を変更する場合、その関係がモデル ダイアグラムに存在しているときには、その関係を表示するすべてのモデル ダイヤグラムにあるロール名も同様に変更する必要があります。 変更しない場合、関係が無効になります。

論理データ サービスの XML 型の操作

データ サービスに関連付けられた読み取り関数は、データ サービスの XML 型の形式で情報を返します。

注意 : 論理データ サービスは、基底の物理的なデータ ソースを表す物理データ サービスに基づいて構築されます。 物理データ サービスは、物理的なソースのメタデータをインポートすることで作成され、同期を使用して更新されます。 このプロセスで生成されるスキーマ ファイル (XML 型) は、AquaLogic Data Services Platform でも外部でも変更してはいけません。 変更すると、データ サービスおよびそれに依存する論理データ サービスが無効になるおそれがあります (単一のソースに基づくデータ サービスを変更する場合は、その 1 つのソースに基づいて論理データ サービスを作成するのが簡単です)。

XML 型を関連付ける

ブラウザを使用して、データ サービスに関連付けられる XML 型を追加したり、置換したりできます。 型はアプリケーションのファイル構造内に存在しなければなりません。

グローバル要素を選択する

選択するスキーマに複数のグローバル要素がある場合には、使用するグローバル要素を選択するためのダイアログが表示されます。

図 4-16 グローバル要素を選択するためのダイアログ ボックス

グローバル要素を選択するためのダイアログ ボックス

XML 型を編集する

XML 型を編集することもできます。 XML 型の右クリック メニューからオプションを使用できます (表 4-17)。

警告 : デザイン ビューで XML 型を編集すると、XML 型の基底のスキーマ ファイルが直接変更されます。 こうした変更は [元に戻す] コマンドで戻すことはできません。 このため、XML 型を変更する場合は、元のバージョンに戻さなければならない場合に備えて適切なバックアップを作成し、注意深く行う必要があります。
表 4-17 右クリック メニューの XML 型編集オプション
オプション
目的
[子の追加]
現在選択されている要素に子要素を追加する。 使用可能なサブメニュー オプションには、特殊用途のスキーマ要素 [選択]、[すべて] などがある。
[兄弟の追加]
現在選択されている要素に兄弟要素を追加する。 使用可能なサブメニュー オプションには、特殊用途のスキーマ要素 [シーケンス]、[選択] などがある。
[属性の追加]
現在選択されている要素に属性を追加する。
[削除]
現在選択されている要素または属性を削除する。 このオプションは、スキーマのルート要素に対しては使用できない。
[グローバル型および要素の編集を許可]
スキーマ全体に適用される切り替えオプション。 スキーマの編集は注意深く行わなければならない。 そのためには、このオプションを選択する必要がある。
[ソースへ移動]
組み込みのスキーマ エディタで XML 型を開く。
[Move Up]
選択されている要素を、スキーマの上部のほうに移動する。
[Move Down]
選択されている要素を、スキーマの下部のほうに移動する。
[検索]
ルート要素など、選択されている複合要素内でテキストを検索する。

上記以外のオプションとして、特定の条件を満たしたリレーショナルベースの XML 型の要素に対しては [Enable Optimistic Locking] が使用できます。 「オプティミスティック ロックを有効または無効にする」を参照してください。

表 4-18 に、さまざまな XML 型要素に対して適用される右クリック オプションの一覧を示します。

表 4-18 右クリック メニューの XML 型編集オプションと適用される要素の一覧
要素
[子の追加]/
[選択]/
[すべて]
[兄弟の追加]
/
[シーケンス]/
[選択]
[属性の追加]
[削除]
[Move Up]/[Move Down]
ルート要素
x
 
x
   
複合要素
x
 
x
x
 
リーフ要素
x
x
x
x
 
条件要素
x
   
x
 
All 要素
x
   
x
 
Sequence 要素
x
x
x
x
 
Choice 要素
x
x
 
x
 
属性
     
x
 

スキーマに表示される複合型コンポーネントは、XML 型に表示されない場合があります。

注意 : XML 型は、他のデータ サービスによって使用される可能性のあるスキーマに基づいています。 このため、XML 型を変更する場合は、元のバージョンに戻さなければならない場合に備えて適切なバックアップを作成し、注意深く行う必要があります。 同様に、データ サービス内のすべての関数は、データ サービスの XML 型を返すように記述されなければなりません。
XML 型を外部から編集する

表 4-18 に示した右クリック メニューだけでなく、[ソースへ移動] コマンドを使用して WebLogic Workshop のテキスト エディタでスキーマ ファイルを編集することもできます。

XML 型の作成

新しいデータ サービスに対して XML 型を作成できます。 データ サービスにすでに名前があるので、以下の項目のみを指定する必要があります。

デフォルトでは、スキーマ ファイル名、スキーマ、および対象ネームスペースは、データ サービスの名前と同じになります。

図 4-19 [新しいスキーマ ファイルの作成] ダイアログ ボックス

[新しいスキーマ ファイルの作成] ダイアログ ボックス

作成後は、データ サービスに組み込みのスキーマ エディタを使用してスキーマを作成できます。 または、XMLSpy などのプログラムでスキーマを作成できます。

 


データ サービスの管理

データ サービスをクライアント アプリケーションで使用できるようにする前に、重要なデプロイメント前のタスクを行う必要があります。 データ サービスおよびその関数のプロパティの設定などを行います。

図 4-20 データ サービスのプロパティ

データ サービスのプロパティ

プロパティ エディタ ([表示|プロパティ エディタ]) を使用して、以下のようなデータ サービスの主要な機能を設定したり変更したりできます。

主なデザイン ビューのプロパティ」を参照してください。

データ サービス関数のリファクタリング

データ サービス関数をリファクタできます (名前の変更または安全な削除に限る)。 「AquaLogic Data Services Platform アーティファクトのリファクタリング」を参照してください。

AquaLogic Data Services Platform アーティファクトの用途の検索

ほとんどの AquaLogic Data Services Platform アーティファクトについては、右クリック メニュー オプションからその用途を即座に確認できます。 「データ サービス アーティファクトの用途」を参照してください。

更新オプションの設定

各データ サービスには、その更新特性を指定するための一連のプロパティがあります。

注意 : 分解関数、オーバーライド クラス、オプティミスティック ロック設定、およびその他の SDO 関連の情報については、「データ サービスを介した更新の処理」を参照してください。

データ サービスのプロパティ

更新を許可する

プロパティ エディタの [更新の許可] オプションを使用して、呼び出し側のアプリケーションでデータ サービスに関連付けられた更新ロジックを実行できるかどうかを指定できます。 更新の許可はリレーショナルベースのデータ サービスでは特に重要になります。更新ロジックは無効にしない限り、自動的に使用可能になるからです。

更新を許可するには、このオプションを true に設定します。更新しないようにするには false に設定します。

オーバーライド クラスを設定する

データ サービスに関連付けられた非リレーショナル ソースを更新するには、更新オーバーライド クラスを作成する必要があります。 さらに、リレーショナル ソース用の組み込みの更新ロジックを上書きして、更新プロセスにカスタム ロジックを適用しなければならない場合もあります。

オーバーライド クラスを設定する前に、そのクラスを開発する必要があります。 必要な手順は次のとおりです。

オーバーライド クラスの開発については、「データ サービスを介した更新の処理」を参照してください。

注意 : データ サービスごとに、更新オーバーライド クラスを 1 つだけ指定できます。 ただし、複数のデータ サービスで同じ更新オーバーライド クラスを共有できます。

オプティミスティック ロックを有効または無効にする

リレーショナル データの SDO 更新メカニズムでは、変更の衝突を避けるためにオプティミスティック ロック ポリシーが使用されます。 オプティミスティック ロックの場合、SDO クライアントによるデータの取得後もデータ ソースはロックされません。 後に更新が必要になったときに、ソース内のデータが、取得されたときのデータのコピーと比較されます。 データの不一致があった場合、更新はコミットされません。

オプティミスティック ロック更新ポリシーは、データ サービスごとに設定されます。 次の表に、オプティミスティック ロック更新ポリシーのオプションを示します。

表 4-21 オプティミスティック ロック更新ポリシーのオプション
オプティミスティック ロック更新ポリシー
効果
[PROJECTED]
デフォルト設定。 SDO データ グラフ内の要素とデータ ソースとの 1 対 1 のマッピングを使用して、データ ソースの「更新可能性」を検証する。
更新が完了できることを最も詳細に検証する方法である。ただし、更新に関係している要素が多い場合には、多数のフィールドの検証が必要になるため時間がかかる。
[UPDATED]
SDO データ グラフ内で変更されたフィールドだけを使用して、データ ソースの変更ステータスを検証する。
[SELECTED FIELDS]
選択されたフィールドを使用して、データ ソースの変更ステータスを検証する。

リレーショナルベースのデータ サービスの場合、オプティミスティック ロックのプロパティが [SELECTED FIELDS] に設定されると、XML 型の要素に対して [Enable/Disable Optimistic Locking] オプションが使用可能になります。 オプティミスティック ロック ポリシーは、プロパティ エディタで表示および設定されます (図 4-22)。 その他のプロパティについては、「主なデザイン ビューのプロパティ」を参照してください。

図 4-22 更新が許可され、オプティミスティック ロックが [SELECTED FIELDS] に設定されたデータ サービス

更新が許可され、オプティミスティック ロックが [SELECTED FIELDS] に設定されたデータ サービス

アクティブなとき、[SELECTED FIELDS] オプションでは更新の前にオプティミスティック ロック ロジックを検証できます。 XML 型に関連付けられた右クリック メニューを使用して、任意の数のフィールドを選択できます。 複合要素が選択されると、マークされていなくても、そのすべての子が選択されます。

[SELECTED FIELDS] オプションが選択されると、右クリック メニューで [Enable/Disable Optimistic Locking] という切り替えオプションが使用可能になります。 複数の要素を選択できます。

図 4-23 フィールドに対するオプティミスティック ロック ポリシーの有効化

フィールドに対するオプティミスティック ロック ポリシーの有効化

図 4-23 では、2 つのフィールド PRODUCT_ID と QUANTITY が選択されています。

この選択は、ソース ビューのプラグマに反映されます。

<optimisticLockingFields>
<field name="PRODUCT_ID"/>
<field name="QUANTITY"/>
</optimisticLockingFields>

オプティミスティック ロック ポリシーに基づく変更の衝突の処理については、「データ サービスを介した更新の処理」を参照してください。

セキュリティ リソースの追加

セキュリティ リソース設定はデータ サービス レベルで作成され、AquaLogic Data Services Platform Console を使用してアクティブ化されます。 必要な手順は次のとおりです。

セキュリティ設定を理解する簡単な方法として、ここでは、RTLApp の DataServices/Demo/Java/Logical フォルダにある Shipping データ サービスを使用して例を作成します。

<目的> 目的は、EAST 出荷地域に対する XML 型の ShipRegion 文字列へのアクセスを Igor という名前の特定のトラフィック モニタに制限することです。

以下の節では、必要な手順について説明します。

必要なセキュリティ リソースを作成する

  1. データ サービスを開きます。
  2. プロパティ エディタを開きます。
  3. [セキュリティ リソース] 行にある + 記号をクリックして、セキュリティ リソースを作成します。 任意の値 (名前) をセキュリティ リソースに割り当てることができます。 この場合は、XML 型の要素の名前を使用します。
  4. 図 4-24 セキュリティ リソースの作成


    セキュリティ リソースの作成

    このアクションによって、ソース ビューのデータ サービス プラグマに新しいセキュリティ リソース (下の強調箇所) が追加されます。

    (::pragma  xds <x:xds targetType="ship:ShipSource" xmlns:ship="http://Logical/ShipSource" xmlns:x="urn:annotations.ld.bea.com">
    <creationDate>2005-11-01T15:50:28</creationDate>
    <userDefinedView/>
    <secureResources>
    <secureResource>shipregion</secureResource>
    </secureResources>
    </x:xds>
    ::)

セキュリティ リソース検証をサポートするようにクエリを構築する

この節では、XQuery エディタを使用して、新しく作成されたセキュリティ リソースを EAST グループの ShipRegion 要素にアタッチします。

  1. [XQuery エディタ ビュー] タブをクリックします。
  2. 戻り値型で、セキュリティ リソースを EAST グループの ShipRegion 要素にアタッチします。 これを行うには、セキュリティ リソースをアタッチする要素を右クリックしてから [条件の作成] オプションを選択します。
  3. 図 4-25 EAST グループの ShipRegion 文字列に対する If-Else 構文の作成
  4. 新しい条件要素を、組み込みの fn-bea:is-access-allowed() 関数に関連付けます。これを行うには、要素をクリックし、関数を式エディタにドラッグします。 この関数は 2 つのパラメータを取ります。文字列とデータ サービスの名前です。 この場合、文字列はセキュリティ リソース名と同じにします。
  5. 注意 : 組み込みの BEA 関数の詳細については、AquaLogic Data Services Platform の『XQuery 開発者ガイド』を参照してください。 式の編集の詳細については、「XQuery 関数を使用してデータを変換する」を参照してください。
  6. 適切な文字列を入力するか、または要素を関数のプレースホルダにドラッグして、関数のパラメータを入力します。
  7. 図 4-26 EAST グループの ShipRegion 要素に対するセキュリティ制御の設定


    EAST グループの ShipRegion 要素に対するセキュリティ制御の設定

  8. If-Else 構文は、「要素へのアクセスが許可されている場合にはデータを返し、それ以外の場合は何も返さない」というように読み込まれるようになりました。 ほとんどの場合では、アクセスが許可されていないことを返すのが適切です。 そのためには、条件の Else 側に関連付けられる式を「N/A」(使用不可) に設定します。
  9. ソース ビューでは、条件は XQuery if-else 文として表示されます。

    if (fn:upper-case($SourceRegion) eq 'EAST') then 
    (
    for $ShipSource1 in ns10:getShipSource1()/SHIPPING
    where $ShipSource1/ShipSource eq $SourceState
    and $ShipSource1/ShipDest eq $DestState
    return
    <SHIPPING DataLineage?="{'EAST Shipping Source'}">

    ...
           <ShipPrice>{fn:data($ShipSource1/ShipPrice)}</ShipPrice>
    {
    if (fn-bea:is-access-allowed("shipregion", "ld:DataServices/Demo/Java/Logical/Shipping")) then
    <ShipRegion>{fn:data($ShipSource1/ShipRegion)}</ShipRegion>
    else
    <ShipRegion>{"N/A"}</ShipRegion>
    }
    <ShipTime>{fn:data($ShipSource1/ShipTime)}</ShipTime>
    </SHIPPING>
  10. プロジェクトをビルドします。 これにより、新しいセキュリティ設定がサーバにデプロイされます。

AquaLogic Data Services Platform Console からセキュリティ リソースを割り当てる

次の手順では、AquaLogic Data Services Platform Console が必要になります。詳細については、AquaLogic Data Services Platform の『管理ガイド』にある「Data Services Platform リソースの保護」を参照してください。

  1. AquaLogic Data Services Platform Console にサインインします。 RTLApp サンプルのユーザ名とパスワードは、どちらも weblogic です。
  2. 注意 : weblogic ユーザ、または weblogic ユーザがそのメンバーであるグループに対して、保護されたリソースが使用可能であるとマークされていない限り、リソースは使用できません。
  3. 「メタデータの検索」という見出しを見つけて、[検索 ldplatform] (ldplatform は RTLApp サンプル ドメイン) をクリックします。
  4. データ サービス名のフィールドで「shipping」を検索します。
  5. [検索結果] ページで [Shipping.ds] 名前リンクをクリックします。このデータ サービスに対して使用可能なさまざまなオプション (管理、キャッシング、監査、メタデータの検索、セキュリティに関するオプション) が表示されます。
  6. [セキュリティ] タブをクリックします。
  7. 図 4-27 RTLApp の Shipping データ サービスに関連付けられたセキュリティ ポリシー


    RTLApp の Shipping データ サービスに関連付けられたセキュリティ ポリシー

  8. データ サービスに対して作成した shipregion というセキュリティ リソースが使用可能なリソース名として表示されます。 ここで、リソースにセキュリティ ポリシーを関連付ける必要があります。 [アクセス ポリシー] アイコンをクリックします。
  9. [ポリシー条件] ペインで、[呼び出し側のユーザ名] ポリシー条件を選択し、[追加] をクリックします。
  10. ユーザの名前を入力できるダイアログ ボックスが表示されます。
  11. 図 4-28 ユーザ名のセキュリティ リソースへの関連付け


    ユーザ名のセキュリティ リソースへの関連付け

  12. [適用] をクリックします。

テスト ビューからセキュリティ ポリシーを検証する

セキュリティ ポリシーを設定したら、それをテストする必要があります。

  1. Shipping データ サービスを選択した状態で、[テスト ビュー] タブをクリックします。
  2. getShippingSource() 関数では、出荷元の州と出荷先の州が必要になります (有効な州は、Demo/Java/Logical フォルダにある Examples.txt ソース ファイルに示されています)。
  3. 出荷元の州として MA を、出荷先の州として VA を入力し、[実行] をクリックします。
  4. 図 4-29 ShipRegion 要素が保護されていることの確認


    ShipRegion 要素が保護されていることの確認

  5. 地域が返される代わりに、Else 文字列 N/A が返されていることに注目してください。 これは、テスト ビューの登録ユーザが weblogic ユーザであり、Igor ユーザではないからです。

関数のキャッシング

データ サービス内の各関数に対して、[データ キャッシュの許可] オプションを true または false に設定できます。 false の場合、実行中のクエリ関数による結果はキャッシュされません。 true の場合、その関数のキャッシュが AquaLogic Data Services Platform Console で有効にされていれば、その関数の以前の呼び出しによる結果がキャッシュされます。 つまり、関数のキャッシングを行うには、データ サービス内で有効に ([データ キャッシュの許可] を true に設定) し、さらに AquaLogic Data Services Platform Console でも有効にしなければなりません。 関数のキャッシュの有効化とキャッシュの TTL (生存時間) の設定については、AquaLogic Data Services Platform の『管理ガイド』を参照してください。

キャッシングに関する考慮事項

特定の関数に対してキャッシングを有効にするかどうかを検討するときに注意すべき点を、以下に示します。

関数に対するキャッシング ポリシーを設定する

データ サービス内の特定の読み取り関数に対して許可されたキャッシング ポリシーを確認または設定するには、関数名の左にある矢印をクリックして、プロパティ エディタでキャッシング ポリシーを設定します。

図 4-30 キャッシング ポリシーの確認または設定 (関数名の左にある矢印をクリックする)

キャッシング ポリシーの確認または設定 (関数名の左にある矢印をクリックする)

キャッシング ポリシーの変更を有効にするには、アプリケーションをビルドする必要があります。

注意 : 関数に対して [データ キャッシュの許可] のキャッシング ポリシーが false に設定されている場合に、AquaLogic Data Services Platform Console を使用してその設定をオーバーライドすることはできません。

主なデザイン ビューのプロパティ

次の表 4-31 に、AquaLogic Data Services Platform の主なデザイン ビューのプロパティを示します。

表 4-31 主なデザイン ビューのプロパティ
対象
プロパティ
設定
コメント
データ サービス
[名前]
編集可能
最後に .ds を付けなければならない。
 
[説明]
テキスト
省略可能。
 
[作成者]
テキスト
省略可能。
 
[作成日]
編集不能
 
 
[タイプ]
省略可能な XML 型への URI
XML 型とも呼ばれる。
 
[データ サービスの更新 :更新の許可]
true/false
呼び出し側のアプリケーションでデータ サービスの更新ロジックを実行することを許可する。
 
[データ サービスの更新 : 分解関数]
複数の読み込み関数を持つ論理データ サービスに対して選択可能 (デフォルトでは、最上位の読み取り関数が分解関数になる)
データ サービスの分解に使用される関数を指定する。 物理データ サービスの場合、分解関数はソース メタデータによってあらかじめ定義されている。
ただし、論理データ サービスの場合、デフォルトの分解関数をデータ サービス内の別の読み取り関数に変更できる。
分解関数に関する重要な情報については、以下を参照。
 
[データ サービスの更新 : 更新オーバーライド クラス]
省略可能および編集可能
カスタム更新ロジックを提供する外部の Java クラスを指定する。
 
[オプティミスティック ロック フィールド]
[PROJECTED]/[UPDATED]/[SELECTED FIELDS]
リレーショナルベースのデータ サービスのみに適用される。
 
[セキュリティ リソース]
任意の数の名前と値のペア
 
[プレフィックス バインディング]
データ サービス内に定義されたネームスペースに対して入力できる、任意の有効で衝突しないプレフィックス
 
[ユーザ定義のプロパティ]
省略可能および編集可能
任意の数の名前と値のペアを作成する。
データ サービスの読み取り関数、プライベート関数、およびプロシージャ
[名前]
編集可能
 
 
[関数の種類]
選択可能 ([読み込み] または [プライベート])
読み取り関数またはプライベート関数に対して選択可能である (プロシージャでは選択できない)。
 
[データ キャッシュの許可]
true/false
関数のキャッシュを有効にする。
 
[ユーザ定義のプロパティ]
省略可能および編集可能
任意の数の名前と値のペアを作成する。
XML 型
[ルート : 名前]
編集可能
通常は、ファイル拡張子を除いたデータ サービス名と同じ名前になる。
 
[ルート : 参照されています]
false
読み込み専用。 ルート要素の場合、常にスキーマのグローバル要素になるので、[参照されています] プロパティは常に false になる。
 
[ルート : タイプ]
<空白> または指定された型
ルート要素が匿名型の場合は空白になり、それ以外の場合は指定された型が表示される。
 
[要素 : 参照されています]
true/false
読み込み専用。 現在の関数にインポートされる、すべての要素を識別する。 ソースでは、ref="element" のように表示される。
 
[要素 : タイプ]
XML 型
xs:int、retailer: CUSTOMER_VIEW など。
 
[要素 : 最小発生数]
1、0、または n
 
 
[要素 : 最大発生数]
1、0、または n
 
 
[要素 : ネイティブ タイプ]
データ型
物理データに対してのみ使用できる (例 : VARCHAR)。
 
[要素 : ネイティブ サイズ]
データのサイズ
物理データに対してのみ使用できる (例 : 10)。
 
[主キー : 自動番号]
<空白>、[ID]、[シーケンス]、または [userComputed]
このオプションと [シーケンス オブジェクト名] オプションは、リレーショナルベースの物理データ サービスの主キーを表す要素に対して表示される。
[自動番号] は、データベースの主キーに値を指定するために使用される。
  • フィールドが空白のままになっている場合は、主キーに値を指定できる。
  • [ID] オプションは、IBM DB2、Sybase、SQL Server、および MySQL に関連する。 この場合、データベースによって主キーに値が指定される。
  • シーケンス オブジェクトは、DB2 および Oracle に対して使用可能。 シーケンス オブジェクト名を指定する必要がある。
  • [userComputed] は、SDO カスタム更新オーバーライド クラスを介して主キー情報がデータベースに指定されていることを示す表記フラグ。

注意 : 更新オーバーライドが計算される主キー ロジックが使用される場合は、このフラグを使用する必要はない。

 
[主キー : シーケンス オブジェクト名]
 
上記の [自動番号] プロパティで [シーケンス] が選択されている場合は、シーケンス オブジェクト名を指定する必要がある。
関連するデータ サービス
[ロール名]
編集可能
モデル ダイアグラムに表示されているロール名も変更する。
 
[関連データ サービス]
関連するデータ サービスへのパス
 
 
[Min-occurs]
1、0、または n
 
 
[Max-occurs]
1、0、または n
 
 
[逆ロール名]
編集可能
モデル ダイアグラムに表示されているロール名も変更する。
関係読み取り関数
[名前]
編集可能
 
 
[データ キャッシュの許可]
true/false
関数のキャッシュを有効にする。
 
[関数の種類]
編集不能
常に [ナビゲーション] になる。
 
[ユーザ定義のプロパティ]
編集可能
任意の数の名前と値のペアを作成する。
XML ファイル ライブラリ (XFL)
[名前]
編集可能
最後に .xfl を付けなければならない。
 
[プレフィックス バインディング]
データ サービス内に定義されたネームスペースに対して入力できる、任意の有効で衝突しないプレフィックス
 
[登録済みデータベース関数のデータ ソース]
データベース XFL に関連付けられたデータ ソース
データベース XFL 関数
[カタログ]
編集可能および省略可能
JDBC ドライバがデフォルトのカタログ名であらかじめコンフィグレーションされている場合は、省略可能。
 
[スキーマ]
編集可能および省略可能
JDBC ドライバがデフォルトのカタログ名およびスキーマ名であらかじめコンフィグレーションされている場合は、省略可能。
 
[パッケージ]
編集可能および省略可能
JDBC ドライバがデフォルトのカタログ名、スキーマ名、およびパッケージ名であらかじめコンフィグレーションされている場合は、省略可能。
 
[関数名]
編集可能
データベース関数名を指定する必須のフィールド。
 
[データ キャッシュの許可]
true/false
関数のキャッシュを有効にする。

 


SQL で使用するためのデータ サービス関数のパブリッシュ

XQuery でモデル化されるデータ ソースは、以下の条件を満たした SQL クエリで使用できるリレーショナル データ ソースとしてエクスポーズできます。

このような関数は、リレーショナル対応 XQuery 関数と考えることができます。 こうした関数は、シグネチャに応じて、SQL テーブル、ストアド プロシージャ、またはデータベース関数として使用するためにパブリッシュできます。 関数と SQL オブジェクトの間の関連付けは、設計時に定義されます。

SQL アクセス用にパブリッシュ可能なアーティファクトのタイプは、以下のとおりです。

表 4-32 に、データ サービス アーティファクトと SQL オブジェクトの間の互換性一覧を示します。

表 4-32 AquaLogic Data Services Platform の関数タイプとそれらに対応する SQL オブジェクト
関数のタイプ
テーブル
ストアド プロシージャ
関数
読み取り関数
不可
ナビゲーション関数
不可
プロシージャ
不可
不可
標準 XFL 関数
不可
不可
不可
プライベート関数
不可
不可
不可
データベース関数ライブラリの関数
不可
不可

注意 : 読み取り関数、ナビゲーション関数、およびプロシージャの詳細については「データ サービス」を参照し、XFL 関数の詳細については「XQuery 関数ライブラリの作成および使用」を参照してください。

データ サービス オブジェクトを SQL で使用できるようにする方法

AquaLogic Data Services Platform 対応プロジェクトに関連付けられたウィザード (図 4-33) を使用して、データ サービス関数を SQL で使用可能にすることができます。 ウィザードの左側には、プロジェクト内のすべてのデータ サービス関数が表示されます。 パブリッシュできない関数はグレー表示されます。

ウィザードの右側には最初、SQL オブジェクトのタイプ名が含まれた、名前の変更が可能なスキーマのみが表示されます (図 4-33)。

SQL オブジェクトとしてパブリッシュできないと表示される関数は、以下のような規則に従って決められます。

注意 : ウィザードでは、AquaLogic Data Services Platform プロジェクトと同じカタログ名で任意の数のスキーマを作成できます。 スキーマの名前変更、追加、または削除を行うには、右クリック メニューを使用します。 詳細については、「データ サービス関数のパブリッシュの例」を参照してください。

データ サービス関数のパブリッシュの例

この節では、SQL で使用するためにデータ サービスをパブリッシュするために必要な手順について説明します。

  1. WebLogic Workshop のプロジェクト フォルダを右クリックし、[SQL 使用のためのデータ サービスのパブリッシュ] オプションを選択します (図 2-5 を参照)。 自動的にウィザードが開き、パブリッシュする仮想データベース内のカタログとしてプロジェクトが関連付けられます。
  2. 注意 : 選択しているプロジェクトで以前にデータ サービス アーティファクトと SQL オブジェクトの間のマッピングを作成した場合には、そのマッピングが表示されます。 それ以外の場合は、SQL オブジェクトへのマッピングのないウィザードが表示されます (図 4-33)。
    図 4-33 SQL で使用するためにパブリッシュ可能な RTLAPP データ サービス


    SQL で使用するためにパブリッシュ可能な RTLAPP データ サービス

  3. [SQL オブジェクト] カラムの NewSchema というスキーマ名は、右クリックすることで必要に応じて変更できます。
  4. 図 4-34 仮想データベース カタログへのスキーマの追加


    仮想データベース カタログへのスキーマの追加

  5. SQL で使用するためにパブリッシュするデータ サービス関数を選択します。 任意のデータ サービスを個別に展開することもできますし、プロジェクト名を右クリックしてすべて展開することもできます。 フォルダを選択すると、ウィザードは、そのフォルダに含まれているすべての関数を、選択された SQL オブジェクトのタイプにマップしようとします。
ヒント : 関数またはフォルダを、選択された SQL オブジェクトのタイプにドラッグ アンド ドロップすることもできます。
図 4-35 データ サービス関数の展開されたリスト

データ サービス関数の展開されたリスト

図 4-35 では、一部の関数がグレー表示され、SQL オブジェクトとしてのパブリッシュに使用できなくなっています。 そうした関数をマップしようとすると、その関数をマップできない理由を示すアラート ダイアログが表示されます。 関数をマップできない理由が複数ある場合でも、表示される理由はひとつだけです。

  1. スキーマを選択し (複数ある場合)、マップする SQL オブジェクトのタイプを選択します。 すでに説明したように、パラメータなしの関数はテーブルまたはストアド プロシージャとしてマップできます。 パラメータを持つ関数は、ストアド プロシージャとしてマップする必要があります。 関数ライブラリを使用して定義されたスカラー関数は、SQL オブジェクト関数としてのみマップできます。
  2. 注意 : パラメータを持たない関数をストアド プロシージャ オブジェクトとしてマップする理由は何でしょうか。 JDBC 側では、テーブル、ストアド プロシージャ、および関数に対して使用される API がそれぞれ異なります。 場合によっては、パラメータなしの関数をストアド プロシージャとして呼び出すほうが便利なこともあります。
  3. [追加] ボタンを使用して、パブリッシュする関数を、選択した SQL オブジェクトにマップします。 マップされると、関数は太字の斜体で表示されます (図 4-36)。 各スキーマ内の SQL オブジェクトのタイプに関連付けられたフォルダには、そこに含まれているオブジェクトの数が表示されます。
  4. 注意 : 同じデータ サービス関数を複数のスキーマにマップできます。 ただし、1 つの関数を複数の SQL オブジェクトのタイプにマップするときには、アラート ダイアログが表示されます。
    図 4-36 SQL で使用するために選択されたデータ サービス


    SQL で使用するために選択されたデータ サービス

  5. ウィザードのアラート ページ (図 4-37) で、必要に応じてマップされた名前を編集します。
ヒント : [SQL オブジェクト] 領域では、同じまたは異なるスキーマにあるテーブル、ストアド プロシージャ、および関数のフォルダ間で、パブリッシュされる関数をドラッグ アンド ドロップすることもできます。 この操作は、関数がパブリッシュの要件を満たしてさえいれば可能です。 詳細については、「データ サービス オブジェクトの SQL へのパブリッシュに関する制約」を参照してください。

データ サービス関数のパブリッシュに関するアラート ダイアログ

関数を SQL オブジェクトにマップし、仮想データベース カタログを保存しようとすると、アラート ダイアログが表示されることがあります。 このダイアログには、マッピングに関連した警告やエラーがある場合に、それらの要約が包括的に示されます。

図 4-37 SQL 使用のためのデータ サービスのパブリッシュに関するアラート ダイアログ

SQL 使用のためのデータ サービスのパブリッシュに関するアラート ダイアログ

アラート ダイアログが表示されるのは、以下の場合です。

  1. 仮想データベースを保存する準備ができたら [保存] をクリックします。[取り消し] をクリックすると、作成済みのマッピングがある場合は最後に作成したバージョンに戻ります。 パブリッシュされた SQL オブジェクトは、アプリケーションの再デプロイ後に JDBC を使用してテストできます。

データ サービス オブジェクトの SQL へのパブリッシュに関する制約

データ サービス オブジェクトの SQL へのパブリッシュには、セマンティクスおよび構造に関する複数の制約があります。

セマンティクスに関する制約は、プライベート関数など、オブジェクトの一般的なタイプに対するものです。 表 4-32 に、パブリッシュ可能な AquaLogic Data Services Platform オブジェクトのタイプと、それらに対応する SQL オブジェクトのタイプの一覧が示されています。

データ サービス アーティファクトの SQL へのパブリッシュには、構造に関する制約もあります。 表 4-38 に、さまざまな一般的な制限事項を示します。

表 4-38 データ サービス アーティファクトを SQL にパブリッシュする場合の一般的および具体的な制限事項
制限事項
説明
すべての SQL オブジェクトに影響する制限事項
ここに挙げる制限事項は、すべてのタイプの SQL オブジェクトへのパブリッシュに影響する。
  • 単純でもない要素でもない型を参照する関数
こうした型の例には、項目、ノード、属性などがある。
  • 対応する SQL 型がない単純型を持つ関数
XQuery 側の単純型は、JDBC をサポートする SQL 型に対応している必要がある。
  • 匿名の要素型を含んだ関数
名前が定義されていない要素を含んだ関数はマップできない。
  • 再帰的な XML 型を含んだ関数
型 Person <Person> のアクセス。
  • ワイルドカードを含んだコンテンツ モデルを持つ XML 型
XML ワイルドカードは以下のとおり。
  • xs:any
  • xs:anyAttribute
  • 複合コンテンツを持つ XML 型
複合コンテンツを含んだドキュメントの例 :

<a>
<child/>
this is simply text
<child/>
</a>
SQL テーブルとしてのパブリッシュに影響する制限事項
ここに挙げる制限事項は、SQL テーブルとしてのパブリッシュに影響する。
  • パラメータを持つ関数
パラメータを持つ関数は、ストアド プロシージャとしてマップできる。
  • 単純な戻り値型を含んだ関数
単純な戻り値型を含んだ関数は、SQL 関数としてマップできる。
  • 非テーブル形式の要素型を含んだ関数
  • ManyAtomicType 型を持つ関数
ストアド プロシージャにも適用される。
ストアド プロシージャとしてのパブリッシュに影響する制限事項
ここに挙げる制限事項は、ストアド プロシージャとしてのパブリッシュに影響する。
  • シーケンスの単純な戻り値型を含んだ関数
関数宣言はパブリッシュできない。 次に例を示す。
declare function f($p as xs:string*) as xs:int
  • 匿名の要素型を持つ関数
名前のない要素はマップできない。 次に例を示す。
declare function f() as element()
  • anyAtomicType 型を持つ関数
テーブルにも適用される。
  • 非テーブル形式の要素型を持つ関数
SQL 関数としてのパブリッシュに影響する制限事項
ここに挙げる制限事項は、SQL 関数としてのパブリッシュに影響する。
  • シーケンスのパラメータ型と 1 より大きいアリティを持つ関数
次の例では、xs:int* がシーケンスのパラメータ型として示されている。
declare function f($p as xs:int*,
$q as xs:string) as xs:int
  • 要素型を持つ関数
declare function f ($p as element(e)) as xs:int

関数を SQL オブジェクトとしてパブリッシュする機能に非テーブル形式の要素型が与える影響

データ サービス関数の構造によって、その関数を SQL オブジェクトにマップできるかどうかが決まります。 たとえば、パラメータ化された関数は SQL テーブルとしてパブリッシュできません。定義上、SQL テーブルはパラメータを取らないからです。 構造に関する制約の中には、実質的に自明なものもあれば、分かりにくいものもあります。

ヒント : 特定の関数が特定のタイプの SQL オブジェクトにパブリッシュできるかどうかを簡単に判断するには、関数を SQL オブジェクトのテーブル、ストアド プロシージャ、または関数のフォルダにドラッグします。 関数がグレー表示されている (つまり、どのタイプの SQL オブジェクトにもパブリッシュできない) 場合でも、選択されたオブジェクトをパブリッシュできない理由を示すアラート ダイアログ (図 4-37) が表示されます。

たとえば、XML の出力構造は標準化された SQL テーブルにマップできないため、非テーブル形式の要素型を持つ関数はテーブルとしてもストアド プロシージャとしてもパブリッシュできません。

基底の各データ サービスは、XML 型 (スキーマ) です。 一部の XML 型は、SQL テーブルのように 2 次元であるため、JDBC で使用するために即座にマップできます。

<CUSTOMER>
<FIRST_NAME>
<LAST_NAME>
<CUSTOMER_ID>
</CUSTOMER>

SQL としてパブリッシュされると、テーブル構造は表 4-39 のように対応します。

表 4-39 顧客テーブル
first_name
last_name
customer_id
Jack
Black
CUSTOMER1

オブジェクト マッパーが XML ドキュメントの構造を 1 ランクにまで引き下げることができれば、マッピングは可能になります。 次に例を示します。

<CUSTOMER>	
<FIRST_NAME>
<LAST_NAME>
<CUSTOMER_NUMBER>
<CUSTOMER_ORDER>
<ORDER_ID>
<C_ID>
<ORDER_DT>
</CUSTOMER_ORDER>
</CUSTOMER>

上記の構造は、顧客に関連付けられた顧客注文が 1 つ以下である限り、次の形式でテーブルとしてパブリッシュできます。

表 4-40 顧客注文テーブル
first_name
last_name
customer_id
order_id
c_id
order_dt
Jack
Black
CUSTOMER1
ORDER_1_0
CUSTOMER1
2001-10-01

ただし、CUSTOMER_ORDER 型がバインドされていない (つまり、1 人の顧客に関連付けられた複数の注文が表される可能性がある) 場合には、構造は整形式のリレーショナル テーブルに対応しなくなり、マッピングは許可されません。

注意 : WebLogic Workshop では、バインドされない型は戻り値型のゾーンで作成され、ゾーン単位で識別されます。 「戻り値型にゾーンを設定する」を参照してください。

上記の例では、関数は、複数の注文が 1 人の顧客に関連付けられているため (リレーショナル用語の「マスター/詳細」)、最初はマップできません。 しかし、CUSTOMER_ORDER に関連付けられたゾーンが削除されると、関数はマップできるようになり、結果として生成されるテーブルは表 4-40 で示されているテーブルのようになります。

  ページの先頭       前  次