![]() ![]() ![]() ![]() |
BEA AquaLogic Data Services Platform (ALDSP) では、データ クライアント アプリケーション プログラミング モデルとしてサービス データ オブジェクト (SDO) が実装されています。この章では、ALDSP クライアント アプリケーション開発者に役に立つ SDO コンセプトおよび API について説明します。
SDO は、ソースと非接続型のデータ オブジェクトを操作するためのアーキテクチャおよび API のセットです。ALDSP では、SDO 準拠のデータ オブジェクトは、型付きデータ オブジェクトであるか、型なしデータ オブジェクトであるかにかかわらず、Mediator API またはデータ サービス コントロールを介してデータ サービスから取得されます。(「サービス データ オブジェクト (SDO) について」を参照してください。)
クライアント アプリケーションでは、必要に応じてビジネス プロセスのデータ オブジェクトが操作されると、基底のデータ ソースに伝播するために、変更されたオブジェクトがデータ サービスに送信されます。SDO 仕様では、データ オブジェクトを送受信できる Mediator サービス定義について定義されていませんが、一般的な必要性について説明しています。また、この仕様では、実装を指定せずに、データ ソースに対する更新を処理する必要性についても説明されています。SDO 仕様では、Mediator サービスの実装方法および Mediator サービスによるデータ オブジェクトの更新処理方法に関して、その詳細を開発者に委ねています。
「Data Service Mediator API について」で説明されるように、ALDSP の Data Service Mediator は、クライアント アプリケーションとデータ サービスとの間での送受信を処理するだけでなく、あらゆるデータ サービスを構成するさまざまなデータ ソースの更新を円滑化します。
この章では、SDO データ プログラミング モデルの ALDSP の実装と、その更新フレームワークに関する情報を説明されます。
Data Service Mediator API を通じてデータ サービスの読み込みオペレーションを呼び出す場合は、データ オブジェクトが返されます。データ オブジェクトは、SDO データ プログラミング モデルの基本アーティファクトです。
ヒント : | Mediator API の詳細については、「Java クライアントからのデータ サービスの呼び出し」を参照してください。 |
データ オブジェクトは複合型の内容を表します。データ オブジェクトには、プロパティが含まれています。このプロパティは、要素と属性を表します。プロパティは単純型または複合型のどちらかです。SDO では、単純型のプロパティはデータ型プロパティと呼ばれ、複合型のプロパティには、データ オブジェクト (これにもプロパティがある) が入っています。
変更サマリという特別なプロパティを含むように、データ オブジェクトを定義できます。データ オブジェクトの変更を追跡するには、変更サマリが使用されます。プロパティ (またはネストされた子孫データ オブジェクトのプロパティ) を変更すると、その変更が変更サマリに取り込まれます。
変更サマリは Mediator により使用され、それによって更新プランが派生し、最終的にデータ ソースが更新されます。更新関数が成功したかどうかにかかわらず、変更済みの各 SDO とともに送信された変更サマリはそのまま残るため、必要に応じてロールバックをサポートできます。
データグラフは、組み込みデータ オブジェクト型であり、変更サマリのプロパティを持つために定義されます。これにより、変更追跡をカプセル化するにはデータグラフは便利です。データグラフには、直接のデータ オブジェクトの子が 1 つとこのデータ オブジェクトの変更を追跡する変更サマリが 1 つあります。図 2-1 では、データグラフの構造を示します。
SDO は、データ オブジェクトの静的 (型付き) および動的 (型なし) インタフェースの両方が指定されます。
get("Customer")
または set("Customer")
。
動的データ オブジェクト API は、開発時にデプロイされていなかったデータ型と共に使用することができます。
表 2-2 では、各アプローチの利点の概要を示しています。
SDO の静的データ オブジェクト API は、データ サービスの XML スキーマ定義から生成される型付き Java インタフェースです。このインタフェースは JAXB または XMLBean の静的インタフェースと似ています。JAR にパッケージ化されているインタフェース ファイルは、通常、データ サービスの開発者によって生成されます。
生成されたインタフェースでは、commonj.sdo.DataObject インタフェースが拡張され、XML データ型付きのすべてのプロパティに対して型付きゲッターおよびセッターが提供されます。
また、インタフェースが各複合プロパティに対して生成されます。(たとえば、図 2-3 に示される CREDIT および ORDER など)。生成には複合型を構成するそれぞれのプロパティのゲッターおよびセッターが使用されます。
多数の値を持つプロパティの場合、java.util.List オブジェクトを返す get メソッドが生成されます。多数の値を持つプロパティは 1 より大きな maxOccurs を持つ XML スキーマ要素に対応します。多数の値を持つプロパティの get メソッドで返されたリストは「live」です。これは、List オブジェクトを変更すると、その変更がすぐに含まれているデータ オブジェクトに反映されると意味します。
静的データ オブジェクト API の生成方法の例として、図 2-3 には、CUSTOMER データ型を指定しています。この例では、型付きクライアント インタフェースの結果は、CUSTOMER、CREDIT、ORDER、および POITEM インタフェースに生成されます。各インタフェースには、ゲッター、セッター、ファクトリ クラスが入っています。(静的データ オブジェクトおよびそのプロパティをインスタンス化するために)。
SDO の静的データ オブジェクト API を使用する Java クライアント アプリケーションを開発するときは、これらの型付きインタフェースを Java クライアント コードにインポートします。たとえば、
import appDataServices.AddressDocument;
表 2-4 では、静的データ アクセッサおよび関連する API メソッドが表示されています。これらのメソッドが、名前の最初の文字が大文字に設定されたスキーマ名と一致する名前で生成されます。生成された名前と標準 Java 命名ルールとの衝突は回避しなければいけません。
ALDSP クライアント アプリケーション開発者は、Data Services Platform Console を使用して、データ サービスと関連する XML スキーマ型を表示することができます。(「図 2-3、DSP コンソール メタデータ ブラウザに表示されている CUSTOMER 戻り値の型」を参照してください)。[戻り値の型] タブには、各要素のデータ型が示されます。たとえば、string、int、または complex type などです。XML スキーマ データ型は、表 2-5 に示すデータ型マッピングによって対応する Java 型にマップされます。
各静的 (型付き) データ オブジェクトはデータ オブジェクト インタフェースを実装します。そのため、DataObject (動的) メソッドも静的 API も使用できます。この API には、特定の Java データ型 (たとえば、String、Date、List、BigInteger、および BigDecimal など) のために汎用プロパティのゲッターおよびセッターが用意されています。表 2-6 では、SDO の動的データ オブジェクト API からの代表的な API を示します。propertyName 引数は、取得したり設定する値のプロパティ名を示しています。propertyValue は新しい値です。動的データ オブジェクト API は、indexValue により DataObject のプロパティを設定および取得するメソッドを含めます。これは、setInt( )、setDate( )、getString( )、などのプリミティブ型としてプロパティを取得するおよび設定するメソッドです。
たとえば、CUSTOMER データ オブジェクトの参照があるとすれば、動的データ オブジェクト API を使用して以下のような LAST_NAME プロパティを取得できます。
String lastName = customer.getString("LAST_NAME");
SDO API は標準の実装です。完全な SDO 仕様「Java 仕様 V2.1 の SDO」は以下で入手可能です。
dev2dev で「Service Data Objects」も参照してください。
表 2-6 に、動的データ オブジェクト API ゲッターおよびセッターを示します。
ALDSP は、SDO パス式という XPath 式の限定されたサブセットをサポートします。SDO パス式によって、動的 データ オブジェクト API アクセサ内のデータ オブジェクトおよび属性を検索する方法に柔軟性がもたらされます。たとえば、データ要素および値に基づいて get( ) メソッドの呼び出し結果をフィルタできます。
company.get("CUSTOMER[1]/POITEMS/ORDER[ORDERID=3546353]")
SDO パス実装は、ゼロベースの配列インデックス表記 (".index_from_0") を XPath の標準カッコ付き表記 ([n]) に追加することで、XPath 1.0 サポートより増強されたものになります。例として、表 2-7 では、XPath 標準表記と SDO 拡張表記を比較し、同じ要素である CUSTOER の下の最初の ORDER 子ノード (表 2-7) を参照しています。
ゼロベースのインデックスは、ゼロベースのカウンタに慣れている Java プログラマにとっては便利なものであり、1 を追加せずにインデックス値としてカウンタ値を使用することもできます。
ADSP は、従来のインデックス表記と拡張表記の両方を完全にサポートしています。
ALDSP の XPath サポートに関する以下に挙げる点についても注意してください。
("CUSTOMER//POITEM")
この例では、ワイルドカードが、以下のいずれかを含む CUSTOMER ルートより下のすべての注文書配列と一致します。
CUSTOMER/ORDERS/POITEM
CUSTOMER/RETURNS/POITEM
この表記では型に曖昧な点が生じるため (型は ORDERS または RETURNS のいずれか)、ALDSP SDO の実装ではサポートされていません。
<ORDER ID="3434">
「引数として XPath 式の指定」も参照してください。
動的データ オブジェクト API では、汎用的なデータ オブジェクトが返されます。データ オブジェクトのプロパティに関する情報を入手するには、SDO の Type インタフェースで使用可能なメソッドを使用します。(commonj.sdo
パッケージ中にある) Type インタフェースには複数のメソッドが用意されており、データ オブジェクトの型、プロパティ、それぞれの型など、データ オブジェクトに関する情報を実行時に取得できます。
SDO 仕様による、Type インタフェース (表 2-8 を参照) および Property インタフェース (表 2-9 を参照) は、データ オブジェクトのモデルの内部検査に使用される最小のメタデータ API を構成します。たとえば、以下ではデータ オブジェクトの型を取得し、プロパティの値を出力します。
DataObject o = ...;Type type = o.getType();
System.out.println(o.getString("CUSTOMERNAME")); }
if (type.getName().equals("CUSTOMER") {
オブジェクトのデータ型を入手すると、(リストとして) すべてのプロパティを取得し、コード リスト 2-1 で示すように、Type インタフェースの get Properties( ) メソッドを使用してプロパティの値にアクセスできます。
public void printDataObject(DataObject dataObject, int indent) {
Type type = dataObject.getType();
List properties = type.getProperties();
for (int p=0, size=properties.size(); p < size; p++) {
if (dataObject.isSet(p)) {
Property property = (Property) properties.get(p);
// 多数の値を持つプロパティの場合、値のリストを処理する。
if (property.isMany()) {
List values = dataObject.getList(p);
for (int v=0; count=values.size(); v < count; v++) {
printValue(values.get(v), property, indent);
}
else { // 単一の値を持つプロパティの場合、値を出力する。
printValue(dataObject.get(p), property, indent);
}
}
}
}
表 2-8 に、Type インタフェースでのその他の有効なメソッドが表示されます。
表 2-9 に、Property インタフェースのメソッドを示します。
ALDSP では、データ サービスとクライアント アプリケーションとの間でデータ オブジェクトが渡されます。たとえば、クライアント アプリケーションがデータ サービスで読み込み関数を呼び出すと、データ オブジェクトがクライアント アプリケーションに送信されます。クライアント アプリケーションにより (たとえば注文書に注文が追加されるなど) 適宜コンテンツが変更され、変更されたデータ オブジェクトがデータ サービスに送られます。Data Service Mediator とは、更新されたデータ オブジェクトを受信し、変更を基底のデータ ソースに伝播する API のことです。
Data Service Mediator とは更新プロセスの基軸です。他のアーティファクトとともに送信されたデータ オブジェクト (たとえば、変更サマリなど) からの情報を使用して、基底のデータ ソースを変更する更新プランを派生します。関連するデータ ソースに対して、更新は自動的に行われます。Mediator などの DSP の更新フレームワークを構成するアーティファクトおよびデフォルト プロセスが機能する方法については、『データ サービス開発者ガイド』の「更新マップの管理」章で説明しています。
Web サービス クライアントおよび Java クライアントの Mediator API の使い方の詳細については、以下を参照してください。
![]() ![]() ![]() |