Oracle® Fusion Middleware

Oracle TopLink Database Webサービスによる永続性アーキテクチャの開発

12c (12.1.3)

E57541-01(原本部品番号:E49895-01)

2014年5月

このドキュメントでは、Oracle TopLinkとEclipseLink DBWS (データベースWebサービス)を使用して永続的なフレームワークを実現する方法を記載しています。

Oracle Fusion Middleware Developing Persistence Architectures Using Oracle TopLink Database Web Services, 12c (12.1.3)

E57541-01

Copyright © 1997, 2014, Oracle and/or its affiliates. All rights reserved.

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations. As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs. No other rights are granted to the U.S. Government.

このソフトウェアまたはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアまたはハードウェアは、危険が伴うアプリケーション(人的傷害を発生させる可能性があるアプリケーションを含む)への用途を目的として開発されていません。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性(redundancy)、その他の対策を講じることは使用者の責任となります。このソフトウェアまたはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

OracleはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

このソフトウェアおよびドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

目次

例一覧

図一覧

タイトルおよび著作権情報

はじめに

- 対象読者

- ドキュメントのアクセシビリティについて

- 関連ドキュメント

- 表記規則

1 EclipseLink DBWSの概要

- 1.1 XMLリレーショナル・マッピング(XRM)の理解

- 1.1.1 構成

- 1.1.2 XMLスキーマ定義

- 1.2 DBWS Builderファイルのプロパティの理解

- 1.3 EclipseLink DBWSサービスの作成

- 1.3.1 DBWSBuilderユーティリティを使用したEclipseLink DBWSサービスの作成

- 1.3.1.1 データベース表からのEclipseLink DBWSサービスの作成

- 1.3.1.2 SQL文からのEclipseLink DBWSサービスの作成

- 1.3.1.3 ストアド・プロシージャからのEclipseLink DBWSサービスの作成

- 1.3.2 EclipseLink DBWSサービスのカスタマイズ

- 1.3.2.1 簡単なカスタマイズの実行

- 1.3.2.2 中程度のカスタマイズの実行

- 1.3.2.3 高度なカスタマイズの実行

- 1.3.3 DBWSBuilder APIの使用

- 1.4 DBWSデザイン・タイム・コンポーネントの使用

2 DBWSサービスの作成

- 2.1 データベース表からのEclipseLink DBWSサービスの作成

- 2.1.1 生成されたEclipseLink DBWSサービス・ディスクリプタ

- 2.1.2 SOAPメッセージ

- 2.2 EclipseLink SessionCustomizerの使用

- 2.2.1 例

- 2.2.2 高度なカスタマイズ

- 2.3 既存のEclipseLink ORMマッピングとOXMマッピング

- 2.4 SQL文からのDBWSサービスの作成

- 2.4.1 カスタムSQL SELECT文の結果セットからの作成

- 2.4.1.1 生成されたEclipseLink DBWSサービス・ディスクリプタ

- 2.4.2 カスタムSQL SELECT文のスキーマ形式の結果を使用した作成

- 2.4.2.1 その他の設計時の情報

- 2.4.2.2 問題と制限の理解

- 2.5 ストアド・プロシージャからの作成

- 2.5.1 例

- 2.6 ストアド・ファンクションからの作成

- 2.6.1 例

- 2.7 複合PL/SQL引数を使用したストアド・プロシージャからの作成

- 2.7.1 例

- 2.8 複合PL/SQL引数を使用したストアド・ファクションからの作成

- 2.8.1 例

- 2.9 オーバーロードされたPL/SQLストアド・プロシージャからの作成

- 2.9.1 例

3 DBWS デザインタイムAPIの高度なアクセス方法

- 3.1 DBWSBuilderとAntの使用

- 3.1.1 例

例一覧

- 1-1 DBWSサービス・ディスクリプタ・ファイルの例

- 1-2 Simple XML Format (SXF)ドキュメントの例

- 1-3 Simple XML Formatスキーマ

- 1-4 DBWS Builder XMLファイルの例

- 1-5 DBWSBuilder XMLファイルの例

- 1-6 DBWS Builder XMLファイルの例

- 1-7 <procedure>問合せの使用

- 1-8 DBWSBuilderで生成されたeclipselink-dbws-schema.xsdファイル

- 1-9 属性への変換

- 1-10 BuilderのXMLファイルの例

- 1-11 DBWSPackagerの例

- 1-12 DBWSBuilderの使用

- 2-1 例

- 2-2 CRUD操作の例

- 2-3 ORMプロジェクト

- 2-4 ORXプロジェクト

- 2-5 DBWSサービスの例

- 2-6 ORMマップの使用

- 2-7 OXMマップの使用

- 2-8 DBWSBuilder XMLファイルの例

- 2-9 サンプルXMLファイル

- 2-10 eclipselink-dbws.xmlファイルの例

- 2-11 サンプル・スキーマ

- 2-12 インスタンス・ドキュメント:

- 2-13 サンプル・スキーマ

- 2-14 SQL文の追加実行

- 3-1 DBWS Builderファイル(dbws-builder.xml)の例

- 3-2 ビルドXMLファイル(build.xml)の例

- 3-3 ビルド・プロパティ・ファイル(build.properties)の例

図一覧

- 1-1 EclipseLink XRのアーキテクチャ

- 1-2 一般的なEclipseLink DBWSサービス・ファイル

- 1-3 WARファイルの内容

- 1-4 具象実装の階層

はじめに

Oracle TopLinkを使用すると、サポートされている標準のJava Persistence Architecture (JPA)注釈に加え、特定の注釈(Oracle TopLinkの拡張機能)を利用できます。このようなOracle TopLinkの拡張機能を使用すると、JPAエンティティでOracle TopLinkの拡張機能と主要な機能を活用することができます。

TopLinkではデフォルトのJPAプロバイダとしてEclipseLinkが使用されて(組み込まれて)います。

対象読者

このドキュメントは、Oracle TopLinkでJava Persistence Architecture (JPA)を使用した開発を行うアプリケーション開発者と対象としています。このドキュメントでは、関連する一般的なタスクの詳細は説明せず、Oracle TopLinkの機能を中心に説明します。

開発者は、次の項目に関する概念およびプログラミング技法を十分に理解している必要があります。

- Java SEおよびJava EE

- Java Persistence Architecture 2.0の仕様(http://jcp.org/en/jsr/detail?id=317)

- EclipseLink (http://www.eclipse.org/eclipselink)

ドキュメントのアクセシビリティについて

Oracleのアクセシビリティについての詳細情報は、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)を参照してください。

Oracle Supportへのアクセス

Oracleサポート・サービスでは、My Oracle Supportを通して電子支援サービスを提供しています。詳細情報は(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=info)か、聴覚に障害のあるお客様は (http://www.oracle.com/pls/topic/lookup?ctx=acc&id=trs)を参照してください。

関連ドキュメント

詳細は、次のドキュメントを参照してください。

- Oracle TopLinkの理解

- Oracle TopLinkソリューション・ガイド

- Oracle Fusion Middleware EclipseLink Java APIリファレンス

- Oracle TopLinkリリース・ノート

- EclipseLinkドキュメント・センター(http://www.eclipse.org/eclipselink/documentation/)

表記規則

このマニュアルでは次の表記規則を使用します。

規則

意味

太字

太字は、操作に関連するGraphical User Interface要素、または本文中で定義されている用語および用語集に記載されている用語を示します。

イタリック体

イタリックは、ユーザーが特定の値を指定するプレースホルダ変数を示します。

固定幅フォント

固定幅フォントは、段落内のコマンド、URL、サンプル内のコード、画面に表示されるテキスト、または入力するテキストを示します。

1 EclipseLink DBWSの概要

この章では、リレーショナル・データベース・アーティファクトへのJava EEに準拠したクライアントニュートラルなアクセスをWebサービスを介して提供するEclipseLink DBWSを紹介および説明します。EclipseLink DBWSでは、既存のORMおよびOXMコンポーネントを利用しながら、EclipseLinkのコア機能を拡張しています。

EclipseLink DBWSには次の2つのコンポーネントがあります。

- デザインタイム・コンポーネント: DBWSBuilderのコマンドライン・ユーティリティで、必要なデプロイメント・アーティファクトを生成します。

- ランタイム・プロバイダ・コンポーネント: サービス・ディスクリプタを(関連するデプロイメント・アーティファクトとともに)使用して、JAX-WS 2.0 Webサービスとして実現します。ランタイム・プロバイダはEclipseLinkを使用して、Webサービス・クライアントが使用するXML SOAPメッセージとデータベースの間の橋渡しをします。

EclipseLink DBWSサービスには、次のような処理を任意の回数だけ追加することができます。

1. insert – XMLドキュメントで記述されたデータベース永続エンティティを挿入します。

2. update – XMLドキュメントで記述されたデータベース永続エンティティを更新します。

3. delete – XMLドキュメントで記述されたデータベース永続エンティティから削除します。

4. query – XMLドキュメントで記述されたデータベース永続エンティティから問い合わせます。
問合せ操作への選択条件は、次のものを使用して指定することができます。

- カスタムSQL SELECT文

- ストアド・プロシージャの起動

- EclipseLink Named Query (EclipseLink ORM Expression Framework APIの全範囲を使用可能)

- JP-QL

操作で使用されるXMLドキュメントはXMLスキーマ定義(.xsdファイル)に準拠しています。

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

- XMLリレーショナル・マッピング(XRM)の理解

- DBWS Builderファイルのプロパティの理解

- EclipseLink DBWSサービスの作成

- DBWSデザイン・タイム・コンポーネントの使用

1.1 XMLリレーショナル・マッピング(XRM)の理解

EclipseLinkのORM機能とOXM機能は、データベースのリレーショナル構造とXMLの階層構造とのギャップを埋める強力な基盤になります。

図1-1 EclipseLink XRのアーキテクチャ

1.1.1 構成

通常、EclipseLink DBWSサービスはMETA-INFディレクトリ(.warファイルにパッケージされている場合はWEB-INF/classes/META-INF)のサービス・ディスクリプタ・ファイルeclipselink-dbws.xmlとともにアーカイブ(.jarまたは.warファイル)にパッケージされています。  リレーショナル・データベースの世界とXMLの世界を橋渡しするため、EclipseLinkのsessions.xml (eclipselink-dbws-sessions.xml)は、2つのEclipseプロジェクト(1つはORM側、もう1つはOXM側)を指しています。サービスにはXMLスキーマ定義ファイルeclipselink-dbws-schema.xsd(OXMプロジェクトと組み合わせてデータベースからの情報がどのようにXMLドキュメントの形になるかという情報を指定する)も必要です。

図1-2 一般的なEclipseLink DBWSサービス・ファイル

注意:

すべてのファイルが示されているわけではありません。

EclipseLink DBWSサービス・ディスクリプタ・ファイルeclipselink-dbws.xmlは、必要最小限の情報と省略されるフィールドの単純なデフォルトのみが記述された読みやすいものです。このため、ユーティリティによる自動生成も手動での編集も可能です。例1-1にDBWSサービス・ディスクリプタ・ファイルの例を示します。

例1-1 DBWSサービス・ディスクリプタ・ファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<dbws
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
>
<name>example</name>
<sessions-file>example-dbws-sessions.xml</sessions-file>
<query>
<name>countEmployees
<result>
<type>xsd:int</type>
</result>
<sql><!--[CDATA[select count(*) from EMP]]--></sql>
</query>
</dbws>

表1-1に、EclipseLink DBWSサービス・ディスクリプタ・ファイルの要素を示します。

表1-1 EclipseLink DBWSサービス・ディスクリプタ・ファイルの要素

要素

説明

必須かどうか

デフォルト

name

EclipseLink DBWSサービスの名前。

必須。DBWSBuilderのprojectNameプロパティで設定します。

なし

sessions-file

EclipseLink sessions.xmlファイルの名前。

いいえ

eclipselink-dbws-sessions.xml

次のいずれか。

- insert

- update

- delete

- query

サービスの操作

1つ以上の操作

なし

1.1.2 XMLスキーマ定義

EclipseLink DBWSサービス・スキーマ・ファイルeclipselink-dbws-schema.xsdは手動で作成するか、または設計時にデータベース・メタデータ(列名、型、NULLABLEなど)からXML要素タグ名を導出するDBWSBuilderユーティリティで自動生成することができます。

DBWSBuilderユーティリティでは、問合せ操作によって返される情報に事前定義された構造がない場合はXMLスキーマ定義が生成されません。次に例を示します。

- カスタムSQL問合せ操作のresultSet

- ストアド・プロシージャの問合せ処理の結果

- update操作の行数

このような場合、EclipseLink DBWSランタイム・プロバイダでは、問合せ実行時に利用可能な情報のみを使用してXMLドキュメントを作成します。

例1-2 Simple XML Format (SXF)ドキュメントの例

要素のタグ名は表の列名がそのままコピーされます。

<?xml version = '1.0' encoding = 'UTF-8'?>
<simple-xml-format>
<simple-xml>
<EMPNO>7788</EMPNO>
<ENAME>SCOTT</ENAME>
<JOB>ANALYST</JOB>
<MGR>7566</MGR>
<HIREDATE>1987-04-19T00:00:00.000-0400</HIREDATE>
<SAL>3000</SAL>
<DEPTNO>20</DEPTNO>
</simple-xml>
<simple-xml>
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>1980-12-17T00:00:00.000-0400</HIREDATE>
<SAL>800</SAL>
<DEPTNO>20</DEPTNO>
</simple-xml>
</simple-xml-format>

このようなXMLドキュメントは、事前定義されたスキーマに対する検証ができないため処理不能ですが、厳密には次のような非常に許容性のある順不同のスキーマのみがそのようなドキュメントを検証できます。

例1-3 Simple XML Formatスキーマ

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:complexType name="simple-xml-format">
<xsd:sequence>
<xsd:any minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

要素タグsimple-xml-format とsimple-xmlは、操作時に適切なプロパティを設定することでカスタマイズできます。

1.2 DBWS Builderファイルのプロパティの理解

例1-4に示すように、DBWS Builder XMLファイルの<property>要素を使用して必要なサーバー・プロパティを定義します。

例1-4 DBWS Builder XMLファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">procedure_test</property>
<property name="logLevel">off</property>
<property name="username">myName</property>
...
</properties>
...

DBWS Builder XMLファイルのその他の例については、例1-5および例1-6を参照してください。

表1-2に有効な<property>値を示します。

表1-2 DBWS Builderファイルのプロパティ

プロパティ

説明

projectName

DBWSプロジェクトの名前。

デフォルト = myProject

logLevel

TopLinkからログへの書込みの量と詳細。有効な値: off、severe、warning、info (デフォルト)、config、fine、fine、finestおよびall。

詳細は、『Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』の「logging.level」を参照してください。

username

データベースへのログインに使用されるユーザー名。

password

データベースへのログインに使用されるusernameのパスワード。

url

データベースのURL。

driver

データベース・ドライバ。

platformClassname

データベースのプラットフォームを指定します。DatabasePlatformを拡張する完全修飾されたクラス名である必要があります。

デフォルト = org.eclipse.persistence.platform.database.OraclePlatform

targetNamespace

生成した型に適用されるターゲットのネームスペースの値。

デフォルト = urn:projectName

orSessionCustomizerClassName

ORMセッションに適用されるセッション・カスタマイザの名前。

詳細は、『Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』の「session.customizer」を参照してください。

oxSessionCustomizerClassName

OXMセッションに適用されるセッション・カスタマイザの名前。

詳細は、『Oracle TopLink Java Persistence API (JPA)拡張機能リファレンス』の「session.customizer」を参照してください。

dataSource

ターゲットのアプリケーション・サーバーに定義されるデータ・ソースのJNDI名。

wsdlLocationURI

生成されたWSDLに設定されるLocation URIの値。

デフォルト = REPLACE_WITH_ENDPOINT_ADDRESS

1.3 EclipseLink DBWSサービスの作成

WARファイルを生成し、EclipseLink DBWSサービス・ディスクリプタとともに、JAX-WS 2.0 Webサービス(WSDL、XMLスキーマ、web.xml、EclipseLinkオブジェクト・リレーショナル・マッピング(ORM)およびオブジェクトXMLマッピング(OXM)のネイティブ・プロジェクトXMLファイルなど)に必要なすべてのデプロイメント・アーティファクトを含めることができます。

図1-3 WARファイルの内容

表1-3 EclipseLink DBWSサービスの.warファイルの内容

ファイル

説明

web.xml

Webアプリケーションのデプロイメント・ファイルで、JAX-WS Webサービスとしてデプロイするために必要です。

詳細はJSR-109を参照してください。

eclipselink-dbws.xml

EclipseLink DBWSサービス・ディスクリプタ・ファイル(表1-1を参照)。

eclipselink-dbws-or.xml

EclipseLink ORMプロジェクトXMLファイル。

eclipselink-dbws-ox.xml

EclipseLink OXMプロジェクトXMLファイル。

eclipselink-dbws-sessions.xml

EclipseLink DBWSサービスのEclipseLink sessions.xmlファイル。

eclipselink-dbws-schema.xsd

処理の引数と戻り型のXML型定義を含みます。

DBWSBuilderユーティリティは、データベース・メタデータからこのファイルを自動的に生成してelement-tagの名前とタイプを導出します。

eclipselink-dbws.wsdl

EclipseLink DBWSサービスのすべての操作のエントリを含み、JAX-WS Webサービスのデプロイメントに必要とされます。

詳細はJSR-109(http://jcp.org/en/jsr/detail?id=109)を参照してください。

swaref.xsd

SOAP添付ファイルのXML型定義を含みます(オプション)。

swaref.xsdとweb.xmlの名前と内容はWebデプロイメントにおける役割で決まるため、修正することはできません。

デプロイ可能な.warファイルは、Oracle WebLogic Server 10.3 JavaEEコンテナで動作することが検証されています。 詳細は、http://www.oracle.com/technology/software/products/ias/htdocs/wls_main.html?rssid=rss_otn_softを参照してください。

代替のデプロイ可能なJARファイルは、JavaSE 6のコンテナレスEndPointとして動作することが検証されています。詳細はhttp://java.sun.com/javase/6/docs/api/javax/xml/ws/Endpoint.htmlおよびhttp://wiki.eclipse.org/EclipseLink/Examples/DBWS/AdvancedJavase6Containerlessを参照してください。

1.3.1 DBWSBuilderユーティリティを使用したEclipseLink DBWSサービスの作成

この項では、DBWSBuilderユーティリティを使用してEclipseLink DBWSサービスを作成する方法について説明します。

EclipseLink DBWSのデザインタイム・ユーティリティDBWSBuilderを使用すると、デプロイメント・ファイルを作成することができます。DBWSBuilderは、EclipseLink DBWS BuilderのXMLファイルに記述された操作を処理して、必要なすべてのデプロイメント・アーティファクトを作成するJavaアプリケーションです。

DBWSBuilderを起動する前に<ECLIPSELINK_HOME>\bin\setenv.cmd(またはsetenv.shファイル)で次の環境変数を設定してください。

- JAVA_HOME

- DRIVER_CLASSPATH

DBWSBuilderを起動するために用意されているスクリプト・ファイルがあります。これらは<ECLIPSELINK_HOME>\utils\dbwsディレクトリにあります。スクリプトはWindows用がdbwsbuilder.cmd、その他のオペレーティング・システム用がdbwsbuilder.shです。ヘルプ情報を表示するには、dbwsbuilder.cmdスクリプト(またはdbwsbuilder.sh)スクリプトを引数なしで実行します。

DBWSBuilderを使用すると、次のソースからEclipseLink DBWSサービスを生成することができます。

- 既存のリレーショナル・データベース表

- 1つ以上のSQL SELECT文

- ストアド・プロシージャ

1.3.1.1 データベース表からのEclipseLink DBWSサービスの作成

EclipseLink DBWSBuilderのXMLファイルは、<table>問合せ操作を次のように使用して作成できます。

例1-5 DBWSBuilder XMLファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">table_test</property>
... database properties ...
</properties>
<table
schemaPattern="%"
tableNamePattern="dbws_crud"
/>
</dbws-builder>

詳細は、「データベース表からのEclipseLink DBWSサービスの作成」を参照してください。

1.3.1.2 SQL文からのEclipseLink DBWSサービスの作成

EclipseLink DBWSBuilderのXMLファイルは、<sql>問合せ操作を次のように使用して作成できます。

例1-6 DBWS Builder XMLファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">sql_test</property>
... database properties ...
</properties>
<sql name="employeeInfo" simpleXMLFormatTag="employee-info" xmlTag="aggregate-counts">
<text>
<![CDATA[select count(*) as "COUNT", max(SAL) as "MAX-Salary" from EMP]]>
</text>
</sql>
</dbws-builder>

1.3.1.2.1 パラメータ・バインディングの例

<sql>操作のSQL SELECT文に、eclipselink-dbws-schema.xsdのデータ型またはなんらかの基本XSDデータ型にバインドする必要があるパラメータを指定する場合があります。SQL SELECTの文字列では、JDBC-style ? マーカーを使用して引数の位置を指定します。<sql>操作では、ネストした<binding>要素を使用してデータ型とパラメータを照合します。<binding>要素が定義された順番とSQL文字列での ? マーカーの順序は一致している必要があります。

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">sql_binding_test</property>
... database properties ...
</properties>
<sql name="findEmpByName" isCollection="true" isSimpleXMLFormat="true">
<text>
<![CDATA[select * from EMP where EMPNO = ? and LAST_NAME = ?]]>
</text>
<binding name="EMPNO" type="xsd:int"/>
<binding name="LAST_NAME" type="xsd:string"/>
</sql>
</dbws-builder>

EMPNOという引数がinteger型にバインドされ、LAST_NAMEという引数がstring型にバインドされています。

詳細は、「SQL文からのDBWSサービスの作成」を参照してください。

1.3.1.3 ストアド・プロシージャからのEclipseLink DBWSサービスの作成

EclipseLink DBWSBuilderのXMLファイルは、<procedure>問合せ操作を例1-7のように使用して作成できます。

例1-7 <procedure>問合せの使用

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">procedure_test</property>
... database properties ...
</properties>
<procedure
returnType="empType"
catalogPattern="SOME_PKG"
schemaPattern="SCOTT"
procedurePattern="GetEmployeeByEMPNO_DEPTNO"/>
</procedure>
</dbws-builder>

詳細は、「ストアド・プロシージャからの作成」を参照してください。

1.3.2 EclipseLink DBWSサービスのカスタマイズ

EclipseLink DBWSサービスをカスタマイズして使用する例は多数あります。事例は次のカテゴリに分類されます。

- 簡単 – <element-tag>を"attribute"に変更

- 中程度 – EclipseLinkのORMプロジェクトまたはOXMプロジェクトのカスタマイズ

- 高度 – 必要なすべてのデプロイメント・アーティファクトを手動で作成

1.3.2.1 簡単なカスタマイズの実行

デフォルトでは、DBWSBuilderで生成されたeclipselink-dbws-schema.xsdファイルは、例1-8に示すように、データベース表のメタデータから<element-tag>名を導出します。

例1-8 DBWSBuilderで生成されたeclipselink-dbws-schema.xsdファイル

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:complexType name="empType">
<xsd:sequence>
<xsd:element name="empno" type="xsd:int" xsi:nil="false"/>
<xsd:element name="ename" type="xsd:string" xsi:nil="true"/>
<xsd:element name="job" type="xsd:string" xsi:nil="true"/>
<xsd:element name="mgr" type="xsd:int" minOccurs="0" xsi:nil="true"/>
<xsd:element name="hiredate" type="xsd:dateTime" xsi:nil="true"/>
<xsd:element name="sal" type="xsd:decimal" xsi:nil="true"/>
<xsd:element name="comm" type="xsd:int" minOccurs="0" xsi:nil="true"/>
<xsd:element name="deptno" type="xsd:int" xsi:nil="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

<element>タグを属性に変更するには、例1-9に示すようにNamingConventionTransformerを使用します。

例1-9 属性への変換

public interface NamingConventionTransformer {

public enum ElementStyle {
ELEMENT, ATTRIBUTE, NONE
};

public String generateSchemaName(String tableName);

public String generateElementAlias(String originalElementName);

public ElementStyle styleForElement(String originalElementName);
}

1.3.2.2 中程度のカスタマイズの実行

EclipseLinkのSessionCustomizerを使用する大きな理由は、EclipseLink APIにプログラム上のアクセスが可能になるためです。このAPIを使用することで、セッションからオブジェクトリレーショナルまたはオブジェクトXMLのマッピング・ディスクリプタを取得することができるため、これらのディスクリプタを使用してマッピングへの追加、変更および削除を行います。セッション・キャッシュをオフにするか、またはデータベース接続のトランザクションの分離レベルを変更することも検討します。

次の例は、org.eclipse.persistence.config.SessionCustomizerの実装方法を示しています。

package some.java.package;

import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.sessions.Session;
import org.eclipse.persistence.sessions.DatabaseLogin;

public class MySessionCustomizer implements SessionCustomizer {

public MySessionCustomizer() {
}

public void customize(Sesssion session) {
DatabaseLogin login = (DatabaseLogin)session.getDatasourceLogin();
login.setTransactionIsolation(DatabaseLogin.TRANSACTION_READ_UNCOMMITTED);
}
}

DBWSBuilderのXMLファイルで、そのカスタマイズをORMプロジェクトに適用するかOXMプロジェクトに適用するかを、次の例に示すように指定します。

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">customize_test</property>
...
<property name="orSessionCustomizerClassName">some.java.package.MyORSessionCustomizer</property>

または

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">customize_test</property>
...
<property name="oxSessionCustomizerClassName">some.java.package.MyOXSessionCustomizer</property>

詳細は、『Oracle TopLinkの理解』の「セッション」を参照してください。

1.3.2.3 高度なカスタマイズの実行

project.xmlファイルとsessions.xmlファイルを作成することで、EclipseLink DBWSサービスをカスタマイズできます。任意のユーティリティを使用して、次の操作を実行します。

- オブジェクトをEclipseLinkリレーショナル・プロジェクトのリレーショナル・データベースにマップします

- オブジェクトをEclipseLink XMLプロジェクトのXMLスキーマにマップします

- 両方のプロジェクトを参照するEclipseLink sessions.xmlファイルを作成します。

この方法では、リレーショナル・マッピングとXMLマッピングのすべての側面を制御することができます。この方法は、多くのまたはすべての詳細をカスタマイズしたいときに最良です。詳細は、「既存のEclipseLink ORMマッピングとOXMマッピング」を参照してください。

1.3.3 DBWSBuilder APIの使用

EclipseLink DBWSデザインタイム・ユーティリティDBWSBuilderは、EclipseLink DBWSファイルを生成し、これらをデプロイ可能なアーカイブにアセンブルするJavaアプリケーションです。

通常はコマンドラインから主なメソッドを使用して起動します。

prompt > dbwsbuilder.cmd -builderFile {path_to_builder.xml} -stageDir {path_to_stageDir} -packageAs {packager}

指定されたBuilderのXMLファイル(例1-10)は、プロパティと<table>操作を表すモデル・オブジェクトを生成するOXMプロジェクトorg.eclipse.persistence.tools.dbws.DBWSBuilderModelProjectで解析されます。そのためパブリック・クラスorg.eclipse.persistence.tools.dbws.DBWSBuilderはプロパティ・セッター(setDriver()、setUrl()など)の表でaddSqlOperation()を介したSQL操作によってプログラム的に移入されます。

例1-10 BuilderのXMLファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">test</property>
<property name="driver">oracle.jdbc.OracleDriver</property>
<property name="password">tiger</property>
<property name="url">jdbc:oracle:thin:@localhost:1521:ORCL</property>
<property name="username">scott</property>
</properties>
<table
catalogPattern="%"
schemaPattern="SCOTT"
tableNamePattern="EMP"
/>
</dbws-builder>

コマンドラインで指定されたパッケージャはorg.eclipse.persistence.tools.dbws.DBWSPackagerインタフェースを実装するクラスで表現されます。このインタフェースには、図1-4に示すような具象実装の階層があります。

図1-4 具象実装の階層

DBWSPackagerの主な役割は、DBWSBuilderで生成された出力に対してjava.io.OutputStreamを提供することです。

例1-11 DBWSPackagerの例

// call-backs for stream management
public OutputStream getSchemaStream() throws FileNotFoundException;
public void closeSchemaStream(OutputStream schemaStream);

public OutputStream getSessionsStream(String sessionsFileName) throws FileNotFoundException;
public void closeSessionsStream(OutputStream sessionsStream);

public OutputStream getServiceStream() throws FileNotFoundException;
public void closeServiceStream(OutputStream serviceStream);

public OutputStream getOrStream() throws FileNotFoundException;
public void closeOrStream(OutputStream orStream);

public OutputStream getOxStream() throws FileNotFoundException;
public void closeOxStream(OutputStream oxStream);

public OutputStream getWSDLStream() throws FileNotFoundException;
public void closeWSDLStream(OutputStream wsdlStream);

public OutputStream getSWARefStream() throws FileNotFoundException;
public void closeSWARefStream(OutputStream swarefStream);

public OutputStream getWebXmlStream() throws FileNotFoundException;
public void closeWebXmlStream(OutputStream webXmlStream);

public OutputStream getProviderClassStream() throws FileNotFoundException;
public void closeProviderClassStream(OutputStream codeGenProviderStream);

public OutputStream getProviderSourceStream() throws FileNotFoundException;
public void closeProviderSourceStream(OutputStream sourceProviderStream);

すべてのモデル・オブジェクトが組み込まれると、start()メソッドまたはbuild(...)メソッドからBuilderが起動され、DBWSPackagerからストリームをオーバーライドしてPackagerの外部でストリームを管理できるようになります。

public void start() ...

public void build(OutputStream dbwsSchemaStream, OutputStream dbwsSessionsStream,
OutputStream dbwsServiceStream, OutputStream dbwsOrStream, OutputStream dbwsOxStream,
OutputStream swarefStream, OutputStream webXmlStream, OutputStream wsdlStream,
OutputStream codeGenProviderStream, OutputStream sourceProviderStream, Logger logger) ...

1.4 DBWSデザイン・タイム・コンポーネントの使用

EclipseLink DBWSのデザインタイム・ユーティリティDBWSBuilderを使用すると、デプロイメント・ファイルを作成することができます。DBWSBuilderは、EclipseLink DBWS BuilderのXMLファイルに記述された操作を処理して、必要なすべてのデプロイメント・アーティファクトを作成するJavaアプリケーションです。

DBWSBuilderを起動する前に、次の環境変数を<ECLIPSELINK_HOME>\utils\dbws\setenv.cmd(またはsetenv.shファイル)に設定します。

- JAVA_HOME

- DRIVER_CLASSPATH

DBWSBuilderを起動するために用意されているスクリプト・ファイルがあります。これらは<ECLIPSELINK_HOME>\utils\dbwsディレクトリにあります。スクリプトはWindows用がdbwsbuilder.cmd、その他のオペレーティング・システム用がdbwsbuilder.shです。

例1-12 DBWSBuilderの使用

prompt > dbwsbuilder.cmd -builderFile {path_to_dbws_builder.xml} -stageDir  {path_to_stageDir}
-packageAs[:archive_flag - archive, noArchive, ignore] {packager} [additional args]
Available packagers:
-packageAs:[default=not supported] jdev
-packageAs:[default=archive] javase [jarFilename]
-packageAs:[default=archive] wls [warFilename]
-packageAs:[default=archive] glassfish [warFilename]
-packageAs:[default=archive] jboss [warFilename]
-packageAs:[default=archive] war [warFilename]
-packageAs:[default=archive] was [warFilename]
-packageAs:[default=not supported] eclipse

DBWSBuilderを使用して、次のソースからEclipseLink DBWSサービスを生成することができます。

- 既存のリレーショナル・データベース表。「データベース表からのEclipseLink DBWSサービスの作成」を参照してください。

- 1つ以上のSQL SELECT文。「SQL文からのEclipseLink DBWSサービスの作成」を参照してください。

- ストアド・プロシージャ。「ストアド・プロシージャからのEclipseLink DBWSサービスの作成」を参照してください。

- ストアド・ファンクション。「ストアド・ファンクションからの作成」を参照してください。

2 DBWSサービスの作成

この章では、EclipseLink DBWSサービスを作成する方法を説明します。

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

- データベース表からのEclipseLink DBWSサービスの作成

- EclipseLink SessionCustomizerの使用

- SQL文からのDBWSサービスの作成

- ストアド・プロシージャからの作成

- ストアド・ファンクションからの作成

- 複合PL/SQL引数を使用したストアド・ファクションからの作成

- オーバーロードされたPL/SQLストアド・プロシージャからの作成

2.1 データベース表からのEclipseLink DBWSサービスの作成

データベース表のCRUD (Create/Read[findByPKおよびfindAll]/Update/Delete)操作を公開するWebサービスを作成できます。EclipseLinkは、これをデータベース上の表または複数の表(カタログ、スキーマまたは表名に%をサポートするパターンを使用)に対してサポートし、そのデータベースではJDBCドライバが表のメタデータをJDBCメタデータAPI(java.sql.DatabaseMetaData)を経由して確実に正確に送ります。

EclipseLinkはDBWSBuilderユーティリティを使用して、次のルールでDBWS XMLスキーマを生成します。

- 表名==>XMLでサポートされない文字に変換  .xsdファイルのtop-level複合型

- 列名 ==> XMLでサポートされない文字に変換脚注 1  ==> 小文字に変換 ==> <element-tag>名になる

- すべての列は要素で表現されます

- BLOB列は自動的にxsd:base64Binaryにマップされます

- xsd:base64Binary要素をXMLドキュメントにインラインで含めるか、またはバイナリの添付ファイルとして(SwaRefスタイルまたはMTOMスタイル)処理できます

例2-1では、Oracleのscottデータベース・スキーマからEMP表(表2-1)を使用します。

表2-1 サンプルのEMP表

OWNER

TABLE_NAME

COLUMN_NAME

DATA_TYPE

DATA_LENGTH

DATA_PRECISION

DATA_SCALE

NULLABLE?

SCOTT

EMP

EMPNO

NUMBER

22

4

0

N

SCOTT

EMP

ENAME

VARCHAR2

10

(null)

(null)

Y

SCOTT

EMP

JOB

VARCHAR2

9

(null)

(null)

Y

SCOTT

EMP

MGR

NUMBER

22

4

0

Y

SCOTT

EMP

HIREDATE

DATE

7

(null)

(null)

Y

SCOTT

EMP

SAL

NUMBER

22

7

2

Y

SCOTT

EMP

COMM

NUMBER

22

7

2

Y

SCOTT

EMP

DEPTNO

NUMBER

22

2

0

Y

例2-1 例

DBWSBuilderユーティリティでは、入力として次に示すようなDBWS構成ファイルが必要です。

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">emp</property>
... database properties
</properties>
<table
catalogPattern="%"
tableNamePattern="EMP"
/>
</dbws-builder>

DBWSBuilderを実行するには、次のコマンドを使用します。

prompt > dbwsbuilder.cmd -builderFile dbws-builder.xml -stageDir output_directory -packageAs wls emp.war

説明:

- dbws-builder.xml: DBWS構成ファイル(前述のとおり)

- output_directory: 生成されるファイルの出力ディレクトリ

- -packageAs: Webサービスがデプロイされるプラットフォーム

DBWSBuilderで生成されたeclipselink-dbws-schema.xsdファイルは、表2-1のデータベース表のメタデータから<element-tag>名を導出します。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:complexType name="empType">
<xsd:sequence>
<xsd:element name="empno" type="xsd:int" xsi:nil="false"/>
<xsd:element name="ename" type="xsd:string" xsi:nil="true"/>
<xsd:element name="job" type="xsd:string" xsi:nil="true"/>
<xsd:element name="mgr" type="xsd:int" minOccurs="0" xsi:nil="true"/>
<xsd:element name="hiredate" type="xsd:dateTime" xsi:nil="true"/>
<xsd:element name="sal" type="xsd:decimal" xsi:nil="true"/>
<xsd:element name="comm" type="xsd:int" minOccurs="0" xsi:nil="true"/>
<xsd:element name="deptno" type="xsd:int" xsi:nil="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

2.1.1 生成されたEclipseLink DBWSサービス・ディスクリプタ

生成されるEclipseLink DBWSサービス・ディスクリプタ(eclipselink-dbws.xml)・ファイルで、CRUD操作は次のように示されます。

例2-2 CRUD操作の例

<?xml version="1.0" encoding="UTF-8"?>
<dbws xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="urn:emp" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>emp</name>
<sessions-file>eclipselink-dbws-sessions.xml</sessions-file>
<update>
<name>update_empType</name>
<parameter>
<name>theInstance</name>
<type>ns1:empType</type>
</parameter>
</update>
<insert>
<name>create_empType</name>
<parameter>
<name>theInstance</name>
<type>ns1:empType</type>
</parameter>
</insert>
<query>
<name>findByPrimaryKey_empType</name>
<parameter>
<name>id</name>
<type>xsd:decimal</type>
</parameter>
<result>
<type>ns1:empType</type>
</result>
<named-query>
<name>findByPrimaryKey</name>
<descriptor>empType</descriptor>
</named-query>
</query>
<delete>
<name>delete_empType</name>
<parameter>
<name>theInstance</name>
<type>ns1:empType</type>
</parameter>
</delete>
<query>
<name>findAll_empType</name>
<result isCollection="true">
<type>ns1:empType</type>
</result>
<named-query>
<name>findAll</name>
<descriptor>empType</descriptor>
</named-query>
</query>
</dbws>

2.1.2 SOAPメッセージ

次のSOAPメッセージによって、DBWSサービスempに対して<findAll_empType>操作を起動します。

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<findAll_empType xmlns="urn:empService" xmlns:urn="urn:emp"/>
</env:Body>
</env:Envelope>

次のように戻されます。

<?xml version="1.0" encoding="utf-16"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header />
<SOAP-ENV:Body>
<srvc:findAll_empTypeResponse xmlns="urn:emp" xmlns:srvc="urn:empService">
<srvc:result>
<empType>
<empno>7369</empno>
<ename>SMITH</ename>
<job>CLERK</job>
<mgr>7902</mgr>
<hiredate>1980-12-17T00:00:00.0-05:00</hiredate>
<sal>800</sal>
<deptno>20</deptno>
</empType>
<empType>
<empno>7499</empno>
<ename>ALLEN</ename>
<job>SALESMAN</job>
<mgr>7698</mgr>
<hiredate>1981-02-20T00:00:00.0-05:00</hiredate>
<sal>1600</sal>
<comm>300</comm>
<deptno>30</deptno>
</empType>
....
</srvc:result>
</srvc:findAll_empTypeResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

2.2 EclipseLink SessionCustomizerの使用

DBWSでEclipseLink SessionCustomizerを使用すると、EclipseLink APIにアクセスして、セッションからORマッピング・ディスクリプタ(object-relational)またはOXマッピング・ディスクリプタ(object-XML)を取得できます。次にディスクリプタを使用してマッピングを追加、変更または削除します。

詳細は、『Oracle TopLinkの理解』の「セッション」を参照してください。

2.2.1 例

この例は、EclipseLink SessionCustomizerを実装する方法を示しています。

package some.java.package;

import org.eclipse.persistence.config.SessionCustomizer;
import org.eclipse.persistence.sessions.Session;
import org.eclipse.persistence.sessions.DatabaseLogin;

public class MySessionCustomizer implements SessionCustomizer {

public MySessionCustomizer() {
}

public void customize(Sesssion session) {
DatabaseLogin login = (DatabaseLogin)session.getDatasourceLogin();
// enable 'dirty' reads
login.setTransactionIsolation(DatabaseLogin.TRANSACTION_READ_UNCOMMITTED);
}
}

DBWSBuilder構成ファイルでは、次のようにorSessionCustomizerClassNameまたはoxSessionCustomizerClassNameを使用して、カスタマイズした内容がORMプロジェクトまたはORXプロジェクト(それぞれに)に適用されるかどうかを指定する必要があります。

例2-3 ORMプロジェクト

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">customize_test</property>
...
<property name="orSessionCustomizerClassName">some.java.package.MyORSessionCustomizer</property>

例2-4 ORXプロジェクト

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">customize_test</property>
...
<property name="oxSessionCustomizerClassName">some.java.package.MyOXSessionCustomizer</property>

2.2.2 高度なカスタマイズ

EclipseLinkの専用のproject.xmlファイルとsessions.xmlファイルを作成することで、EclipseLink DBWSサービスを高度にカスタマイズできます。任意のユーティリティを使用して、次の操作を実行します。

- オブジェクトをEclipseLinkリレーショナル・プロジェクトのリレーショナル・データベースにマップします

- オブジェクトをEclipseLink XMLプロジェクトのXMLスキーマにマップします

- 両方のプロジェクトを参照するEclipseLink sessions.xmlファイルを作成します。

この方法では、リレーショナル・マッピングとXMLマッピングのすべての側面を制御することができます。この方法は、多くのまたはすべての詳細をカスタマイズしたいときに最良です。

例2-5で、DBWSサービスは、既存のEclipseLinkプロジェクト・マップから大文字小文字が区別される同一のエイリアス(プロジェクト間で共通のディスクリプタ)を使用して作成されます。

例2-5 DBWSサービスの例

<?xml version="1.0" encoding="UTF-8"?>
<object-persistence version="Eclipse Persistence Services - some version (some build date)" xmlns="http://www.eclipse.org/eclipselink/xsds/persistence" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:eclipselink="http://www.eclipse.org/eclipselink/xsds/persistence">
<name>SomeORProject</name>
<class-mapping-descriptors>
<class-mapping-descriptor xsi:type="relational-class-mapping-descriptor">
<class>some.package.SomeClass</class>
<alias>SomeAlias</alias>
...

<?xml version="1.0" encoding="UTF-8"?>
<object-persistence version="Eclipse Persistence Services - some version (some build date)" xmlns="http://www.eclipse.org/eclipselink/xsds/persistence" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:eclipselink="http://www.eclipse.org/eclipselink/xsds/persistence">
<name>SomeOXProject</name>
<class-mapping-descriptor xsi:type="xml-class-mapping-descriptor">
<class>some.package.SomeClass</class>
<alias>SomeAlias</alias>
...

注意:

この(DBWSBuilderユーティリティを使用しない)方法でDBWSのWebサービスを構築する場合は、すべての必要なデプロイメント・アーティファクトを作成してください。

2.3 既存のEclipseLink ORMマッピングとOXMマッピング

DBWSサービスは、(プロジェクトのクラスとプロジェクトのデプロイメントXMLがサポートされた)既存のEclipseLink ORMマップとOXMマップを使用して、プロジェクト間で共通の、ディスクリプタへの大文字/小文字を区別する同一のエイリアスを使用して作成することができます。

例2-6 ORMマップの使用

<?xml version="1.0" encoding="UTF-8"?>
<object-persistence version="Eclipse Persistence Services - some version (some build date)" xmlns="http://www.eclipse.org/eclipselink/xsds/persistence" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:eclipselink="http://www.eclipse.org/eclipselink/xsds/persistence">
<name>SomeORProject</name>
<class-mapping-descriptors>
<class-mapping-descriptor xsi:type="relational-class-mapping-descriptor">
<class>some.package.SomeClass</class>
<alias>SomeAlias</alias>
...

例2-7 OXMマップの使用

<?xml version="1.0" encoding="UTF-8"?>
<object-persistence version="Eclipse Persistence Services - some version (some build date)" xmlns="http://www.eclipse.org/eclipselink/xsds/persistence" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:eclipselink="http://www.eclipse.org/eclipselink/xsds/persistence">
<name>SomeOXProject</name>
<class-mapping-descriptor xsi:type="xml-class-mapping-descriptor">
<class>some.package.SomeClass</class>
<alias>SomeAlias</alias>
...

この(DBWSBuilderユーティリティを使用しない)方法でDBWSのWebサービスを構築する場合は、すべての必要なデプロイメント・アーティファクトを作成してください。

2.4 SQL文からのDBWSサービスの作成

この項では、次の内容について説明します。

- カスタムSQL SELECT文の結果セットからの作成

- カスタムSQL SELECT文のスキーマ形式の結果を使用した作成

2.4.1 カスタムSQL SELECT文の結果セットからの作成

EclipseLink DBWSでは、カスタムSQL SELECT文の実行結果を表示する(実際のSQLは表示しないで)Webサービスを作成できます。戻されるデータの構造を決めるメタデータはなく、単純なXML形式のスキーマが使用されます。

このサービスの対象となるSQL SELECT文は、次に示すとおり、DBWSBuilderのXMLファイル内にあります。

例2-8 DBWSBuilder XMLファイルの例

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">testSql</property>
... database properties
</properties>
<sql
name="count"
simpleXMLFormatTag="aggregate-info"
xmlTag="count"
>
<text><![CDATA[select count(*) from EMP]]></text>
</sql>
<sql
name="countAndMaxSalary"
simpleXMLFormatTag="aggregate-info"
xmlTag="count-and-max-salary"
>
<text><![CDATA[select count(*) as "COUNT", max(SAL) as "MAX-Salary" from EMP]]></text>
</sql>
</dbws-builder>

Webサービスを作成するには、次のコマンドを使用します。

prompt > dbwsbuilder.cmd -builderFile dbws-builder.xml -stageDir output_directory -packageAs wls testSql.war

説明:

- dbws-builder.xml : DBWS builder XML構成ファイル(前述のとおり)

- output_directory: 生成されるファイルの出力ディレクトリ

- -packageAs: Webサービスがデプロイされるプラットフォーム

生成されるeclipselink-dbws-schema.xsdファイルは、単純なXML形式のスキーマです。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:complexType name="simple-xml-format">
<xsd:sequence>
<xsd:any minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

要素タグsimple-xml-formatとsimple-xmlは、SQL操作でカスタマイズされます。例: <simple-xml-format> = <aggregate-info>, <simple-xml> = <count-and-max-salary>

2.4.1.1 生成されたEclipseLink DBWSサービス・ディスクリプタ

デフォルトの<element-tag>名Simple XML Formatを変更する設定とともに、SQL操作はEclipseLinkで作成されるDBWSサービス・ディスクリプタ・ファイル(eclipselink-dbws.xml)に含まれます。

例2-9 サンプルXMLファイル

<?xml version="1.0" encoding="UTF-8"?>
<dbws xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="urn:testSql" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>testSql</name>
<sessions-file>eclipselink-dbws-sessions.xml</sessions-file>
<query>
<name>count</name>
<result>
<type>simple-xml-format</type>
<simple-xml-format>
<simple-xml-format-tag>aggregate-info</simple-xml-format-tag>
<simple-xml-tag>count</simple-xml-tag>
</simple-xml-format>
</result>
<sql>
<![CDATA[select count(*) from EMP]]>
</sql>
</query>
<query>
<name>countAndMaxSalary</name>
<result>
<type>simple-xml-format</type>
<simple-xml-format>
<simple-xml-format-tag>aggregate-info</simple-xml-format-tag>
<simple-xml-tag>count-and-max-salary</simple-xml-tag>
</simple-xml-format>
</result>
<sql>
<![CDATA[select count(*) as "COUNT", max(SAL) as "MAX-Salary" from EMP]]>
</sql>
</query>
</dbws>

2.4.1.1.1 SOAPメッセージ

次のSOAPメッセージによって、DBWSサービスtestSqlに対して<count>操作を起動します。

<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
<env:Body>
<count xmlns="urn:testSqlService" xmlns:urn="urn:testSql"/>
</env:Body>
</env:Envelope>

次のように戻されます。

<?xml version="1.0" encoding="utf-16"?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Header />
<SOAP-ENV:Body>
<srvc:countResponse xmlns:srvc="urn:testSqlService">
<srvc:result>
<aggregate-info xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="simple-xml-format">
<count>
<COUNT_x0028__x002A__x0029_>14</COUNT_x0028__x002A__x0029_>
</count>
</aggregate-info>
</srvc:result>
</srvc:countResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

注意:

SQL/X仕様(SQL/XML:2003)に記載のとおり、select count(*);のresultSetで、(、*および)の文字は、XML要素タグには使用できず、既知の変換結果に置き換えられることに注意してください。

2.4.1.1.2 表ベースのWebサービスのサブ操作としてのカスタムSQL

SOAPメッセージ操作では、構造化されていないデータが戻されます。ただし、そのような表ベースの操作のコンテキスト内の操作をネストすることが可能で、そのネストした処理を親表のスキーマ要素型を再使用するように構成し、構造化データを戻すことができます。

<dbws-builder>
<properties>
<property name="projectName">empSql</property>
... database properties
</properties>
<table
catalogPattern="%"
tableNamePattern="EMP"
>
<sql
name="findEmpByName"
isCollection="true"
returnType="empType"
>
<text><![CDATA[select * from EMP where ENAME like ?]]></text>
<binding name="ENAME" type="xsd:string"/>
</sql>
</table>
</dbws-builder>

生成されたEclipseLink DBWSサービス・ディスクリプタeclipselink-dbws.xmlファイル:

例2-10 eclipselink-dbws.xmlファイルの例

<dbws xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="urn:testSql" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<name>empSql</name>
<sessions-file>eclipselink-dbws-sessions.xml</sessions-file>
<update>
<name>update_empType</name>
<parameter>
<name>theInstance</name>
<type>ns1:empType</type>
</parameter>
</update>
...
<query>
<name>findEmpByName</name>
<parameter>
<name>ENAME</name>
<type>xsd:string</type>
</parameter>
<result isCollection="true">
<type>ns1:empType</type>
</result>
<sql>
<![CDATA[select * from EMP where ENAME like #ENAME]]>
</sql>
</query>
</dbws>

2.4.2 カスタムSQL SELECT文のスキーマ形式の結果を使用した作成

EclipseLinkでは、戻される結果の形式を実行時ではなく設計時に指定するWebサービスを作成することもできます。通常、カスタムSQL SELECT文はjava.sql.ResultSetsを戻し、戻される情報の名前とデータ型はjava.sql.ResultSetMetaData API(getColumnCount、getColumnLabel、getColumnTypeなど)を使用して指定することができます。

EclipseLink DBWSは、Simplified XML Format (SXF)を使用してXMLドキュメントを作成し、ResultSetの情報を記述します。ただしこのドキュメントは任意に変更することができるため、SXFスキーマは非常に自由度が高く、ドキュメントでのxsd:anyの使用には事実上制限がありません。

例2-11 サンプル・スキーマ

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:complexType name="simple-xml-format">
<xsd:sequence>
<xsd:any minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

例2-12 インスタンス・ドキュメント:

<source lang="xml">
<?xml version = '1.0' encoding = 'UTF-8'?>
<simple-xml-format>
<simple-xml>
<EMPNO>7788</EMPNO>
<ENAME>SCOTT</ENAME>
<JOB>ANALYST</JOB>
<MGR>7566</MGR>
<HIREDATE>1987-04-19</HIREDATE>
<SAL>3000</SAL>
<DEPTNO>20</DEPTNO>
</simple-xml>
<simple-xml>
<EMPNO>7369</EMPNO>
<ENAME>SMITH</ENAME>
<JOB>CLERK</JOB>
<MGR>7902</MGR>
<HIREDATE>1980-12-17</HIREDATE>
<SAL>800</SAL>
<DEPTNO>20</DEPTNO>
</simple-xml>
</simple-xml-format>

2.4.2.1 その他の設計時の情報

前述のとおり、設計時にjava.sql.ResultSetMetaData APIを利用できる場合、スキーマの作成に十分な情報を得ることができます。次に例を示します。

例2-13 サンプル・スキーマ

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:emp" xmlns="urn:emp" elementFormDefault="qualified">
<xsd:complexType name="empType">
<xsd:sequence>
<xsd:element name="empno" type="xsd:decimal"/>
<xsd:element name="ename" type="xsd:string" minOccurs="0" nillable="true"/>
<xsd:element name="job" type="xsd:string" minOccurs="0" nillable="true"/>
<xsd:element name="mgr" type="xsd:decimal" minOccurs="0" nillable="true"/>
<xsd:element name="hiredate" type="xsd:date" minOccurs="0" nillable="true"/>
<xsd:element name="sal" type="xsd:decimal" minOccurs="0" nillable="true"/>
<xsd:element name="comm" type="xsd:decimal" minOccurs="0" nillable="true"/>
<xsd:element name="deptno" type="xsd:decimal" minOccurs="0" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="empType" type="empType"/>
</xsd:schema>

設計時にSQL文を追加で実行することでDBWSのsql操作が高度なものになります。文では行を戻しません(例2-14のWHERE句の評価がfalseの場合など):

例2-14 SQL文の追加実行

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema"
<properties>
<property name="projectName">emp</property>
...
</properties>
<sql
name="Semployees"
isCollection="false"
returnType="empType"
>
<statement><![CDATA[select * from EMP where ENAME like 'S%']]></statement>
<build-statement><![CDATA[select * from EMP where 0=1]]></build-statement>
</sql>
</dbws-builder>

2.4.2.2 問題と制限の理解

次の制限に注意してください。

- ラベルの繰返し

- 互換性のある列ラベルの設定

2.4.2.2.1 ラベルの繰返し

有効なSQLで、複数の同一の列を指定できます。たとえば、次のSQLを考えてみます。

SELECT ENAME, ENAME FROM EMP WHERE LIKE 'S%'

ENAME

ENAME

SMITH

SMITH

...

...

SCOTT

SCOTT

この例で、UNIONを使用するSELECT文は一連の列ラベルを戻し、ラベルには繰返しがあります。

DBWSBuilderは、すでに処理された列を保持し、重複を検出したときに例外をスローします。

2.4.2.2.2 互換性のある列ラベルの設定

実行時SQL文と設計時のSQL文で、互換性のある列ラベルの設定を戻す必要があります。EclipseLinkは、列の設定を同一にするための事前処理を実行しないため、サービスが起動されると実行時にエラーが検出されます。

2.5 ストアド・プロシージャからの作成

EclipseLink DBWSでは、ストアド・プロシージャ(または複数のプロシージャ)を表示するWebサービスを作成できます。ストアド・プロシージャのメタデータから戻されるデータの構造は判断できないため、EclipseLinkでは単純なXML形式のスキーマを使用します。EclipseLink DBWSでは、実行時に単純で読みやすいXMLドキュメントを作成します。

EclipseLink DBWSはIN、OUTおよびIN OUTといった引数の任意の組合せをサポートします。またEclipseLinkではオーバーロードされる(異なるパラメータの同じ名前)パッケージ内のプロシージャもサポートします。

2.5.1 例

この例では次のストアド・プロシージャを使用します。

DROP PROCEDURE TESTECHO;
CREATE OR REPLACE PROCEDURE TESTECHO(T IN VARCHAR2, U OUT VARCHAR2) AS
BEGIN
U := CONCAT(T, '-test');
END;

DBWSBuilderユーティリティでは、入力として次に示すようなDBWS構成XMLファイルが必要です。

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">testEcho</property>
... database properties
</properties>
<procedure
name="testEcho"
procedurePattern="TESTECHO"
isSimpleXMLFormat="true"
/>
</dbws-builder>

次のようにしてDBWSBuilderを実行します。

prompt > dbwsbuilder.cmd -builderFile dbws-builder.xml -stageDir output_directory -packageAs wls testEcho.war

説明:

- dbws-builder.xml : DBWS builder XML構成ファイル(前述のとおり)

- output_directory: 生成されるファイルの出力ディレクトリ

- packageAs: Webサービスがデプロイされるプラットフォーム

生成されるeclipselink-dbws-schema.xsdファイルは、次に示すように、単純なXML形式のスキーマです。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
>
<xsd:complexType name="simple-xml-format">
<xsd:sequence>
<xsd:any minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:schema>

SQL操作で適切なプロパティを設定することで、simple-xml-formatタグとsimple-xmlタグをカスタマイズすることができます。

2.6 ストアド・ファンクションからの作成

EclipseLink DBWSでは、単純なストアド・ファンクションを表示するWebサービスを作成できます。

2.6.1 例

この例では、次のストアド・ファンクションが使用されます。

DROP FUNCTION TESTECHO;
CREATE OR REPLACE FUNCTION TESTECHO(T IN VARCHAR2) RETURN VARCHAR2 IS retVal VARCHAR2
BEGIN
retVal := CONCAT('test-' , T);
RETURN retVal;
END TESTECHO;

DBWSBuilderユーティリティでは、入力として次に示すようなDBWS構成XMLファイルが必要です。

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">testEcho</property>
... database properties
</properties>
<procedure
name="testEcho"
procedurePattern="TESTECHO"
returnType="xsd:string"
/>
</dbws-builder>

次のようにしてDBWSBuilderを実行します。

prompt > dbwsbuilder.cmd -builderFile dbws-builder.xml -stageDir output_directory -packageAs wls testEcho.war

説明:

- dbws-builder.xml : DBWS builder XML構成ファイル(前述のとおり)

- output_directory: 生成されるファイルの出力ディレクトリ

- -packageAs: Webサービスがデプロイされるプラットフォーム

2.7 複合PL/SQL引数を使用したストアド・プロシージャからの作成

TopLinkを使用すると、IN引数、OUT引数、またはIN OUT引数のいずれかに複合PL/SQL型を使用するストアド・プロシージャからDBWSのWebサービスを作成できます。

2.7.1 例

この例では、次のストアド・ファンクションが使用されます。

PROCEDURE P1(OLDREC IN ARECORD, FOO IN VARCHAR2, AREC OUT ARECORD) IS  BEGIN    AREC.T1 := ... some processing based upon OLDREC    AREC.T2 := ... AND FOO    AREC.T3 := ...  END P1;

型ARECORDはPL/SQLパッケージSOMEPACKAGE内で、次のように定義されています。

CREATE OR REPLACE PACKAGE SOMEPACKAGE AS
TYPE TBL1 IS TABLE OF VARCHAR2(111) INDEX BY BINARY_INTEGER;
TYPE TBL2 IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
TYPE ARECORD IS RECORD (
T1 TBL1,
T2 TBL2,
T3 BOOLEAN
);
PROCEDURE P1(OLDREC IN ARECORD, FOO IN VARCHAR2, AREC OUT ARECORD);
END SOMEPACKAGE;

PL/SQLのレコードとコレクション型はJDBC経由で送ることができないため、TopLinkはJDBCおよびPL/SQl型と変換するファンクションが含まれる、PL/SQLコードの無名ブロックを生成します。正常に完了させるには、IN、IN OUTまたはOUT OF RETURN引数(これらの引数内でネストされているPL/SQLレコードまたはコレクション・タイプ)で使用されるそれぞれのPL/SQL型またはコレクション型のJDBC型は同じである必要があります。この型の名前は、<package name>_<type name>の形式にします。

この例では、次のJDBC型が必要です。

CREATE OR REPLACE TYPE SOMEPACKAGE_TBL1 AS TABLE OF VARCHAR2(111)

CREATE OR REPLACE TYPE SOMEPACKAGE_TBL2 AS TABLE OF NUMBER

CREATE OR REPLACE TYPE SOMEPACKAGE_ARECORD AS OBJECT (
T1 SOMEPACKAGE_TBL1,
T2 SOMEPACKAGE_TBL2,
T3 BOOLEAN
)

DBWSBuilderユーティリティでは、入力としてDBWS構成ファイルが必要です。

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">testPLSQLProcedure</property>
... database properties
</properties>
<plsql-procedure
name="plsqlprocedure"
catalogPattern="SOMEPACKAGE"
procedurePattern="P1"
/>
</dbws-builder>

returnTypeはSOMEPACKAGE_ARECORDに設定されます。この値は、生成されたEclipseLink DBWSスキーマの複合型を示します(次に示します)。ここではSOMEPACKAGEパッケージのコンテンツに基づいて作成されます。

次のようにしてDBWSBuilderを実行します。

prompt > dbwsbuilder.cmd -builderFile dbws-builder.xml -stageDir output_directory -packageAs wls testPLSQLProcedure.war

説明:

- dbws-builder.xml: DBWS Builderの構成ファイル(前述のとおり)

- output_directory: 生成されるファイルの出力ディレクトリ

- -packageAs: Webサービスがデプロイされるプラットフォーム

生成されるeclipselink-dbws-schema.xsdファイルは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:plsqlprocedure" xmlns="urn:plsqlprocedure" elementFormDefault="qualified">
<xsd:complexType name="SOMEPACKAGE_TBL1">
<xsd:sequence>
<xsd:element name="item" type="xsd:string" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SOMEPACKAGE_TBL2">
<xsd:sequence>
<xsd:element name="item" type="xsd:decimal" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SOMEPACKAGE_ARECORD">
<xsd:sequence>
<xsd:element name="t1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item" type="xsd:string" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="t2">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item" type="xsd:decimal" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="t3" type="xsd:boolean" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="simple-xml-format">
<xsd:sequence>
<xsd:any minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="SOMEPACKAGE_TBL1" type="SOMEPACKAGE_TBL1"/>
<xsd:element name="SOMEPACKAGE_TBL2" type="SOMEPACKAGE_TBL2"/>
<xsd:element name="SOMEPACKAGE_ARECORD" type="SOMEPACKAGE_ARECORD"/>
</xsd:schema>

2.8 複合PL/SQL引数を使用したストアド・ファクションからの作成

EclipseLink 2.3から、IN引数または戻される引数に複合PL/SQL型を使用するストアド・ファンクションからDBWS Webサービスを作成できるようになりました。

2.8.1 例

この例では、次のストアド・ファンクションが使用されます。

FUNCTION F1(OLDREC IN ARECORD, FOO IN VARCHAR2) RETURN ARECORD IS
arec ARECORD; -- temp var
BEGIN
arec.T1 := ... some processing based upon OLDREC
arec.T2 := ... AND FOO
arec.T3 := ...
RETURN arec;
END F1;

型ARECORDはPL/SQLパッケージSOMEPACKAGE内で、次のように定義されています。

CREATE OR REPLACE PACKAGE SOMEPACKAGE AS
TYPE TBL1 IS TABLE OF VARCHAR2(111) INDEX BY BINARY_INTEGER;
TYPE TBL2 IS TABLE OF NUMBER INDEX BY BINARY_INTEGER;
TYPE ARECORD IS RECORD (
T1 TBL1,
T2 TBL2,
T3 BOOLEAN
);
FUNCTION F1(OLDREC IN ARECORD, FOO IN VARCHAR2) RETURN ARECORD;
END SOMEPACKAGE;

PL/SQL型とコレクション型はJDBC経由で送ることができないため、TopLinkはJDBCおよびPL/SQl型と変換するファンクションが含まれる、PL/SQLコードの無名ブロックを生成します。正常に完了させるには、IN、IN OUTまたはOUT OF RETURN引数(これらの引数内でネストされているPL/SQLレコードまたはコレクション・タイプ)で使用されるそれぞれのPL/SQL型またはコレクション型のJDBC型は同じである必要があります。この型の名前は、<package name>_<type name>の形式にします。

この例では、次のJDBC型が必要です。

CREATE OR REPLACE TYPE SOMEPACKAGE_TBL1 AS TABLE OF VARCHAR2(111)

CREATE OR REPLACE TYPE SOMEPACKAGE_TBL2 AS TABLE OF NUMBER

CREATE OR REPLACE TYPE SOMEPACKAGE_ARECORD AS OBJECT (
T1 SOMEPACKAGE_TBL1,
T2 SOMEPACKAGE_TBL2,
T3 BOOLEAN
)

DBWSBuilderユーティリティでは、入力としてDBWS構成ファイルが必要です。

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">testPLSQLFunction</property>
... database properties
</properties>
<plsql-procedure
name="plsqlfunction"
catalogPattern="SOMEPACKAGE"
procedurePattern="F1"
returnType="SOMEPACKAGE_ARECORD"
/>
</dbws-builder>

returnTypeはSOMEPACKAGE_ARECORDに設定されます。この値は、生成されたEclipseLink DBWSスキーマの複合型を示します(次に示します)。ここではSOMEPACKAGEパッケージのコンテンツに基づいて作成されます。

次のようにしてDBWSBuilderを実行します。

prompt > dbwsbuilder.cmd -builderFile dbws-builder.xml -stageDir output_directory -packageAs wls testPLSQLFunction.war

説明:

- dbws-builder.xml: DBWS Builderの構成ファイル(前述のとおり)

- output_directory: 生成されるファイルの出力ディレクトリ

- -packageAs: Webサービスがデプロイされるプラットフォーム

生成されるeclipselink-dbws-schema.xsdファイルは次のとおりです。

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="urn:plsqlfunction" xmlns="urn:plsqlfunction" elementFormDefault="qualified">
<xsd:complexType name="SOMEPACKAGE_TBL1">
<xsd:sequence>
<xsd:element name="item" type="xsd:string" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SOMEPACKAGE_TBL2">
<xsd:sequence>
<xsd:element name="item" type="xsd:decimal" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="SOMEPACKAGE_ARECORD">
<xsd:sequence>
<xsd:element name="t1">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item" type="xsd:string" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="t2">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="item" type="xsd:decimal" maxOccurs="unbounded" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
<xsd:element name="t3" type="xsd:boolean" nillable="true"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="simple-xml-format">
<xsd:sequence>
<xsd:any minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="SOMEPACKAGE_TBL1" type="SOMEPACKAGE_TBL1"/>
<xsd:element name="SOMEPACKAGE_TBL2" type="SOMEPACKAGE_TBL2"/>
<xsd:element name="SOMEPACKAGE_ARECORD" type="SOMEPACKAGE_ARECORD"/>
</xsd:schema>

2.9 オーバーロードされたPL/SQLストアド・プロシージャからの作成

リリース2.3から、EclipseLInk DBWSでは、複数のPL/SQLストアド・プロシージャを表示するWebサービスを作成できるようになりました。DBWS Builderファイル内のすべてのストアド・プロシージャを指定するのではなく、プロシージャ名を1つだけ指定し、異なるパラメータでオーバーロードできます。

注意:

この機能ではOracleのようにオーバーロードをサポートしているデータベースが必要です。

2.9.1 例

この例では、ストアド・プロシージャに異なるパラメータが含まれています。

CREATE PROCEDURE P(SIMPLARRAY IN TBL1, FOO IN VARCHAR2) AS
BEGIN
-- 2 arguments SIMPLARRAY and FOO
END P;
CREATE PROCEDURE P(SIMPLARRAY IN TBL1, FOO IN VARCHAR2, BAR IN VARCHAR2) AS
BEGIN
-- (same name 'P') 3 arguments SIMPLARRAY, FOO and BAR
END P;

EclipseLink DBWSはIN、OUTおよびIN OUTといった引数の任意の組合せをサポートします。

型TBL1はPL/SQLパッケージSOMEPACKAGE内で、次のように定義されています。

CREATE OR REPLACE PACKAGE SOMEPACKAGE AS
TYPE TBL1 IS TABLE OF VARCHAR2(111) INDEX BY BINARY_INTEGER;
PROCEDURE P(SIMPLARRAY IN TBL1, FOO IN VARCHAR2);
PROCEDURE P(SIMPLARRAY IN TBL1, FOO IN VARCHAR2, BAR IN VARCHAR2);
END SOMEPACKAGE;

DBWSBuilderユーティリティでは、入力として次に示すようなDBWS構成ファイルが必要です。

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">testOverloadedProcedure</property>
... database properties
</properties>
<plsql-procedure
name="overloadedProcedure"
catalogPattern="SOMEPACKAGE"
procedurePattern="P"
/>
</dbws-builder>

DBWSBuilderを実行するには、次のコマンドを使用します。

prompt > dbwsbuilder.cmd -builderFile dbws-builder.xml -stageDir output_directory -packageAs wls testEcho.war

説明:

- dbws-builder.xml: DBWS構成ファイル(前述のとおり)

- output_directory: 生成されるファイルの出力ディレクトリ

- -packageAs : Webサービスがデプロイされるプラットフォーム

オーバーロードされるプロシージャが使用される問合せおよびWSDLの生成時、一意の索引で各プロシージャを識別します。索引は1から開始し、オーバーロードされるプロシージャごとに1ずつ増分します。

この例で、EclipseLinkは次のeclipselink-dbws.wsdl(Web Services Description Language)を生成します。

<wsdl:definitions
name="plsqloverloadService"
targetNamespace="urn:plsqloverloadService"
xmlns:ns1="urn:plsqloverload"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
xmlns:tns="urn:plsqloverloadService"
xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
>
<wsdl:types>
<xsd:schema elementFormDefault="qualified" targetNamespace="urn:plsqloverloadService" xmlns:tns="urn:plsqloverloadService"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:import namespace="urn:plsqloverload" schemaLocation="eclipselink-dbws-schema.xsd"/>
<xsd:complexType name="p1ResponseType">
<xsd:sequence>
<xsd:element name="result">
<xsd:complexType><xsd:sequence><xsd:any/></xsd:sequence></xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="p1RequestType">
<xsd:sequence>
<xsd:element name="SIMPLARRAY" type="ns1:SOMEPACKAGE_TBL1"/>
<xsd:element name="FOO" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="p2ResponseType">
<xsd:sequence>
<xsd:element name="result">
<xsd:complexType><xsd:sequence><xsd:any/></xsd:sequence></xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
<xsd:complexType name="p2RequestType">
<xsd:sequence>
<xsd:element name="SIMPLARRAY" type="ns1:SOMEPACKAGE_TBL1"/>
<xsd:element name="FOO" type="xsd:string"/>
<xsd:element name="BAR" type="xsd:string"/>
</xsd:sequence>
</xsd:complexType>
<xsd:element name="p2" type="tns:p2RequestType"/>
<xsd:element name="p1" type="tns:p1RequestType"/>
<xsd:element name="p1Response" type="tns:p1ResponseType"/>
<xsd:element name="p2Response" type="tns:p2ResponseType"/>
</xsd:schema>
</wsdl:types>
<wsdl:message name="p2Request"><wsdl:part name="p2Request" element="tns:p2"/></wsdl:message>
<wsdl:message name="p2Response"><wsdl:part name="p2Response" element="tns:p2Response"/></wsdl:message>
<wsdl:message name="p1Request"><wsdl:part name="p1Request" element="tns:p1"/></wsdl:message>
<wsdl:message name="p1Response"><wsdl:part name="p1Response" element="tns:p1Response"/></wsdl:message>
<wsdl:portType name="plsqloverloadService_Interface">
<wsdl:operation name="p2">
<wsdl:input message="tns:p2Request"/>
<wsdl:output message="tns:p2Response"/>
</wsdl:operation>
<wsdl:operation name="p1">
<wsdl:input message="tns:p1Request"/>
<wsdl:output message="tns:p1Response"/>
</wsdl:operation>
</wsdl:portType>
<wsdl:binding name="plsqloverloadService_SOAP_HTTP" type="tns:plsqloverloadService_Interface">
<soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
<wsdl:operation name="p2">
<soap:operation soapAction="urn:plsqloverloadService:p2"/>
<wsdl:input><soap:body use="literal"/></wsdl:input>
<wsdl:output><soap:body use="literal"/></wsdl:output>
</wsdl:operation>
<wsdl:operation name="p1">
<soap:operation soapAction="urn:plsqloverloadService:p1"/>
<wsdl:input><soap:body use="literal"/></wsdl:input>
<wsdl:output><soap:body use="literal"/></wsdl:output>
</wsdl:operation>
</wsdl:binding>
<wsdl:service name="plsqloverloadService">
<wsdl:port name="plsqloverloadServicePort" binding="tns:plsqloverloadService_SOAP_HTTP">
<soap:address location="REPLACE_WITH_ENDPOINT_ADDRESS"/>
</wsdl:port>
</wsdl:service>
</wsdl:definitions>

脚注の凡例

脚注 1: 同じアルゴリズムが次の一部として記載されています: SQL/X (またはSQL/XML:2003)仕様。

3 DBWS デザインタイムAPIの高度なアクセス方法

この章では、EclipseLink DBWSデザインタイムAPIの高度なアクセス方法について説明します。

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

- DBWSBuilderとAntの使用

3.1 DBWSBuilderとAntの使用

EclipseLink DBWSを使用して、Apache Ant (http://ant.apache.org/)からDBWSBuilderを起動して必要なファイルを生成、コンパイルし、他のAntターゲットとともにアプリケーションをパッケージ化できます。

3.1.1 例

この例は、Antを使用してデプロイ可能なWebアーカイブを生成する方法を示しています。この例では、次のファイル配置を考えてみます。

<example-root>

dbws-builder.xml (例3-1を参照)
build.xml (例3-2を参照)
build.properties (例3-3参照)

jlib
eclipselink.jar
eclipselink-dbwsutils.jar
javax.servlet.jar
javax.wsdl.jar
ojdbc6.jar
org.eclipse.persistence.oracleddlparser.jar

stage
生成されるすべてのアーティファクトがここに保存されます。最も重要なのはsimpletable.warです。

この例でDBWS Builderを実行するには、<example-root>ディレクトリにantを入力します。Builderによって、生成されたアーティファクトがstageディレクトリのWebアーカイブ(simpletable.war)にパッケージされます。この .warファイルを、WebLogicにデプロイできます。

例3-1 DBWS Builderファイル(dbws-builder.xml)の例

<?xml version="1.0" encoding="UTF-8"?>
<dbws-builder xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<properties>
<property name="projectName">simpletable</property>
... database properties
</properties>

<table
schemaPattern="SCOTT"
tableNamePattern="SIMPLETABLE"
/>
</dbws-builder>

例3-2 ビルドXMLファイル(build.xml)の例

<?xml version="1.0"?>
<project name="simpletable" default="build">
<property file="${basedir}/build.properties"/>

<path id="build.path">
<fileset
dir="${jlib.dir}"
includes="eclipselink.jar
eclipselink-dbwsutils.jar
org.eclipse.persistence.oracleddlparser.jar
javax.wsdl.jar
javax.servlet.jar
ojdbc6.jar"
>
</fileset>
</path>

<target name="build">
<java
classname="org.eclipse.persistence.tools.dbws.DBWSBuilder"
fork="true"
classpathRef="build.path"
>
<arg line="-builderFile ${dbws.builder.file} -stageDir ${stage.dir} -packageAs ${server.platform} ${ant.project.name}.war"/>
</java>
</target>
</project>

例3-3 ビルド・プロパティ・ファイル(build.properties)の例

custom = true
build.sysclasspath=ignore

stage.dir=${basedir}/stage
jlib.dir=${basedir}/jlib
server.platform=wls
dbws.builder.file=dbws-builder.xml

オラクル社の法律上の注意点について

コピーライトについて

Copyright © 1994-2015, Oracle and/or its affiliates.All rights reserved.

商標と登録商標について

OracleおよびJavaはOracle Corporationおよびその関連企業の登録商標です。その他の名称は、それぞれの所有者の商標または登録商標です。

Intel、Intel Xeonは、Intel Corporationの商標または登録商標です。すべてのSPARCの商標はライセンスをもとに使用し、SPARC International, Inc.の商標または登録商標です。AMD、Opteron、AMDロゴ、AMD Opteronロゴは、Advanced Micro Devices, Inc.の商標または登録商標です。UNIXは、The Open Groupの登録商標です。

ライセンス制約の保証と結果的に生じる損害の免責

このソフトウェアおよび関連ドキュメントの使用と開示は、ライセンス契約の制約条件に従うものとし、知的財産に関する法律により保護されています。ライセンス契約で明示的に許諾されている場合もしくは法律によって認められている場合を除き、形式、手段に関係なく、いかなる部分も使用、複写、複製、翻訳、放送、修正、ライセンス供与、送信、配布、発表、実行、公開または表示することはできません。このソフトウェアのリバース・エンジニアリング、逆アセンブル、逆コンパイルは互換性のために法律によって規定されている場合を除き、禁止されています。

保証免責

ここに記載された情報は予告なしに変更される場合があります。また、誤りが無いことの保証はいたしかねます。誤りを見つけた場合は、オラクル社までご連絡ください。

制限付権利

このソフトウェアまたは関連ドキュメントを、米国政府機関もしくは米国政府機関に代わってこのソフトウェアまたは関連ドキュメントをライセンスされた者に提供する場合は、次の通知が適用されます。

U.S. GOVERNMENT END USERS: Oracle programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, delivered to U.S. Government end users are "commercial computer software" pursuant to the applicable Federal Acquisition Regulation and agency-specific supplemental regulations.As such, use, duplication, disclosure, modification, and adaptation of the programs, including any operating system, integrated software, any programs installed on the hardware, and/or documentation, shall be subject to license terms and license restrictions applicable to the programs.No other rights are granted to the U.S. Government.

危険な用途への使用について

このソフトウェアもしくはハードウェアは様々な情報管理アプリケーションでの一般的な使用のために開発されたものです。このソフトウェアもしくはハードウェアは、危険が伴うアプリケーション（人的傷害を発生させる可能性があるアプリケーションを含む）への用途を目的として開発されていません。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用する際、安全に使用するために、適切な安全装置、バックアップ、冗長性（redundancy）、その他の対策を講じることは使用者の責任となります。このソフトウェアもしくはハードウェアを危険が伴うアプリケーションで使用したことに起因して損害が発生しても、オラクル社およびその関連会社は一切の責任を負いかねます。

第三者のコンテンツ、製品、サービスに対する免責事項

このソフトウェアまたはハードウェア、そしてドキュメントは、第三者のコンテンツ、製品、サービスへのアクセス、あるいはそれらに関する情報を提供することがあります。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスに関して一切の責任を負わず、いかなる保証もいたしません。オラクル社およびその関連会社は、第三者のコンテンツ、製品、サービスへのアクセスまたは使用によって損失、費用、あるいは損害が発生しても一切の責任を負いかねます。

ドラフトのアルファ版およびベータ版ドキュメントについて

このドキュメントが試作版の場合:

このドキュメントは試作版であり、デモおよび暫定使用のみを目的としたものです。このソフトウェアを使用するハードウェアに限定するものではありません。オラクル社およびその関連会社は、このドキュメントに関して一切の責任を負わず、いかなる保証もいたしません。また、このドキュメントを使用したことによって損失、費用、あるいは損害が発生しても、一切の責任を負いかねます。