Oracle® Fusion Middleware

Oracle ADFデータ・コントロールによるアプリケーションの開発

12c (12.2.1.2.0)

E82916-01(原本部品番号:E76681-01)

2016年10月

Enterprise JavaBeans (EJB)とプレーンJavaオブジェクト用、およびSOAP WebサービスとREST Webサービス用のデータ・コントロールの作成と構成を行う方法について説明した、Oracle Application Development Framework (Oracle ADF)開発者向けのドキュメントです。

Oracle Fusion Middleware Oracle ADFデータ・コントロールによるアプリケーションの開発 12c (12.2.1.2.0)

E82916-01

Copyright © 2013, 2016, Oracle and/or its affiliates  All rights reserved.

原本著者:  Sandhya Sriram

原本協力者: Jon Wetherbee、Jim Pham、Vinay Agarwal

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

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

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

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および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の登録商標です。

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

目次

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

はじめに

- 対象読者

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

- 関連ドキュメント

- 表記規則

このガイドで説明する新機能

- リリース12c(12.2.1.2.0)の新機能と変更された機能

1 ADFモデルの概要

- 1.1 ADFモデルについて

- 1.2 データ・コントロールのタイプ

- 1.3 このガイドで説明しないデータ・コントロール

- 1.4 アダプタ・フレームワークを使用しないデータ・コントロールに関する必知事項

2 ADFデータ・コントロールの使用

- 2.1 データ・コントロール・アプリケーションの中心となる開発ステップ

- 2.2 データ・コントロールを使用したビジネス・サービスの公開

- 2.2.1 ADFデータ・コントロールの作成方法

- 2.2.2 データ・コントロール作成時のプロジェクト内の処理

- 2.2.2.1 DataControls.dcx概要エディタ

- 2.2.2.2 「データ・コントロール」パネル

- 2.2.3 「データ・コントロール」パネルのビジネス・サービスの表示

- 2.2.4 データ・コントロールの組込み操作

- 2.3 「データ・コントロール」パネルでのデータバインドされたUIコンポーネントの作成

- 2.3.1 「データ・コントロール」パネルの使用方法

- 2.3.2 「データ・コントロール」パネルの使用時の処理

- 2.3.3 イテレータの結果のキャッシュに関する必知事項

- 2.3.3.1 結果セットをキャッシュしないようにするイテレータの設定

- 2.3.3.2 ボタンを使用したイテレータの再実行

3 EJBデータ・コントロールの作成および構成

- 3.1 EJBデータ・コントロールについて

- 3.1.1 EJBデータ・コントロールのユースケースと例

- 3.1.2 EJBデータ・コントロールの追加機能

- 3.2 データ・コントロールで使用するセッションBeanの準備

- 3.2.1 EJBデータ・コントロールでサポートされる型とコンストラクト

- 3.2.2 EJBデータ・コントロール・オブジェクト

- 3.2.3 セッション・ファサード・パターンについて

- 3.2.4 EJBデータ・コントロールの前提条件と考慮事項

- 3.2.4.1 推奨されるエンティティBeanの要素

- 3.2.4.2 推奨されるセッション・ファサードの要素

- 3.2.4.3 オーバーロードされたGetメソッドに関する必知事項

- 3.2.5 JDeveloperでのデータ・コントロール用EJBの作成

- 3.2.6 EJBおよびBeanデータ・コントロールがgetterメソッドを使用する方法に関する必知事項

- 3.2.7 EJBセッションBeanのコミット・モデルについて

- 3.2.7.1 暗黙的コミット・モデル

- 3.2.7.2 明示的コミット・モデル

- 3.2.8 @GeneratedValueアノテーションを使用した主キーのIDの生成について

- 3.2.9 永続性ユニットのスキーマ生成動作を変更する方法

- 3.2.10 セッション・ファサードを自動的に更新する方法

- 3.2.11 JPA問合せのリフレッシュに関する必知事項

- 3.3 ADFデータ・コントロールを使用したセッションBeanサービスの公開

- 3.3.1 EJBデータ・コントロールを作成する方法

- 3.3.2 EJBデータ・コントロール作成時のプロジェクトにおける処理内容

- 3.3.3 EJBおよびBeanデータ・コントロールのIDEでの表示

- 3.3.3.1 EJBおよびBeanデータ・コントロールのDataControls.dcx概要エディタ

- 3.3.3.2 EJBおよびBeanデータ・コントロールの「データ・コントロール」パネル

- 3.3.3.3 EJBおよびBeanデータ・コントロールの組込み操作

- 3.3.4 「名前付き基準のサポート」オプションおよびページングに関する必知事項

- 3.3.5 EJBデータ・コントロールのCRUD操作に関する必知事項

- 3.3.6 マージ・メソッドと永続化メソッドに関する必知事項

- 3.3.7 削除メソッドに関する必知事項

- 3.3.8 新規行の自動永続化について

- 3.3.9 EagerPersistプロパティを変更する方法

- 3.3.10 永続性コンテキストと問合せの再発行に関する必知事項

- 3.3.11 単一のBeanに対して異なるデータ・コントロールを作成する方法

- 3.3.12 追加のデータ・コントロール・インスタンスを作成する際の処理内容

- 3.4 EJBデータ・コントロールでのデータのページ分割されたフェッチ

- 3.4.1 データ・コントロールのページング・モードを変更する方法

- 3.4.2 範囲ページングを使用するデータ・コントロールにレンジ・サイズを設定する方法

- 3.4.3 スクロール可能モードおよび範囲ページング・モードに関する必知事項

- 3.4.4 データ・コントロールで個別オブジェクトにアクセス・モードを指定する方法

- 3.4.5 範囲がページ分割されたコレクションに基づいた表のソートに関する必知事項

- 3.5 アノテーションを使用した属性のUIヒントの提供

- 3.6 EJBデータ・コントロールのフェイルオーバーの有効化

4 Beanデータ・コントロールの作成と構成

- 4.1 Beanデータ・コントロールについて

- 4.1.1 JPAベースのBeanデータ・コントロールについて

- 4.1.2 非JPA Beanデータ・コントロールについて

- 4.1.3 Beanデータ・コントロールの追加機能

- 4.2 データ・コントロールによって公開するBeanの準備

- 4.2.1 Beanデータ・コントロールでサポートされる型とコンストラクト

- 4.2.2 Beanデータ・コントロール・オブジェクト

- 4.2.3 Beanデータ・コントロールの前提条件と考慮事項

- 4.2.4 JPAベースのBeanデータ・コントロールのサービス・ファサードを作成する方法

- 4.3 Beanデータ・コントロールによるJavaコレクションとメソッドの公開

- 4.3.1 JPAベースのBeanデータ・コントロールを作成する方法

- 4.3.2 非JPAベースのBeanデータ・コントロールを作成する方法

- 4.3.3 Beanデータ・コントロール作成時のプロジェクト内の処理

- 4.3.4 非JPA Beanデータ・コントロールの主キーに関する必知事項

- 4.4 Beanデータ・コントロールでのデータのページ分割されたフェッチ

- 4.4.1 データ・コントロールでページ分割サポートを手動で実装する方法

- 4.4.2 問合せおよびページ分割にカスタム・ハンドラを実装する方法

- 4.5 Beanデータ・コントロールでのフェイルオーバーの有効化

- 4.5.1 コンストラクタからのPageFlowScopeのコールに関する必知事項

- 4.6 Beanデータ・コントロールのカスタムCRUD操作の有効化

- 4.7 非JPA Beanデータ・コントロールへのトランザクション動作の追加

- 4.8 アノテーションを使用したBeanデータ・コントロールのメタデータの宣言

- 4.9 カスタムBeanデータ・コントロールの作成

5 ADF モデル・レイヤーを使用したコンシューミングWebサービス

- 5.1 ADFアプリケーションのWebサービス・データ・コントロールについて

- 5.1.1 Webサービス・データ・コントロールのユースケースと例

- 5.1.2 ADFアプリケーションのWebサービス・データ・コントロールの追加機能

- 5.2 Webサービス・データ・コントロールの作成

- 5.2.1 SOAPベースのWebサービス用のデータ・コントロールを作成する方法

- 5.2.2 RESTful Webサービス用のデータ・コントロールを作成する方法

- 5.2.3 RESTデータ・コントロールでのパス・パラメータの使用に関する必知事項

- 5.2.4 Webサービス・データ・コントロール用のヘッダー・パラメータの含み方

- 5.2.5 RESTful WebサービスのレスポンスHTTPヘッダーへのアクセス方法

- 5.2.6 SOAP Webサービス・データ・コントロールのリフレッシュ方法

- 5.2.7 SOAP Webサービス・データ・コントロールの主キーに関する必知事項

- 5.2.8 RESTful Webサービス・データ・コントロールへのカスタム属性の追加方法

- 5.2.9 Webサービス・データ・コントロールに関する必知事項

- 5.2.10 スキーマ・ファイルをRESTデータ・コントロールで利用できるようにする方法に関する必知事項

- 5.2.11 RESTデータ・コントロール付きのPATCHメソッドの使用に関する必知事項

- 5.3 Webサービス・データ・コントロールのセキュリティの構成

- 5.3.1 Oracle WSMのポリシー・フレームワーク

- 5.3.2 キー・ストアの使用

- 5.3.3 SOAP Webサービス・データ・コントロールのセキュリティの定義方法

- 5.3.4 RESTful Webサービス・データ・コントロール・セキュリティの定義方法

6 ADFモデル・レイヤーを使用したコンシューミングURLサービス

- 6.1 ADFモデルでのURLサービスの使用について

- 6.1.1 URLサービスのユースケースと例

- 6.1.2 URLサービスの追加機能

- 6.2 ADFデータ・コントロールを使用したURLサービスの公開

- 6.2.1 URL接続の作成方法

- 6.2.2 URLサービス・データ・コントロールの作成方法

- 6.2.3 URLサービス・データ・コントロールの作成時の処理内容

- 6.2.4 スキーマを使用しないURLデータ・コントロールの生成に関する必知事項

- 6.2.5 URLサービス・データ・コントロールのカスタム・ヘッダー・パラメータを組み込む方法

- 6.2.6 URLサービス・データ・コントロールの主キーに関する必知事項

- 6.2.7 URLサービス・データ・コントロールに関する必知事項

- 6.3 URLサービス・データ・コントロールの使用

7 データ・コントロールへのビジネス・ロジックの追加

- 7.1 データ・コントロールへのビジネス・ロジックの追加の概要

- 7.2 データ・コントロールの構成

- 7.2.1 データ・コントロールの編集方法

- 7.2.2 データ・コントロール編集時の処理

- 7.2.3 データ・コントロールを前のリリースから変換する方法

- 7.2.4 データ・コントロールのMDSカスタマイズに関する必知事項

- 7.3 属性の使用

- 7.3.1 属性を主キーとして指定する方法

- 7.3.2 属性の更新可能性の制御方法

- 7.3.3 属性の静的なデフォルト値を定義する方法

- 7.3.4 Groovy式を使用してデフォルト値を定義する方法

- 7.3.5 Groovy式を使用したデフォルト値の作成時の処理

- 7.3.6 属性へのUIヒントの設定方法

- 7.3.7 属性へのUIヒントの設定時の処理

- 7.4 データ・オブジェクトへの一時属性の追加

- 7.4.1 一時属性の追加方法

- 7.4.2 一時属性の追加時の処理

- 7.5 属性への検証ルールの宣言的な定義

- 7.5.1 属性への検証ルールの追加方法

- 7.5.2 検証規則の追加時の処理

- 7.5.3 組込みの宣言的な検証ルールの使用方法

- 7.5.3.1 比較に基づいた検証

- 7.5.3.2 比較に基づく検証時の処理

- 7.5.3.3 値リストを使用した検証

- 7.5.3.4 リスト値を使用した検証時の処理

- 7.5.3.5 値が特定の範囲内にあることの確認

- 7.5.3.6 Range Validatorの使用時の処理

- 7.5.3.7 バイトまたは文字数に対する検証

- 7.5.3.8 バイトまたは文字数に対する検証時の処理

- 7.5.3.9 正規表現を使用した検証

- 7.5.3.10 正規表現を使用した検証時の処理

- 7.5.4 検証ルールでのGroovy式の使用方法

- 7.5.4.1 Groovy式を使用した検証

- 7.5.4.2 Groovy式に基づいて検証を行うときの処理内容

- 7.5.4.3 Groovy検証式でのデータ・オブジェクト・メソッドの参照

- 7.5.5 検証エラー・メッセージの作成方法

- 7.5.5.1 検証エラー・メッセージの作成

- 7.5.5.2 検証エラー・メッセージを作成するときの処理内容

- 7.5.5.3 検証メッセージのローカライズ

- 7.5.5.4 Groovyを使用した条件付きでのエラー・メッセージの呼出し

- 7.5.5.5 エラー・メッセージへのGroovy式の埋込み

- 7.5.6 検証例外の重大度レベルの設定方法

- 7.6 名前付き基準を使用した結果セットのフィルタリング

- 7.6.1 名前付き基準の用途

- 7.6.2 名前付き基準を宣言的に作成する方法

- 7.6.3 名前付き基準の作成時の処理

- 7.6.4 名前付き基準でのバインド変数の使用方法

- 7.6.5 名前付き基準でのバインド変数使用時の処理

- 7.6.6 ネストされた式に関する必知事項

- 7.6.7 名前付き基準にユーザー・インタフェース・ヒントを設定する方法

- 7.6.8 複数のJPAエンティティに基づいて名前付き基準を作成する方法

- 7.7 値オブジェクトのリストの作成

- 7.7.1 属性のLOVを作成する方法

- 7.7.2 LOVの作成時の処理

- 7.8 Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト

- 7.8.1 Oracle ADFモデル・テスターの実行方法

- 7.8.2 Oracle ADFモデル・テスター使用時の処理

- 7.8.3 ビジネス・レイヤーの検証のテスト方法

- 7.8.4 行の作成およびデフォルト値の生成のテスト方法

- 7.8.5 Oracle ADFモデル・テスターを使用した名前付き基準のテスト方法

- 7.8.6 Oracle ADFモデル・テスターを更新してプロジェクトの変更を表示する方法

- 7.8.7 代替言語のメッセージ・バンドルおよびUIヒントのテスト方法

- 7.9 Groovy言語サポート

- 7.9.1 Groovy式でのADFオブジェクトの参照方法

- 7.9.2 Groovy式でのADFメソッドおよび属性の参照方法

A データ・コントロールの機能比較

はじめに

『Oracle ADFデータ・コントロールによるアプリケーションの開発』にようこそ。

対象読者

このドキュメントは、EJB、プレーンJavaクラス、Webサービスなどのビジネス・サービスとUIコンポーネント間のデータ・バインディングを簡素化するために、それらのサービスを抽象化するADFデータ・コントロールを使用する開発者を対象としています。

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

Oracleのアクセシビリティへの取り組みについては、Oracle Accessibility ProgramのWebサイト(http://www.oracle.com/pls/topic/lookup?ctx=acc&id=docacc)にアクセスしてください。

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 Application Development Frameworkの理解

- Oracle Application Development FrameworkによるFusion Webアプリケーションの開発

- ADF FacesによるWebユーザー・インタフェースの開発

- Oracle JDeveloperによるアプリケーションの開発

- ADFスキンの開発

- Oracle ADFアプリケーションの管理

- Oracle ADFデスクトップ統合によるアプリケーションの開発

- パフォーマンスのチューニング

- Oracle Web Services Managerの理解

- Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理

- 高可用性ガイド

- Oracle JDeveloperのインストール

- Oracle JDeveloperのオンライン・ヘルプ

- Oracle JDeveloperリリース・ノート(JDeveloperインストール内およびOracle Technology Networkから入手)

- Oracle ADFモデルJava APIリファレンス

- Oracle ADF ControllerのJava APIリファレンス

- Oracle ADFライフサイクルJava APIリファレンス

- Oracle ADF FacesのJava APIリファレンス

- Oracle ADFデータ視覚化コンポーネントのJava APIリファレンス

- Oracle ADF共有Java APIリファレンス

- Oracle ADFモデル・テスターのJava APIリファレンス

- Oracle汎用ドメインJava APIリファレンス

- Oracle Metadata Service (MDS)のJava APIリファレンス

- Oracle ADF Facesタグ・リファレンス

- Oracle ADF Facesスキン・セレクタ・タグ・リファレンス

- Oracle ADF Facesデータ視覚化ツール・タグ・リファレンス

- Oracle ADFデータ視覚化ツール・スキン・セレクタ・タグ・リファレンス

表記規則

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

表記規則

意味

太字

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

イタリック体

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

固定幅フォント

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

このガイドで説明する新機能

次のトピックはOracle JDeveloperとOracle Application Development Framework (Oracle ADF)の新機能と変更された機能、およびこのガイドで説明されているその他の重要な変更点について概要を示しています。

リリース12c (12.2.1.2.0)の新機能と変更された機能

Oracle JDeveloperおよびOracle Application Development Framework (Oracle ADF)のOracle Fusion Middlewareリリース12c (12.2.1.2.0)には、次の新しい開発機能と変更された開発機能が含まれています。これらの機能について、このガイドで説明します。

- 「ADF モデル・レイヤーを使用したコンシューミングWebサービス」では、拡張RESTful Webサービス・データ・コントロールについて説明します。機能拡張の内容は次のとおりです。

- 新しい項を追加し、RESTful Webサービスのデータ・コントロールを、Webサービス接続および呼び出すメソッドのスキーマを使用して作成する方法を記載しました。また、指定されたリソースへのGET呼出しを行うと、スキーマが自動的に作成されることについても記載しました。「RESTful Webサービス用のデータ・コントロールを作成する方法」を参照してください。

- 新しい項を追加し、アクション・バインディングを使用してRESTful WebサービスのレスポンスHTTPヘッダー・パラメータにアクセスする方法について記載しました。「RESTful WebサービスのレスポンスHTTPヘッダーへのアクセス方法」を参照してください。

- 項を改訂し、HTTPペイロード・メソッドを指定したときに、指定の操作(GET、POST、PUTまたはDELETE)のスキーマがWebサービス・データ・コントロールによって生成され、各操作の入力パラメータが別々に「データ・コントロール」パレットに表示されることについて詳しく記載しました。ページの設計中に、これらの各操作用の入力パラメータを使用して、編集可能な形式でページ上にドロップできます。「Webサービス・データ・コントロールに関する必知事項」を参照してください。

- 新しい項を追加し、「データ・コントロール・ポリシーの編集」ダイアログを使用してデータ・コントロールのセキュリティを定義する方法について記載しました。「RESTful Webサービス・データ・コントロール・セキュリティの定義方法」を参照してください。

このリリースでOracle JDeveloperおよびOracle Application Development Framework (Oracle ADF)に対して行われたその他の変更については、Oracle Technology Network (http://www.oracle.com/technetwork/developer-tools/jdev/documentation/index.html)の「What's New」ページをご覧ください。

1 ADFモデルの概要

この章では、データ・コントロールの簡単な概要と、Oracle ADFアプリケーションによるビジネス・サービスからユーザー・インタフェースへのデータのバインディングについて説明します。データ・コントロールのタイプについて説明した後、これらのデータ・コントロールを使用した、データバインドされたUIコンポーネントの作成について説明します。

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

- ADFモデルについて

- データ・コントロールのタイプ

- このガイドで説明しないデータ・コントロール

- アダプタ・フレームワークを使用しないデータ・コントロールに関する必知事項

このマニュアルおよびこの他のマニュアルに、なじみのない用語が出てきた場合は、用語集で定義を確認してください。

1.1 ADFモデルについて

ADFモデルは宣言的なデータ・バインディング機能で、コードを使用せずにユーザー・インタフェースをビジネス・サービスにバインドする統一されたアプローチを提供します。ADFモデルによって、ユーザー・インタフェース・テクノロジとビジネス・サービス実装の分離を可能にする2つの概念(データ・コントロールと宣言的ADFバインディング)が実装されています。図1-1は、ADFモデルがADFアプリケーション・アーキテクチャにどのように適合しているかを示しています。

図1-1 ADFモデルを含むADFアーキテクチャ

データ・コントロールでは、関連するプロパティ、メソッド、タイプの情報を含め、サービスの操作とデータ・コレクションを表す標準のメタデータ・インタフェースを使用してビジネス・サービスの実装技術を抽象化します。これらの操作とコレクションは、データ・コントロール・オブジェクトとして公開されます。開発者とUI設計者は、これらを使用してデータバインドされたUIコンポーネントを作成でき、基礎となるビジネス・サービスのタイプについて考慮する必要はほとんどありません。

宣言的なバインディングによって、データ・コントロール内のデータ・コレクションからのデータ・アクセスの詳細と、その操作の実行が抽象化されます。宣言的なバインディング・オブジェクトには、次の3つの基本的なカテゴリがあります。

- 値バインディング: データを表示するUIコンポーネントで使用します。値のバインディングは、単純なテキスト・フィールドで使用する最も基本的なものから、リスト、表、ツリーでのUIコントロールのニーズをサポートするような、より高度なリスト、ツリーのバインディングまで、様々な種類があります。

- アクション・バインディング: ハイパーリンクやボタンなどのUIコンポーネントで使用され、コードを記述することなく、データ・コレクションやデータ・コントロールの組込み操作またはカスタム操作を実行します。

- 実行可能バインディング: 実行可能バインディングには、イテレータ・バインディングなどが含まれ、データ・コレクションのスクロール処理とページング、および概要情報から詳細情報へのドリルダウンを可能にするユーザー・インタフェースを容易に作成できます。また、実行可能バインディングには、ページ内で一連のページの検索およびネストを可能にするバインディングや、操作を即時実行するためのバインディングも含まれます。

実行時に、ADFモデル・レイヤーによって、適切なXMLファイルからデータ・コントロールおよびバインディングを記述した情報が読み取られ、ユーザー・インタフェースとビジネス・サービスの双方向の結合が実装されます。

ADFモデル・レイヤーをデータのバインドに使用するには、サービスに対してデータ・コントロールを作成する必要があります。データ・コントロールが「データ・コントロール」パネルのツリー階層として表示され、ツリーの各サブノードにコレクション、操作、メソッド、属性などの要素が表されます。その後、Webページのビジュアル・エディタまたはその他のユーザー・インタフェース・コンポーネントに、それらのサブノードをドラッグ・アンド・ドロップすることにより、データバインドされたコンポーネントを作成します。データ・コントロールからサブノードをページにドラッグすると、JDeveloperによって、ページからサービスへのバインディングを表すメタデータが自動的に作成されます。

たとえば、EJBセッション・ファサードを使用するアプリケーションでは、開発者はファサードのデータ・コントロールを作成できます。その後、JDeveloperの「データ・コントロール」パネル(図1-2を参照)に表示されたデータ・コントロールの表現を使用して、セッション・ファサードに自動的にバインドされるUIコンポーネントを作成できます。

図1-2 「データ・コントロール」パネル

ページのUIコンポーネントをサポートするバインディングのグループは、ページ定義ファイルというページ固有のXMLファイルに記述されます。ADFモデル・レイヤーでは実行時にこのファイルが使用され、ページのバインディングがインスタンス化されます。これらのバインディングは、バインディング・コンテナと呼ばれるリクエスト・スコープ・マップに保持されます。

JSFアプリケーションでは、バインディング・コンテナは、各ページ・リクエスト時にEL式#{bindings}を使用してアクセスできます。この式により、現在のページのバインディング・コンテナが常に評価されます。

次の例は、フォーム内のチェック・ボックスをOrdersSessionEJBLocalデータ・コントロールのorderFilled属性にバインディングするために使用されるコードを示します。

<af:selectBooleanCheckbox value="#{bindings.orderFilled.inputValue}"
label="#{bindings.orderFilled.label}"
shortDesc="#{bindings.orderFilled.hints.tooltip}" id="sbc1"/>

1.2 データ・コントロールのタイプ

データ・コントロールの実装には様々なものがあり、これらは次に示すカテゴリに分けることができます。

- ADFビジネス・コンポーネント・アプリケーション・モジュール
ADFビジネス・コンポーネントを使用するアプリケーションでは、アプリケーション・モジュール作成時に自動的にデータ・コントロールが作成され、データ・コントロールにはアプリケーション・モジュールの全機能が含まれます。

ADFビジネス・コンポーネント・アプリケーション・モジュールを使用するための詳細なガイドについては、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「アプリケーション・モジュールによるビジネス・サービス」を参照してください。

- データ・コントロール・フレームワークを両方とも拡張するデータ・コントロール(「アダプタ・データ・コントロール」)
これにはEJB、Bean、Webサービス(SOAPベースおよびRESTful)、およびURLのデータ・コントロールが含まれ、これらはこのガイドの説明対象です。

- Beanデータ・コントロール・タイプに基づくカスタム・データ・コントロール

- データ・コントロール・フレームワークに基づき、Beanデータ・コントロールを拡張しないカスタム・データ・コントロール

- アダプタ・データ・コントロール・フレームワークを拡張しないカスタム・データ・コントロール
このカテゴリは主に、アダプタ・フレームワークが開発される前に開発されたデータ・コントロールからなります。

このガイドでは主に、アダプタ・データ・コントロールの作成と使用を中心に説明しますが、情報の大部分はADFビジネス・コンポーネント・データ・コントロールにも適用されます。

1.3 このガイドで説明しないデータ・コントロール

次に、このガイドでは説明しないデータ・コントロールのタイプをいくつか示します。

- プレースホルダ・データ・コントロール。これは空のデータ・コントロールで、まだ具体的な作業対象になるビジネス・サービスがないユーザーが、データバインドされたページを設計するために使用します。プレースホルダ・データ・コントロールを使用してデータバインドされたコンポーネントを設計し、ビジネス・サービスが提供された後、コンポーネントをこれらのビジネス・サービスに再バインドできます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「プレースホルダ・データ・コントロールによるページの設計」を参照してください。

- JMXデータ・コントロール。これを使用して、Java Management Extension (JMX) MBeanに基づくデータ・コントロールを作成できます。

- JavaBeanデータ・コントロール。Beanデータ・コントロールと混同しないでください。JavaBeanデータ・コントロールは、アダプタ・データ・コントロール・フレームワークより前に開発されたデータ・コントロール・タイプです。問合せ可能コレクションのサポートなど、後からBeanデータ・コントロールに組み込まれた主要機能の多くが備わっていません。

- より広範囲のFusion Middlewareスタックに含まれる、その他のデータ・コントロール(BAMデータ・コントロールなど)。

1.4 アダプタ・フレームワークを使用しないデータ・コントロールに関する必知事項

レガシー・データ・コントロールを使用している場合は、アダプタ・データ・コントロール・フレームワークに基づく新しいデータ・コントロールへの移行を検討することをお薦めします。このフレームワークは、検証ルールや値リスト・オブジェクトなど、多数の便利な機能を備えています。アダプタ・フレームワークを使用して、新しいデータ・コントロール・タイプを最初から作成することも、既存のデータ・コントロール・タイプ(Beanデータ・コントロール・タイプなど)のいずれかを拡張することもできます。

2 ADFデータ・コントロールの使用

この章では、ビジネス・サービスを抽象化するためにデータ・コントロールを作成し、「データ・コントロール」パネルを使用してデータバインドされたページを作成する方法を説明します。また、宣言的なバインディングを設計時に指定し、実行時に実装する方法についての説明もあります。

この章の構成は、次のとおりです。

- データ・コントロール・アプリケーションの中心となる開発ステップ

- データ・コントロールを使用したビジネス・サービスの公開

- 「データ・コントロール」パネルでのデータバインドされたUIコンポーネントの作成

2.1 データ・コントロール・アプリケーションの中心となる開発ステップ

大まかに述べると、データ・コントロールを組み込んだアプリケーションの宣言的開発プロセスには、次のような中心となるステップが含まれます。

- JDeveloperでのアプリケーション・ワークスペースの作成: ウィザードを使用して、選択したテクノロジに必要なライブラリと構成がJDeveloperによって自動的に追加され、アプリケーションがパッケージとディレクトリを含むプロジェクトに構造化されます。詳細は、『Oracle JDeveloperによるアプリケーションの開発』のアプリケーションとプロジェクトの作成に関する項を参照してください。

- ビジネス・サービスの作成: ビジネス・サービスは、ADFビジネス・コンポーネント、EJBセッションBean、POJO、Webサービス、またはその他のサービスです。JDeveloperを使用したこれらのサービスの開発の詳細は、『Oracle JDeveloperによるアプリケーションの開発』を参照してください。

- サービスのデータ・コントロールの作成: ビジネス・サービスを作成したら、メタデータ・インタフェースを使用してこれらのサービスの実装を抽象化し、使用されるプロパティ、メソッドおよびタイプに関する情報などの操作とデータ・コレクションを表すデータ・コントロールを作成します。これらのデータ・コントロールは「データ・コントロール」パネルに表示され、これらをページにドラッグしてデータバインドされたUIコンポーネントを作成できます。詳細は、「データ・コントロールを使用したビジネス・サービスの公開」を参照してください。

- データ・コントロールへの宣言的なメタデータの追加: データ・コントロールにUIヒント、検証ルール、検索フォームでの使用条件やその他の機能を追加できます。詳細は、 「データ・コントロールへのビジネス・ロジックの追加」を参照してください。

- ユーザー・インタフェースの実装: JDeveloperの「データ・コントロール」パネルには、アプリケーションのサービスが表示されます。オブジェクトを「データ・コントロール」パネルからページにドラッグし、ベースとなるデータを表示するUIコンポーネントを選択できます。データバインドされていないUIコンポーネントの場合、「コンポーネント」ウィンドウを使用してコンポーネントをドラッグ・アンド・ドロップします。JDeveloperによって、すべてのページ・コードが作成されます。
データバインドされたWebページの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされたWebユーザー・インタフェースの作成」を参照してください。

ユーザー・インタフェースを作成する際に、アプリケーション内のユーザーのワークフローを整理するタスク・フローも定義する必要が生じることがあります。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFタスク・フローの作成」を参照してください。

UIコンポーネント自体の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のJSFによるユーザー・インタフェースの実装に関する項を参照してください。

- アプリケーションのデプロイ: ウィザードとエディタを使用して、デプロイメント・ディスクリプタ、JARファイルおよびアプリケーション・サーバー接続を作成します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のFusion Webアプリケーションのデプロイに関する項を参照してください。

2.2 データ・コントロールを使用したビジネス・サービスの公開

アプリケーションのサービスの準備ができたら、JDeveloperを使用して、UIコンポーネントとサービスとの宣言的バインドに必要な情報を提供するデータ・コントロールを作成できます。

たとえば、Java EEアプリケーションでは、通常、データベース内の表を表すエンティティBeanを作成し、全EJBに対するセッション・ファサードを作成します。このファサードは、ベースとなるエンティティへの一元化されたインタフェースです。Oracle ADFアプリケーションでは、セッションBeanに対するデータ・コントロールを作成でき、そのデータ・コントロールには、セッションBean下のすべてのEJBに関する記述が含まれます。

データ・コントロールの生成には、「データ・コントロールの作成」メニュー・アイテムを使用します。データ・コントロールは、1つ以上のXMLメタデータ・ファイルで構成され、これらのファイルでは、実行時にバインディングと連動するサービスの機能が定義されます。データ・コントロールは、基礎となるサービスと連動します。

2.2.1 ADFデータ・コントロールの作成方法

アダプタ・ベースのデータ・コントロールは、JDeveloperの「アプリケーション」ウィンドウ内で作成します。

注意:

ADFビジネス・コンポーネントをベースとするアプリケーションの場合、データ・コントロールはアプリケーション・モジュールを作成する際に自動的に作成されます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「アプリケーション・モジュールによるビジネス・サービスの実装」を参照してください。

始める前に:

データ・コントロール使用の一般的な知識があると役立ちます。詳細は、「データ・コントロールを使用したビジネス・サービスの公開」を参照してください。

また、アプリケーション・ワークスペースを作成し、データ・コントロールの基礎にするビジネス・サービスを追加する必要があります。アプリケーション・ワークスペースの作成については、『Oracle JDeveloperによるアプリケーションの開発』のアプリケーションとプロジェクトの作成に関する項を参照してください。

データ・コントロールを作成する手順は、次のとおりです。

1. アプリケーション・ワークスペース内でデータ・モデル・プロジェクトの最上位ノードを右クリックして、「新規」を選択し、「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「ビジネス層」を展開し、「データ・コントロール」を選択して、作成するデータ・コントロールのタイプを選択し、「OK」をクリックします。

3. ウィザードの残りのステップを完了します。

アダプタ・ベースのデータ・コントロールの作成については、各種のデータ・コントロールについて説明している、このガイドの後続の章を参照してください。

注意:

場合によっては、データ・コントロールの基礎にするクラスまたはオブジェクトを右クリックし、「データ・コントロールの作成」を選択することによってデータ・コントロールを作成できます。

2.2.2 データ・コントロール作成時のプロジェクト内の処理

データ・コントロールを作成する際に、JDeveloperによってデータ・コントロール定義ファイル(DataControls.dcx)が作成され、概要エディタでファイルが開き、ファイルの階層が「データ・コントロール」パネルに表示されます。このファイルにより、データ・コントロールがサービスおよびバインディングと直接連動して動作することが可能になります。

エディタ・ウィンドウの「ソース」タブをクリックすることによって、対応するXMLファイルからのコードを表示できます。

2.2.2.1 DataControls.dcxの概要エディタ

DataControls.dcxファイルの概要エディタは、データ・コントロール・オブジェクトの階層と、データ・モデルの公開メソッドを表示します。

概要エディタおよび「データ・コントロール」パネルで使用されるアイコンの説明は、表2-1を参照してください。

データ・コントロール・オブジェクトの設定を変更するには、オブジェクトを選択し、「編集」アイコンをクリックします。データ・コントロールの編集方法の詳細は、「データ・コントロールの構成」を参照してください。

図2-1は、EJBデータ・コントロールの概要エディタを示しています。

図2-1 概要エディタでのDataControls.dcxファイル

2.2.2.2 「データ・コントロール」パネル

「データ・コントロール」パネルはパレットとして機能し、ノードを「データ・コントロール」パネルからWebページのデザイン・エディタにドラッグすることにより、データバインドされたUIコンポーネントを作成できます。データ・コントロールを作成した後、「データ・コントロール」パネルが「アプリケーション」ウィンドウに表示されます。図2-2は、EJBデータ・コントロールの「データ・コントロール」パネルを示しています。

図2-2 「データ・コントロール」パネル

2.2.3 「データ・コントロール」パネルのビジネス・サービスの表示

「データ・コントロール」パネルには、アプリケーションのビジネス・サービスに対して作成されたすべてのデータ・コントロールがリストされます。また、UIコンポーネントへのバインドに使用できるコレクション(データ・オブジェクトの行セット)、属性、メソッド、および組込み操作の階層が公開されます。

たとえば、図2-3はOrdersSessionEJBLocalデータ・コントロールを表示する「データ・コントロール」パネルを示しています。コレクション・ノード(customerFindAll、customerFindById、empFindAllなど)は、問合せメソッド(この例では、セッション・ファサードのgetterメソッド)から返されるデータ・コレクションを表します。これらのコレクション・オブジェクトをページにドロップして、フォームや表などのUIコンポーネントを作成できます。

その他のサービス・メソッド(JPAベースのデータ・コントロールの場合は、先頭にgetが付いていないメソッド)は、メソッド・アイコンによって表示されます。これらのオブジェクトは、コマンド・ボタンまたはリンクとしてフォームにドロップできます。メソッドが引数をとる場合、その引数は、メソッドのノード内にネストされたパラメータとして「パラメータ」ノードに表示されます。メソッドから返されるオブジェクトも表示されます。

図2-3 「データ・コントロール」パネルの主要ノード

ヒント:

「データ・コントロール」パネルが表示されない場合は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データ・コントロール」パネルの表示方法に関する項を参照してください。

返されるオブジェクトはそれぞれ、関連したオブジェクトに対して定義された属性、メソッド、およびネストされたコレクションを表示します。図2-4は、itemFindAllコレクションから返されるアイテムBeanに対して定義された属性とメソッドを示しています。

注意:

データ・コントロールの基礎となるサービスが変更されると、これらの変更はデータ・コントロールに反映されます。サービスに対する変更が「データ・コントロール」パネルにすぐ反映されない場合は、パネルを手動でリフレッシュできます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データ・コントロール」パネルのリフレッシュ方法に関する項を参照してください。

図2-4 返されるコレクションの子ノード

データ・コントロール・タイプに応じて、様々な組込み操作が公開されます。一部のデータ・コントロールでは、宣言的な名前付き基準も使用でき、これを使用して検索フォームを作成できます。図2-5は、EJBデータ・コントロールの操作とデフォルトの名前付き基準を示しています。

図2-5 「データ・コントロール」パネルの操作と名前付き基準

2.2.4 データ・コントロールの組込み操作

データ・コントロール・フレームワークは、データ・コントロールの標準操作のセットを定義します。これらの操作は、基礎となるビジネス・サービスの機能を使用して実装されます。実行時に、これらのデータ・コレクション操作の1つがデータ・バインディング・レイヤーによって名前を指定して起動されると、データ・コントロールは、組込み機能を処理する適切なサービス・メソッドにそのコールを委譲します。たとえば、EJBおよびBeanデータ・コントロールでは、Next操作はBeanコレクションのイテレータに依存します。

ほとんどの組込み操作は、現在の行に作用します。ただし、execute操作はデータ・コントロール自体をリフレッシュし、commitおよびrollback操作は、トランザクションの範囲内で実行されたすべての変更に影響を与えます。

使用可能な操作は、データ・コントロールのタイプと、基礎となるビジネス・サービスの機能によって異なります。次に、組込み操作すべてのリストを示します。

- Create: 現在の行になる新規行を作成。JPAベースのデータ・コントロールの場合、この新規行は行セットにも追加されます。

- CreateInsert: 現在の行となる新規行を作成し、その行を行セットに挿入。ADFビジネス・コンポーネント・アプリケーション・モジュールに対してのみ使用できます。

- Create With Parameters: 名前付きパラメータを使用して現在の行になる新規行を作成し、その行を行セットに挿入。ADFビジネス・コンポーネント・アプリケーション・モジュールに対してのみ使用できます。

- Delete: 現在の行を削除。

- Execute: アクセッサ・メソッドを実行または再実行することによって、データ・コレクションをリフレッシュします。
ExecuteWithParams: パラメータとして渡された変数に新しい値を割り当てた後で、関連した問合せを実行または再実行することにより、データ・コレクションをリフレッシュ。この操作は、パラメータ化された問合せに基づくデータ・コントロール・コレクション・オブジェクトに対してのみ使用できます。

- First: 行セット内の最初の行を現在の行に設定します。

- Last: 行セット内の最後の行を現在の行に設定します。

- Next: 行セット内の次の行を現在の行に設定します。

- Next Set: 1つ後の行のセットに移動します。

- Previous: 行セット内の前の行を現在の行に設定します。

- Previous Set: 1つ前の行のセットに移動します。

- removeRowWithKey: パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行します。検出されると、その行が削除されます。

- setCurrentRowWithKey: パラメータとして渡された行キーのシリアライズされた文字列表現を使用して行の検索を試行します。検出されると、その行が現在の行になります。

- setCurrentRowWithKeyValue: パラメータとして渡された主キーの属性値を使用して行の検索を試行します。検出されると、その行が現在の行になります。

- commit: 現在のトランザクションで行われたすべての変更をデータベースに永続化させます。

- rollback: 現在のトランザクションのコンテキスト内でのすべての変更を元に戻します。

2.3 「データ・コントロール」パネルでのデータバインドされたUIコンポーネントの作成

「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。データ・コントロールを使用してUIコンポーネントを作成すると、そのコンポーネントを選択したデータ・コントロールにバインドするために必要な、様々なコードおよびオブジェクトがJDeveloperによって自動的に作成されます。

「データ・コントロール」パネルでは、各データ・コントロール・オブジェクトが特定のアイコンで表されます。表2-1は、各アイコンが表すもの、「データ・コントロール」パネルの階層内で表示される場所、そのアイコンを使用して作成できるコンポーネントを示しています。

表2-1 「データ・コントロール」パネルのアイコンおよびオブジェクト階層

アイコン

名前

説明

作成する対象

データ・コントロール

データ・コントロールを表します。

他のオブジェクトのコンテナとして機能し、作成には使用されません。

コレクション/ネストされたコレクション

アクセッサ・メソッドまたは操作から返される名前付きデータ・コレクションを表します。

フォーム、表、グラフ、ツリー、レンジ・ナビゲーションの各コンポーネント、およびマスター/ディテール・コンポーネント。

データ・コントロール上のコレクションを使用してフォームを作成する方法の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされた基本的なページの作成」を参照してください。

コレクションを使用して表を作成する方法の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFによるデータバインドされた表の作成」を参照してください。

マスター/ディテール関係を使用してUIコンポーネントを作成する方法の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「マスター/ディテール・データの表示」を参照してください。

グラフ、チャート、およびその他の視覚化UIコンポーネントの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされたチャート・コンポーネントおよびゲージ・コンポーネントの作成」を参照してください。

構造化属性

Javaプリミティブ・タイプ(属性として示される)または任意のタイプのコレクションのいずれでもない、戻りオブジェクトを示します。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

属性

オブジェクト内の個別のデータ要素(行の属性など)を表します。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

属性を使用したページのフィールドの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ・コントロール属性を使用したテキスト・フィールドの作成に関する項を参照してください。

リストの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされた選択リストおよびシャトルの作成」を参照してください。

キー属性

データ・コントロール構造ファイル、またはビジネス・サービス自体で、主キー属性として宣言されたオブジェクト属性を表します。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

メソッド/メソッド・バインディング・オブジェクト

メソッド・バインディング・オブジェクトの名前は、その作成に使用されたデータ・コントロール・オブジェクトに基づいて設定されます。

データ・コントロールのメソッドまたは操作、またはその公開された構造のいずれかを表し、パラメータの受入れや、ビジネス・ロジックの実行を行ったり、オプションで単一の値、構造、またはコレクションを戻したりすることができます。

コマンド・コンポーネント。

パラメータを受け入れるメソッドの場合: コマンド・コンポーネントおよびパラメータ付きフォーム。

メソッドからのコマンド・コンポーネントの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ビュー・レイヤーで各機能を起動するコマンド・コンポーネントの使用」を参照してください。

パラメータ化されたフォームの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のパラメータを使用するフォームの作成方法に関する項を参照してください。

メソッド戻り

メソッドまたはその他の操作から返されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。

メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッド戻りの下に子として表示されるオブジェクトは、コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、または親コレクションで実行できる操作などです。

単一の値の場合: テキスト・フィールドおよび選択リスト。

コレクションの場合: フォーム、表、ツリー、レンジ・ナビゲーションの各コンポーネント。

単一値のメソッド戻り値がドロップされると、メソッドはフレームワークにより自動的に起動されなくなります。メソッドを起動するために、対応するメソッドをボタンとしてドロップできます。フォームがタスク・フローの一部の場合、メソッドを起動するためのメソッド・アクティビティを作成できます。実行可能ファイルの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のページ定義ファイルで定義されるExecutableバインディング・オブジェクトに関する項を参照してください。

操作

親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。

ボタン、リンクおよびメニューなどのUIコマンド・コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ・コントロール操作を使用したコマンド・コンポーネントの作成に関する項、および既存のレコードを編集するためのフォームの作成に関する項を参照してください。

パラメータ

メソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。

ラベル、テキストおよび選択リストの各コンポーネント。

名前付き基準

ユーザー検索フォームを作成できるメタデータ・ベースの問合せを表します。名前付き基準は、EJBおよび(JPAベースの) Beanデータ・コントロールに対して使用できます。

カスタム・ビュー基準を作成し、「データ・コントロール」パネルに追加できます。「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

検索フォーム。

検索フォームの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFによるデータバインドされた検索フォームの作成」を参照してください。

2.3.1 「データ・コントロール」パネルの使用方法

JDeveloperは、ドロップするデータ・コントロール項目に対してそれぞれ選択できるUIコンポーネントの事前定義済セットを備えています。

始める前に:

「データ・コントロール」パネルの各種オブジェクトに関する知識があると役立つ場合があります。詳細は、「「データ・コントロール」パネルでのデータバインドされたUIコンポーネントの作成」を参照してください。

次のタスクを完了する必要があります。

- 「ADFデータ・コントロールの作成方法」の説明に従って、データ・コントロールを作成します。

- 『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のWebページの作成に関する項で説明されているとおりに、Webページを作成します。

「データ・コントロール」パネルを使用してUIコンポーネントを作成するには:

1. 「データ・コントロール」パネルで項目を選択し、ページのビジュアル・エディタにその項目をドラッグします。パネルの各項目の定義は、表2-1を参照してください。

ヒント:

操作またはメソッドをタスク・フローのメソッド・アクティビティにドロップする必要がある場合は、ダイアグラム内のアクティビティにドラッグ・アンド・ドロップするだけです。

2. ポップアップ・メニューから、UIコンポーネントを選択します。

「データ・コントロール」パネルから項目をドラッグしてページにドロップすると、ドロップした項目に使用できるすべてのデフォルトUIコンポーネントのポップアップ・メニューが表示されます。表示されるコンポーネントは、プロジェクト内のライブラリに基づきます。

図2-6は、「データ・コントロール」パネルのデータ・コレクションがページにドロップされる際に表示されるポップアップ・メニューを示しています。

図2-6 「データ・コントロール」パネルからのコンポーネントのドロップ

ポップアップ・メニューから選択したコンポーネントに応じて、そのコンポーネントの外観を定義するためのダイアログが自動的に表示されます。たとえば、ポップアップ・メニューから「ADF表」を選択すると、「表の列の編集」ダイアログが表示されます。

デフォルトで選択されたUIコンポーネントはまず、対応するビジネス・オブジェクト上で設定されているUIヒントで決定されます。UIヒントが設定されていない場合、JDeveloperでは標準のフォームおよび表の入力コンポーネントと読取り専用のフォームおよび表の出力コンポーネントが使用されます。リストのコンポーネントは、データ・コントロール・オブジェクトをドロップするときに選択するリストの型に基づいて決定されます。

コンポーネントを選択すると、JDeveloperではビジュアル・エディタのページにそのUIコンポーネントが挿入されます。たとえば、「データ・コントロール」パネルからコレクションをドラッグして、ポップアップ・メニューから「ADF表」を選択した場合は、図2-7のように、ビジュアル・エディタに表が表示されます。

図2-7 データバインドされたUIコンポーネント: ADF表

デフォルトでは、データ・コントロールの使用時に作成されるUIコンポーネントは、ADFデータ・コントロール内の属性にバインドされ、次のような組込み機能を装備できます。

- データ・バインド・ラベル

- ツールチップ

- 書式設定

- 基本的なナビゲーション・ボタン

- 検証(検証規則が特定の属性にアタッチされている場合。)

デフォルトのコンポーネントは、そのまま使用しても十分機能します。ただし、特定のニーズに合せて変更することができます。それぞれのコンポーネントとその各種機能については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされたWebユーザー・インタフェースの作成」で詳しく説明しています。

ヒント:

ページで使用するADFデータバインド・コンポーネントのタイプを変更する場合は、ビジュアル・エディタまたは構造ウィンドウを使用してそのコンポーネントを削除し、「データ・コントロール」パネルから新しいコンポーネントをドラッグ・アンド・ドロップする方法が最も簡単です。データバインドされたコンポーネントをページから削除するときにビジュアル・エディタまたは構造ウィンドウを使用する場合、ページ定義ファイルの関連するバインディング・オブジェクトが他のどのコンポーネントからも参照されていなければ、これらのバインディング・オブジェクトはJDeveloperによって自動的に削除されます(ソース・エディタを使用する場合は、バインディング・オブジェクトの自動削除は行われません)。

2.3.2 「データ・コントロール」パネルの使用時の処理

「データ・コントロール」パネルを使用してWebアプリケーションを構築すると、JDeveloperによって次の処理が行われます。

- DataBindings.cpxファイルがプロジェクトのデフォルト・パッケージに作成されます(このファイルが存在しない場合のみ)。また、そのページ用にエントリが追加されます。
DataBindings.cpxファイルは、アプリケーションのバインディング・コンテキストを定義します。バインディング・コンテキストはコンテナ・オブジェクトの1つで、使用可能なデータ・コントロールおよびデータ・バインディング・オブジェクトのリストを含みます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の実行時に行われる処理: バインディング・コンテキストの動作方法に関する項を参照してください。DataBindings.cpxファイルによって、個々のページがページ定義ファイルに含まれるバインディング定義にマップされ、これらのページが使用するデータ・コントロールが登録されます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のDataBindings.cpxファイルでの作業に関する項を参照してください。

- META-INFディレクトリにadfm.xmlファイルが作成されます。このファイルにより、DataBindings.cpxファイルのレジストリが作成され、バインディング・コンテキストを作成できるように、実行時にアプリケーションで特定できます。

- web.xmlファイルにADFバインディング・フィルタが登録されます。
このADFバインディング・フィルタによって、バインディング・コンテキストへのアクセスに必要なHTTPリクエストが事前処理されます。バインディング・フィルタ構成の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFバインディング・フィルタの構成に関する項を参照してください。

- ビュー・プロジェクトにいくつかのライブラリを追加します。たとえば、次のライブラリがあります。

- ADF Facesデータバインディング・ランタイム

- ADFモデル・ランタイム

- MDSランタイム

- パッケージ定義ファイルがページ定義サブパッケージに追加されます(ページに対してファイルが存在しない場合)。デフォルトのサブパッケージは、adfmsrcディレクトリにあるview.pageDefsです。

ヒント:

「プロジェクト・プロパティ」ダイアログ(プロジェクト・ノードをダブルクリックするとアクセスできる)のADFモデル設定ページで、パッケージ構成(名前と場所など)を設定できます。

ページ定義ファイル(pageNamePageDef.xml)は、アプリケーションのビュー・レイヤーにある各ページのADFバインディング・コンテナを定義します。バインディング・コンテナでは、ページのすべてのADFバインディング・オブジェクトへのランタイム・アクセスが行われます。ページ定義ファイルの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のページ定義ファイルでの作業に関する項を参照してください。

ヒント:

現在のバインディング・コンテナは、プログラム的なアクセス用のAdfContextからも入手できます。

- ページ定義ファイルが構成されます。この処理では、ページによって参照されるバインディング・オブジェクトの定義も追加されます。

- ページに指定のコンポーネントを追加します。
これらの事前作成済のコンポーネントには、ページ定義ファイルのバインディング・オブジェクトを参照するADFデータ・バインディング式言語(EL)式が含まれます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFデータ・バインディングEL式の作成方法に関する項を参照してください。

- UIコンポーネントが必要とするすべてのライブラリ、ファイル、および構成要素が追加されます。データバインドされたADF Facesコンポーネントに必要なアーティファクトの詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』の付録「ADF Faces構成」を参照してください。

2.3.3 イテレータの結果のキャッシュに関する必知事項

データ・コントロールでコレクションを変更する場合、変更されていることがADFモデル・レイヤーで認識されるよう、データ・コントロールでコレクションの新規インスタンスをインスタンス化する必要があります。つまり、クライアントのアクションによってコレクションが変更されることがありますが、コレクションの新規インスタンスを作成しないかぎり、その変更はUIに反映されないということです。ただし、パフォーマンス上の理由から、アクセッサとメソッド・イテレータでは結果セットがキャッシュされます(デフォルトでは、イテレータのcacheResults属性はtrueに設定されています)。この設定は、ページが初めてレンダリングされるときにイテレータがリフレッシュされ、コレクションの新規インスタンスが作成されることを意味します。部分ページ・レンダリングを使用したページのリフレッシュやページに戻るユーザー・ナビゲーションなどのページの再アクセス時、イテレータはリフレッシュされません。

たとえば、ページで表のソートが可能であるとします。ソート後にページをリフレッシュする必要があるため、部分ページ・レンダリングを使用して表をリフレッシュする、ソート・イベント用のコードをリスナーに追加します(詳細は、『Oracle ADF FacesによるWebユーザー・インタフェースの開発』の「部分的なページ・コンテンツのレンダリング」の章を参照してください)。表のコレクションのインスタンスはすでにインスタンス化され、キャッシュされているため、アクセッサ・イテレータは再実行されません。このため、新しいソート順のコレクションの新規インスタンスは作成されず、ページ上のソート順は同じままになります。

この問題に対処するには、結果をキャッシュしないようイテレータを構成するか、ページのリフレッシュ時にイテレータの再実行に使用できるボタンをページに配置します。

注意:

ページでナビゲーション操作を使用してコレクション内を移動する場合、CacheResultsをfalseに設定しないでください。ナビゲーションが機能しなくなります。ボタンを使用してイテレータを再実行する必要があります。ナビゲーション操作の使用の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のレンジ・ナビゲーションのフォームへの組入れに関する項を参照してください。

2.3.3.1 結果セットをキャッシュしないようにするイテレータの設定

結果セットをキャッシュしないようイテレータを設定する手順:

1. ページ定義ファイルを開き、結果をキャッシュしないイテレータを「構造」ウィンドウで選択します。

2. 「プロパティ」ウィンドウで、「拡張」セクションを展開して、CacheResultsのドロップダウン・リストから「false」を選択します。

2.3.3.2 ボタンを使用したイテレータの再実行

ボタンを使用してイテレータを再実行する手順:

1. 「コンポーネント」ウィンドウの「ADF Faces」ページで、「一般コントロール」パネルを展開し、ボタンをページにドラッグします。

2. 「構造」ウィンドウで、ボタンを右クリックして「ADFコントロールにバインド」を選択します。

3. 「ADFコントロールにバインド」ダイアログで、再実行するイテレータに関連付けられているコレクションを展開し、コレクションの「操作」ノードを展開して「実行」を選択します。

3 EJBデータ・コントロールの作成および構成

この章では、EJBセッションBeanのデータ・コントロールを作成する方法を説明し、ページングとフェイルオーバーのサポートについても説明します。

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

- EJBデータ・コントロールについて

- データ・コントロールで使用するセッションBeanの準備

- ADFデータ・コントロールを使用したセッションBeanサービスの公開

- EJBデータ・コントロールでのデータのページ分割されたフェッチ

- アノテーションを使用した属性のUIヒントの提供

- EJBデータ・コントロールのフェイルオーバーの有効化

3.1 EJBデータ・コントロールについて

データ・コントロールは、ADFモデルによって提供される抽象化です。データ・コントロールを使用して、データとビジネス・サービスを宣言的に操作し、UIコンポーネントを容易に作成できます。全般的な情報については、「ADFモデルについて」を参照してください。

EJBセッションBeanのデータ・コントロールを作成すれば、データベースからのデータへのアクセスなど、オブジェクト・モデル・データに依存するWebアプリケーションの作成が簡単になります。すべてのアダプタ・データ・コントロール(宣言的UIヒントや検証ルールなど)に共通の機能に加えて、EJBデータ・コントロールには次の機能が組み込まれています。

- 大規模なデータ・セットに対する問合せのパフォーマンスを向上させるための範囲ページング

- 例による検索フォームの作成を容易にする宣言的名前付き基準

- トランザクション操作(セッションBeanのトランザクション・ビジネス・メソッドに基づく)

- フェイルオーバー・サポート(ユーザーが実装するフェイルオーバー・メソッドに基づく)

3.1.1 EJBデータ・コントロールのユースケースと例

EJBデータ・コントロールを使用して、次のようなことを実行できます。

- バインディング・コードを手動で作成せずに、EJBセッション・ファサードにバインドされた高機能Webページを作成する。

- 既存のEJBビジネス・サービスをADF機能(ADFモデル・データ・バインディング、ADF Faces、ADFタスク・フローなど)と統合するアプリケーションを作成する。

- UIヒント、検証ルール、およびその他の宣言的メタデータを利用して、アプリケーション全体を通じて一貫したプロンプト、ツールチップ、フォーマット・マスク、およびエラー・メッセージを提供する。詳細は、 「データ・コントロールへのビジネス・ロジックの追加」を参照してください。

- ADFモデルの機能を利用して、例による問合せフォームと値リスト(LOV)コンポーネントをページに宣言的に追加する。LOVコンポーネントの作成の詳細は、「値オブジェクトのリストの作成」を参照してください。

- アプリケーションのMDSカスタマイズを可能にする。これにより、ユーザーがソース・コードを変更することなくアプリケーションをカスタマイズできます。

3.1.2 EJBデータ・コントロールの追加機能

データ・コントロールを実装する前に、他のADFおよびJDeveloperの機能を理解しておくと役に立つことがあります。次に、役に立つ可能性のある他のセクションへのリンクを示します。

- 一般的なデータ・コントロール機能: EJBデータ・コントロールを使用する前に、広範なデータ・コントロールの概念を理解することが重要です。詳細は、「ADFデータ・コントロールの使用」を参照してください。

- ADFモデルとデータ・バインディング: ADF Webアプリケーション内でフォームを作成する場合は、ADFモデルおよびデータ・バインディングを使用します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「Fusion WebアプリケーションでのADFモデルの使用」およびOracle ADFモデルJava APIリファレンスを参照してください。

- ADF Faces: データバインドされたUIコンポーネントを作成する際に、ADF Facesコンポーネント・セットからのコンポーネントを使用する場合があります。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされたWebユーザー・インタフェースの作成」を参照してください。

- ADFタスク・フロー: タスク・フローは、JSFページ・フローを拡張して、トランザクション対応のモジュラ・アプローチによるナビゲーションおよびアプリケーション・コントロールを実現します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFタスク・フローの作成」を参照してください。

- JDeveloperでのJava EEサポート: JDeveloperは、EJBデータ・コントロールで使用するために最適化されたJava EEコンポーネントの作成をサポートします。詳細は、『Oracle JDeveloperによるアプリケーションの開発』のEJBおよびJPAコンポーネントによる開発に関する項を参照してください。

3.2 データ・コントロールで使用するセッションBeanの準備

EJBデータ・コントロールは、EJBセッションBeanをカプセル化し、Beanのコード要素をデータ・コントロール・オブジェクトとして公開します。このオブジェクトを使用して、これらのコード要素をUIコンポーネントにバインドできます。EJBセッションBeanに基づいたデータ・コントロールを作成する場合、データ・コントロールはBeanのコーディング・パターンに依存します。この項では、特定のコード・パターンとデータ・コントロール・オブジェクトの間のマッピングを示し、データ・コントロールの機能を最大限に活用するためにBeanで使用できるパターンについて説明します。

注意:

データ・コントロールは、Beanコードを置き換えるものではありません。かわりに、Beanとバインディング・レイヤーの間のシン・アダプタ・レイヤーとして機能します。Bean内でコーディングしたメソッドが、そのまま実行時に使用されます。UIヒントや検証ルールなど、データ・コントロール内で指定した宣言的メタデータが、セッションBeanのビジネス・ロジックを補強します。同様に、データ・コントロールを作成した後にメソッドを追加または変更した場合、データ・コントロールはこれらの新しいメソッドまたは改訂したメソッドを使用して動作します。

3.2.1 EJBデータ・コントロールでサポートされる型とコンストラクト

EJB (およびBean)データ・コントロールは、次のJava型およびコンストラクトを使用するクラスと互換性があります。

- Javaプリミティブ型および配列

- 複合Java型(ユーザー独自のBeanなど)

- Javaスカラー型(java.math、java.sql、およびjava.utilの各パッケージからの型など)

- java.util.Collection、java.util.List、およびjava.util.Mapの各パッケージに含まれるコレクション型

- 総称型、強い型指定のコレクション、およびワイルドカード

- 次のようなJava Persistence API (JPA)機能。

- 主キーを決定するための@Idアノテーション

- 名前付き問合せのための@NamedQueryアノテーションと完全なJPQL構文

- マスター詳細関係と値リスト(LOV)関係を指定する@JoinColumnアノテーション

3.2.2 EJBデータ・コントロール・オブジェクト

EJBセッションBean (またはPOJO Bean)に基づいてデータ・コントロールを作成すると、データ・コントロールによって数種類のオブジェクトが公開されます。これらのオブジェクトそれぞれを、各種のUIコンポーネントにバインドできます。

EJBデータ・コントロールおよびBeanデータ・コントロールの場合は、getで始まるすべてのpublicメソッドから返されるコレクション、およびコレクションまたはgetメソッドから返される複合型とプリミティブに対して、データ・コントロール・オブジェクトが公開されます。このような場合、データ・コントロール・オブジェクトの名前は一般にgetメソッドの名前と一致しますが、先頭のgetが名前から削除されます。

返されるオブジェクトに、JoinColumnアノテーションによって別のオブジェクトとの関係が定義されている場合、「データ・コントロール」パネルには子オブジェクトが表示されます。

public getメソッドによってBeanのフィールドが公開されている場合は、コレクション属性または構造化属性の子属性としてこれらのフィールドが「データ・コントロール」パネルに公開されます。配列、およびプリミティブまたは文字列からなる単純なコレクションを返すgetメソッドの場合は、elementという名前の子属性ノードが「データ・コントロール」パネルに公開されます。

getが前に付いていないメソッドの場合、これらのメソッドはメソッド・オブジェクトとして「データ・コントロール」パネルに公開されます。これらのメソッドの戻り値は、メソッド戻りオブジェクトとして公開されます。

また、これらのオブジェクトの多くに対して、組込みのデータ・コントロール操作が使用できるようになりました。これらの操作すべてのリストについては、「データ・コントロールの組込み操作」を参照してください。

注意:

EJBデータ・コントロールとBeanデータ・コントロールは、Beanコンストラクタも公開します。このコンストラクタを使用して、Beanの新規インスタンスを作成するためのボタンをUIで作成できます。データ・コントロールのCreate操作を使用してインスタンスを作成するかわりに、この方法を使用できます。「データ・コントロール」パネルでコンストラクタ・ノードから作成されるボタンを使用すれば、ユーザーが新規オブジェクト・インスタンスを作成する際に、Create操作の実行時に通常発生する永続性コンテキストにそのオブジェクトを追加する必要がありません。コンストラクタのバインディング・オブジェクトのresultプロパティにバインドすることによって、そのオブジェクト・インスタンスに宣言的にアクセスできます。

表3-1は、各種のデータ・コントロール・オブジェクトとEJBクラスの要素の対応を示しています。これらのオブジェクトの使用については、「「データ・コントロール」パネルでのデータバインドされたUIコンポーネントの作成」を参照してください。

表3-1 重要なEJBおよびBeanデータ・コントロール・オブジェクト

アイコン

名前

説明

コレクション

コレクション(java.util.Collectionを実装するオブジェクト)を返すpublic getメソッドに対して公開されます。

コレクションの下の子は、コレクションの属性、関連したコレクション、コレクションから値を戻すカスタム・メソッド、またはコレクションに対して実行できる組込み操作などです。

構造化属性

コレクションではない複合Java型を返すpublic getメソッドに対して公開されます。

属性

JavaプリミティブまたはString(エンティティBeanの列など)を返すpublic getメソッドに対して公開されます。

キー属性

主キーとしてのマークが付けられた(または複合主キーの一部である)属性に対して公開されます。キー属性は、エンティティBeanクラス内、またはBeanのデータ・コントロール構造ファイル内で、@Idアノテーションによって指定できます。詳細は、「推奨されるエンティティBeanの要素」および「主キーとして属性を指定する方法」を参照してください。

メソッド

getが前に付いていないメソッドを表します。これらのメソッドは、単一の値、構造、またはコレクションを返す場合があります。

メソッド戻り

メソッドまたはその他の操作から返されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。

メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッド戻りの下に子として表示されるオブジェクトは、コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、または親コレクションで実行できる操作などです。

操作

親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。データ・コントロール操作は、コレクションまたはメソッド戻り値の下の「操作」 ノードと、ルート・データ・コントロール・ノードの下にもあります。特定のコレクションまたはメソッド戻りの子である操作は、それらのオブジェクトにのみ作用し、データ・コントロール・ノードの下の操作は、そのデータ・コントロール内のすべてのオブジェクトに作用します。

1つ以上のパラメータが操作に必要な場合、それらのパラメータは操作の下の「パラメータ」ノードにリストされます。

パラメータ

メソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。パラメータは、メソッドまたは操作の下の「パラメータ」ノード内に表示されます。

名前付き基準

ユーザー検索フォームを作成できるメタデータ・ベースの問合せを表します。

カスタム・ビュー基準を作成し、「データ・コントロール」パネルに追加できます。「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

コンストラクタ

BeanまたはEJBデータ・コントロールに含まれる作成可能な型のいずれかのコンストラクタを表します。このデータ・コントロール・オブジェクトを使用して、コマンド・コントロールを作成できます。ユーザーがこれをクリックすると、その型の新規インスタンスを作成できます。

3.2.3 セッション・ファサード・パターンについて

EJBデータ・コントロールは、EJBセッション・ファサード設計パターンに基づいています。このパターンでは、セッションBeanが個々のエンティティBeanへのアクセスを仲介し、これらのBeanにはデータベース表の問合せを行うコードが含まれています。セッションBeanに基づくデータ・コントロールを作成すると、セッションBeanのメソッドに基づく最上位オブジェクトと、セッションBeanのアクセッサ・メソッドによって取得されたエンティティBean内の詳細に基づく下位オブジェクトが、データ・コントロールによって公開されます。

3.2.4 EJBデータ・コントロールの前提条件と考慮事項

EJBデータ・コントロールの全機能を活用するには、データ・コントロールによってサービスの構造を表現するために使用できるいくつかの要素をクラスに組み込む必要があります。

プロジェクトには、次のタイプのクラスが含まれている必要があります。

- アプリケーションが問合せを行う必要があるすべてのデータベース表に対応するJPAエンティティ・クラス。

- エンティティBeanへのアクセッサ・メソッド、およびその他のビジネス・メソッドを含む、1つ以上のセッションBean。EJBデータ・コントロールは、セッションBeanに基づいています。

- オプションで、セッションBeanの構造を反映した(POJO)サービス・ファサード・クラス。これらのサービス・ファサード・クラスを使用すれば、アプリケーション・サーバー・コンテナ内でこれらのサービスを実行する必要がないので、サービスのテストに便利です。サービスをデータ・コントロールに対してテストするために、サービス・ファサード・クラスのデータ・コントロールを作成することもできます。

3.2.4.1 推奨されるエンティティBeanの要素

エンティティBeanには次の要素が含まれている必要があります。

- コレクションの各行を返す問合せを含む@NamedQueryアノテーション。Java Persistence Query Language (JPQL)のコンストラクトを利用して、より高度な選択を行う問合せを追加することもできます。JPQLの詳細は、http://docs.oracle.com/javaee/6/tutorial/doc/bnbtg.htmlを参照してください。

- 外部キーによって他の表(または同じ表の他の列)を参照する列に対する@JoinColumnアノテーション。生成されるデータ・コントロールにより、これらの結合された列がマスター/ディテール関係として公開され、これらの関係に依存するUIコンポーネントの作成が容易になります。

- エンティティBeanによって表現されるコレクションそれぞれのaddEntityBeanName(CollectionType collectionParam)メソッド、およびremoveEntityBeanName(CollectionType collectionParam)メソッド。データ・コントロールのCreate操作とDelete操作は、コレクション内の行を追加および削除するために、これらのメソッドに依存します。

- エンティティBeanごとに指定された主キー。これは、実行時に新規行を作成する際にCreate操作が正しく動作するために必要です。
該当する列に対して@Idアノテーションを追加(または生成)することによって、エンティティBean内で主キー列を指定できます。

- 新規レコードを作成する際に主キー値を生成するための方式。これは特に、明示的なコミット・モデルを使用している場合には重要です。この場合、新規レコードは作成時に永続化しておく必要がありますが、ユーザーが他のフィールドの詳細を入力する前に行う必要があります。詳細は、「@GeneratedValueアノテーションを使用した主キーのIDの生成について」を参照してください。

3.2.4.2 推奨されるセッション・ファサードの要素

データ・コントロール機能との統合のために、セッションBean (またはJavaサービス・ファサード・クラス、あるいはその両方)には次のリストに示す要素を含めることをお薦めします。JDeveloperのウィザードを使用してクラスを作成する場合は、これらの要素がデフォルトで自動的に生成されます。

- エンティティBeanに指定された名前付き問合せの結果を返すgetterメソッド。たとえば、次の例に示すメソッドは、Customer.findByIdという名前付き問合せの結果を返します。

/** <code>select o from Customer o where o.id = :custId</code> */
public List<Customer> getCustomerFindById(BigDecimal custId) {
if (custId != null) {
Long custIdLong = new Long(String.valueOf(custId));
return em.createNamedQuery("Customer.findById").setParameter("custId", custIdLong).getResultList();
} else {
return getCustomerFindAll();
}

名前付きパラメータを含む問合せを作成する際に、その問合せに対して作成されるデータ・コントロール・オブジェクトにはExecuteWithParams組込み操作が含まれます。この操作を使用して、実行時に指定されるパラメータに基づいたフォームを素早く作成できます。

ヒント:

エンティティBeanに対して複数の名前付き問合せを使用する場合は、それぞれの名前付き問合せに対してgetterメソッドを作成して、問合せごとに別個のデータ・コントロール・オブジェクトを作成できます。

- JPA名前付き問合せ、名前付き基準メタデータ、スクロール可能アクセス・モード、および範囲ページング・アクセス・モードの組込みサポートを利用するためのqueryByRange(String jpqlStmt, int firstResult, int maxResults)メソッド。データ・コントロールは、このメソッドを使用してすべての名前付き問合せを実行します(セッションBean内で問合せのためにgetterメソッドを呼び出すかわりに)。
次の例は、JDeveloperを使用してセッションBeanを生成する(またはJavaサービス・ファサード・ウィザードを使用してプレーンJavaファサードを生成する)際に、queryByRange(String jpqlStmt, int firstResult, int maxResults)メソッドに対して生成されるコードを示しています。

public Object queryByRange(String jpqlStmt, int firstResult, int maxResults) {
Query query = em.createQuery(jpqlStmt);
if (firstResult > 0) {
query = query.setFirstResult(firstResult);
}
if (maxResults > 0) {
query = query.setMaxResults(maxResults);
}
return query.getResultList();
}

このメソッドの実装は変更できますが、シグネチャはADFモデル・ランタイムが検索するため、そのまま保持する必要があります。

- (Beanがトランザクション動作を行う場合)次に示すとおりのシグネチャを持つ、次のメソッド。

- public boolean isTransactionDirty()

- public void rollbackTransaction()

- public void commitTransaction()

これらのメソッドを使用して、データ・コントロールのcommit操作とrollback操作が実装されます。JDeveloperウィザードを使用してJavaサービス・ファサード・クラスとコンテナ管理のEJBステートフル・セッションBeanを作成する場合は、デフォルトでこれら3つのメソッドの作業用実装がクラスに生成されます。

3.2.4.3 オーバーロードされたGetメソッドに関する必知事項

データ・コントロールによって使用されるセッションBeanまたはサービス・ファサード・クラスを作成する場合、そのクラスでは、オーバーロードされたgetXxx()メソッド(つまり、同じ名前を持つがそのそれぞれが異なるパラメータを取る、メソッドの複数のバージョン)を使用しないでください。実行時に、データ・コントロールは、メソッドのバージョンの違いを適切に区別できません。この制約を回避するために、使用する可能性のある任意のオーバーロードされたgetXxx()メソッドの名前を変更し、それらのメソッドにそのクラス内で一意となる名前を付けてください。

3.2.5 JDeveloperでのデータ・コントロール用EJBの作成

JDeveloperのウィザードを使用して、データ・コントロール用に最適化されたEJBエンティティ・クラスとセッションBeanを作成できます。詳細は、『Oracle JDeveloperによるアプリケーションの開発』のEJBビジネス・サービス・レイヤーの使用方法に関する項を参照してください。

3.2.6 EJBおよびBeanデータ・コントロールがgetterメソッドを使用する方法に関する必知事項

セッションBeanでqueryByRange(String jpqlStmt, int firstResult, int maxResults)を使用する(また、データ・コントロールがoracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerハンドラを使用する)場合、データ・コントローラはこのメソッドを使用してすべての名前付き問合せを実行します(セッションBean内で問合せのためにgetterメソッドを呼び出すかわりに)。getterメソッドに追加したカスタム・ロジックがある場合、問合せの実行時にカスタム・ロジックは呼び出されません。そのカスタム・ロジックを実行する必要がある場合は、queryByRange(String jpqlStmt, int firstResult, int maxResults)メソッドに組み込むことができます。

セッションBeanにqueryByRange(String jpqlStmt, int firstResult, int maxResults)を含めない場合、そのBeanに基づくデータ・コントロールはoracle.adf.model.adapter.bean.DataFilterHandlerハンドラを使用して生成されます。この場合、データ・コントロールはセッションBeanのgetterメソッドを直接呼び出しますが、データ・コントロール内のオブジェクトに対して宣言的名前付き基準を使用することはできず、スクロール可能ページングと範囲ページングを機能させるためには、メソッドを手動で実装する必要があります。名前付き基準の使用の詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。ページングの詳細は、「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。

3.2.7 EJBセッションBeanのコミット・モデルについて

EJBデータ・コントロールは、様々な種類のEJBセッションBeanに対して使用できます(Bean管理またはコンテナ管理のどちらか、ステートフルまたはステートレスのどちらかに関係なく)。JDeveloperの「セッションBean作成」ウィザードにより、次のタイプのセッションBeanのコードを生成でき、これらを使用してデータを更新するためのデータ・コントロールを作成できます。

- 暗黙的コミットを行うステートレス・コンテナ管理トランザクション(CMT)

- 暗黙的コミットを行うステートレスBean管理トランザクション(BMT)

- 暗黙的コミットを行うステートフルCMT

- 暗黙的コミットを行うステートフルBMT

- 明示的コミットを行うステートフルCMT

- 明示的コミットを行うステートフルBMT

3.2.7.1 暗黙的コミット・モデル

暗黙的コミットを行う種類のいずれかに基づくデータ・コントロールの場合、トランザクション操作CommitおよびRollbackは提供されません。これらのBeanでは、persistEntityメソッドまたはmergeEntityメソッドが使用されるたびに、基礎となるデータソースのデータが更新されます。

3.2.7.2 明示的コミット・モデル

明示的コミット・モデルを使用してBeanを処理する場合は、Commit操作が呼び出されるまで、基礎となるデータソースは更新されません。これにより、複数の表で複数の行を作成または変更した後、1回のクリックでこれらすべてをデータソースにコミットできます。

明示的コミットを行う種類のいずれかに基づくデータ・コントロールの場合は、変更をコミットする前に、永続性コンテキストにその変更をマージまたは永続化するためのステップを追加する必要が生じることがあります。たとえば、新規行を永続化し、一連の変更をコミットするために、ユーザーがボタンをクリックすることが必要になる可能性があります。

ただし、一部のセッションBeanでは、呼出し時にCreate操作によってエンティティの永続化メソッドが自動的に呼び出されるように、データ・コントロールを構成することが可能です。これは、JDeveloperの「セッションBean作成」ウィザードによって作成され、コンテナ管理のトランザクションと明示的コミット・モデルを使用してステートフルとして構成されたセッションBeanに対する、データ・コントロールのデフォルト動作です。詳細は、「新規行の自動永続化について」を参照してください。

新規行を作成時すぐに永続化できない場合は、マネージドBeanを使用して操作とメソッドをオーバーライドまたは結合できます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の宣言メソッドのオーバーライドに関する項を参照してください。

また、多くのBeanでは(特に、明示的コミットを行うステートフルCMT Beanの場合)、主キー列のID生成を実装する必要があります。詳細は、「@GeneratedValueアノテーションを使用した主キーのIDの生成について」を参照してください。

3.2.8 @GeneratedValueアノテーションを使用した主キーのIDの生成について

一般に、エンティティの新規インスタンスを作成する際に、JPAによって主キー値が自動生成されるようにすると便利です。多くのデータ・モデルでは、ユーザーが新規行を永続化するときに制約違反エラーが発生しないように、表の主キー列に移入する値を生成する必要があります。単純な主キー・タイプ(Integer、long、Stringなど)を使用するJPAエンティティ・クラスでは、エンティティの主キー列に@GeneratedValueアノテーションを使用して、新規レコードがその値を取得する方法と場所を指定できます。この場合は、これらの値がデータベースによって生成されるようにする必要があります。

JDeveloperの「エンティティ作成(表ベース)」ウィザードを使用して、エンティティの主キー値が自動的に生成され、割り当られるようにエンティティを構成できます。このオプションは、Integer、String, long、intなど、単純な主キー・タイプを使用するエンティティに使用できます。このオプションを有効にすると、エンティティの主キー・フィールドに@GeneratedValueのアノテーションが付けられます。これは、キー値を生成する方法を示しています。このウィザードでは、SequenceGeneratorとTableGeneratorのどちらかの方式を選択できます。

クラスに@GeneratedValueアノテーションを付けた後は、新規行の作成時にデータベースによって値が生成され、エンティティに渡されるようにする必要があります。これを行うには、次のいずれかの方法を実行します。

- eclipselink-ddl-generationプロパティをcreate-tablesまたはdrop-and-create-tablesに設定することにより、スキーマ・オブジェクトがデプロイメント時に自動的に作成されるように、エンティティの永続性ユニットを更新します。詳細は、「永続性ユニットのスキーマ生成動作を変更する方法」を参照してください。

- オンライン・データベース・スキーマを手動で更新して、@GeneratedValueアノテーションに指定されているID生成オブジェクトを組み込みます。
JDeveloperの「エンティティ作成(表ベース)」ウィザードを使用する場合は、シーケンスまたは表ジェネレータのスキーマ・オブジェクトが作成され、「アプリケーション」ウィンドウ内でデータ・モデル・プロジェクトの「オフライン・データベース・ソース」ノードの下に表示されます。オブジェクトのノードを右クリックして、「生成」 > 「接続名」を選択し、続く「データベースからデータベース・オブジェクトを生成」ウィザードの手順を実行することによって、オブジェクトをオンライン・スキーマに追加できます。

- ID生成オブジェクトがライブ・データベース・スキーマにすでに存在する場合は、これらのオブジェクトを参照するようにアノテーション属性を手動で変更します。たとえば、@SequenceGeneratorアノテーションの場合は、sequenceName属性を変更します。

3.2.9 永続性ユニットのスキーマ生成動作を変更する方法

デフォルトでは、「エンティティ作成(表ベース)」ウィザードを使用してエンティティを作成すると、eclipselink-ddl-generationプロパティがデフォルト値(none)を使用するように構成された状態で、永続性ユニットが作成されます。つまり、EclipseLink (生成されるエンティティのデフォルト永続性プロバイダ)は、データ定義言語(DDL)文またはスキーマ変更を実行時に生成しません。

ただし、アプリケーションを開発する際には、アプリケーションのテスト・デプロイを行うたびにデータベース・スキーマ内でスキーマ・オブジェクトが作成または再作成されるように、このプロパティを構成すると役に立つことがあります。これにより、データ・モデルを開発する際に行う漸進的な変更に合せてデータベース・スキーマの同期を手動で維持する必要がなくなります。たとえば、eclipselink-ddl-generationプロパティをcreate-tablesに設定すると、EclipseLinkはエンティティによって指定された、まだスキーマに存在しないスキーマ・オブジェクトの生成を試みます(ID生成用のシーケンスと表など)。

永続性ユニットのスキーマ生成動作を変更する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、データ・モデル・プロジェクトを展開し、永続性ユニット・ファイルをダブルクリックします(デフォルトでは、「アプリケーション・ソース」→META-INF→persistence.xmlにあります)。

2. 複数の永続性ユニットが存在する場合は、永続性ユニット・ファイルの概要エディタで、プロジェクトの永続性ユニットを選択して「永続性ユニットに移動」アイコンをクリックします。

3. 永続性ユニットの概要エディタで、「スキーマ生成」ページを選択します。

4. 「生成タイプ」ドロップダウン・リストから、必要なスキーマ生成のタイプを選択します。

eclipselink-ddl-generationオプションの詳細は、http://www.eclipse.org/eclipselink/documentation/2.4/jpa/extensions/p_ddl_generation.htmにあるEclipseLinkのドキュメントを参照してください。

警告:

完成したアプリケーションを本番環境にデプロイする前に、データベース・スキーマをファイナライズし、eclipselink-ddl-generationプロパティを再びnoneに変更する必要があります。

3.2.10 セッション・ファサードを自動的に更新する方法

エンティティBeanを変更する場合は、JDeveloperを使用して、セッションBeanおよび該当する場合はそのリモートおよびローカルのインタフェースを素早く更新できます。「セッション・ファサードの編集」ウィザードを使用して、エンティティ・クラスに追加された名前付き問合せとメソッドを公開するセッションBeanのコードを生成できます。セッションBeanに基づくデータ・コントロールがある場合は、「データ・コントロール」パネルをリフレッシュした直後に、新しく追加したメソッドがパネルで使用できるようになります。

更新されたエンティティBeanに基づいてセッション・ファサードを更新する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、セッションBeanを右クリックして「セッション・ファサードの編集」を選択します。

2. 「セッション・ファサード・オプションの指定」ダイアログで、セッションBean内で生成するメソッドをすべて選択します。

3.2.11 JPA問合せのリフレッシュに関する必知事項

デフォルトでは、JPA問合せを実行すると問合せの結果がキャッシュに入れられ、問合せが同じセッションから再発行されるとそのキャッシュが使用されます。このため、1人目のユーザーが最初の問合せを行った後、2人目のユーザーのセッションからデータベースの変更が行われた場合、1人目のユーザーが問合せを再実行すると(たとえば、ページをリフレッシュするなど)、2人目のユーザーが行った変更内容が反映されない可能性があります。

常にJPA問合せが新規に実行されるようにするには、問合せのヒントを使用してキャッシュをリフレッシュできます。

JPA 2.0では、問合せに次のようなヒントを適用できます。

setHint("javax.persistence.cache.storeMode", "REFRESH")

getCustomerFindAll()メソッドの場合は、次のようになります。

public List<Customer> getCustomerFindAll() {
return em.createNamedQuery("Customer.findAll").
setHint("javax.persistence.cache.storeMode", "REFRESH").
getResultList();
}

JPA 1.0では、次のヒントを適用できます(TopLinkが永続性プロバイダであると仮定した場合)。

setHint("eclipselink.refresh", "true")

3.3 ADFデータ・コントロールを使用したセッションBeanサービスの公開

アプリケーションのサービスの準備ができたら、JDeveloperを使用して、UIコンポーネントとサービスとの宣言的バインドに必要な情報を提供するデータ・コントロールを作成できます。

標準Java EEアプリケーションでは通常、データベース内の表を表現するエンティティBeanを作成してから、すべてのEJBに対してセッション・ファサードを作成します。このファサードは、ベースとなるエンティティへの一元化されたインタフェースです。その後、通常は他のクラスを使用して、ユーザー・インタフェースと、セッション・ファサードによって公開されたサービスとの間での対話を調整します。

Oracle ADFアプリケーションでは、サービス・ファサードによって表現されるサービスをカプセル化し、レイヤー間の宣言的データ・バインディングを可能にするデータ・コントロールを作成することにより、プログラムによるモデル・レイヤーとビュー・レイヤー間の調整を不要にすることができます。その後、データ・コントロールによって、サービスに宣言的にバインドされるUIコンポーネントを作成します。バインディングは、データ・コントロールを参照するEL式の形で行われます。図3-1は、宣言的バインディングによって可能になるUIコンポーネントとデータ・コントロール・オブジェクトの間の調整を示しています。

図3-1 ビューとサービスの間のバインディング

データ・コントロールは、1つ以上のXMLメタデータ・ファイルで構成され、これらのファイルでは、実行時にバインディングと連動するサービスの機能が定義されます。データ・コントロールは、Beanの実装を変更することなく、基礎となるBeanと連動して動作します。

たとえば、図3-2は「アプリケーション」ウィンドウのEJBデータ・モデル・プロジェクトを示しています。プロジェクトには、Customer Bean、Product Bean、Order Beanなど、データベース表を表現するいくつかのエンティティBeanが存在します。プロジェクトには、表から作成されたBeanへのアクセスに使用されるセッションBean OrdersSessionEJBBeanも含まれます。このセッションBeanには、レコードを永続化、マージ、および削除するためのサービス・メソッドも含まれます。セッションBeanに対してデータ・コントロールが存在します。開発者はこのデータ・コントロールを使用して、セッションBeanのメソッドとセッションBeanがカプセル化しているエンティティBeanに基づいて宣言的にUIページを作成できます。また、UIヒントや検証ルールなどの追加メタデータを含む、Customer、Product、およびOrderの各Beanに対応するXMLファイルが、persdef.modelパッケージ内にあります。これらの追加XMLファイルは、特定のデータ・コレクションにメタデータを追加する場合のみ必要です。

図3-2 EJBモデル・プロジェクト

3.3.1 EJBデータ・コントロールを作成する方法

データ・コントロールは、「新規ギャラリ」ウィンドウ、または「アプリケーション」ウィンドウから作成できます。

始める前に:

EJBデータ・コントロールの一般的な使用法について理解しておくと役に立ちます。詳細は、「ADFデータ・コントロールを使用したセッションBeanサービスの公開」を参照してください。

アプリケーションでデータ・コントロールに対して使用することが必要になる可能性がある一般的なデータ・コントロール機能を理解しておくと役に立つこともあります。詳細は、「EJBデータ・コントロールの追加機能」を参照してください。

データ・コントロールが使用する、セッションBean内のコード・パターンとコンストラクトについて理解しておくと役に立つこともあります。詳細は、「データ・コントロールで使用するセッションBeanの準備」を参照してください。

アプリケーション・ワークスペース、JPA/EJB 3.0エンティティ、およびエンティティ用に1つ以上のセッションBeanを作成する必要があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』のEJBビジネス・サービス・レイヤーの使用方法に関する項を参照してください。

EJBデータ・コントロールを作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、データ・コントロールの作成対象のセッションBeanを右クリックし、「データ・コントロールの作成」を選択します。

2. 「EJBデータ・コントロールの作成」ウィザードの「セッションEJBの選択」ページで、データ・コントロール・インスタンスの名前を指定します。

注意:

同じBeanの異なる動作を使用して、複数のデータ・コントロール・インスタンスを作成できます。詳細は、「単一のBeanに対して異なるデータ・コントロールを作成する方法」を参照してください。

3. ウィザードの「セッションEJBビジネス・インタフェースの選択」ページで、「ローカル」または「リモート」を選択します。Webアプリケーションの場合、通常は「ローカル」を選択します。

4. ADFデータ・コントロール機能の選択ページで、アプリケーションに使用する追加のデータ・コントロール機能に応じて、次のいずれかのチェック・ボックスを選択します。(ウィザードのこのページは、ステートフル・セッションBeanに対してデータ・コントロールを作成する場合のみ表示されます。)

選択したデータ・コントロール機能を実装するために、メソッドがセッションBeanに追加されます。

- トランザクションこの機能を選択すると、commitTransaction()、rollbackTransaction()、およびisTransactionDirty()の各メソッドがセッションBeanに生成され、データ・コントロールのcommit操作とrollback操作にマップされます。JDeveloperを使用してコンテナ管理のステートフル・セッションBeanを作成した場合は、これらのメソッドがすでに実装されており、その場合は「トランザクション」チェック・ボックスがデフォルトで選択されます。

- カスタムCRUD。この機能により、永続データの操作をユーザーが独自に実装できます。EJBデータ・コントロールにはすでにJPAからのCRUD機能が備わっているので、JPAの機能をオーバーライドする場合は単にこの機能を選択すれば済みます。詳細は、「EJBデータ・コントロールのCRUD操作に関する必知事項」を参照してください。

- フェイルオーバー。詳細は、「EJBデータ・コントロールでのフェイルオーバーの有効化」を参照してください。

5. 「EJBデータ・コントロールのオプション」ページで、追加のオプションを選択します。

- アクセス・モード。データ・コントロールがデータをフェッチしてメモリーに格納する方法を設定できます。詳細は、「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。

- 名前付き基準のサポート。選択すると、宣言的名前付き基準の組込みサポートがデータ・コントロールに付加されます。このサポートを使用して、クイック検索フォームを作成できます。詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。
「名前付き基準のサポート」オプションは、queryByRange()メソッドも含むJPAベースのBeanに対してのみ使用できます。データ・コントロールは、BeanのqueryByRange()メソッドを使用してすべての問合せを処理します。このメソッドを使用しない場合、問合せはBeanの個々のgetterメソッドによって実行されます。詳細は、「EJBおよびBeanデータ・コントロールがgetterメソッドを使用する方法に関する必知事項」を参照してください。

- メタデータの生成。このオプションを選択すると、データ・コントロールの作成時に、そのデータ・コントロールによって表現されるすべてのBeanのメタデータ・ファイルを自動的に生成できます。メタデータ・ファイルは、データ・コントロールを編集する際にオンデマンドで作成されるので、このオプションは不要です。ただし、アプリケーションのMDSカスタマイズを可能にする場合は、このオプションが役に立つことがあります。詳細は、「データ・コントロールのMDSカスタマイズに関する必知事項」を参照してください。

6. 「終了」をクリックします。

注意:

データ・コントロールの基礎となるBeanの名前を後に変更した場合、再度「データ・コントロールの作成」コマンドを使用して、データ・コントロールのメタデータを再生成する必要があります。この際には、同じデータ・コントロール・インスタンス名を保持できます。

データ・コントロールの作成後にBeanに単に変更を加えた場合は、データ・コントロールを再生成する必要はありません。Beanへの変更はデータ・コントロールに反映されます。ただし、基礎となるBeanの変更をデータ・コントロールに反映させるために、プロジェクトを一度閉じて再度開く必要がある場合があります。

3.3.2 EJBデータ・コントロール作成時のプロジェクトにおける処理内容

EJBセッションBeanに基づくデータ・コントロールを作成する際に、JDeveloperは次の処理を行います。

- データ・コントロール定義ファイル(DataControls.dcx)を作成し、概要エディタでファイルを開きます。
データ・コントロールの基礎となるBeanの構成、およびウィザードで選択したオプションに応じて、様々な要素とプロパティがDataControls.dcxファイル内で構成され、ソース・ビューでこれらの内容を表示できます。これらの要素とプロパティには、次のようなものがあります。

- <CreatableTypes>。ファサード・クラスに含まれるエンティティを指定し、これらに対して宣言的メタデータを作成できます。

- DataControlHandler。ページングや名前付き基準のサポートなど、データ・コントロールの様々な機能を実装するハンドラ・クラスを指定します。

- AccessMode。データ・コントロールが実行中のアプリケーション内のデータをフェッチする方法を決定します。詳細は、「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。

- EagerPersist。新規行を作成時に永続性コンテキストに追加するかどうかを決定します。詳細は、「新規行の自動永続化について」を参照してください。

- 「データ・コントロール」パネルに、作成されたデータ・コントロール・オブジェクトの階層を表示します。

- ADFデータ・コントロール機能ページでいずれかの機能を選択した場合は、これらの機能を実装するメソッドをセッションBeanに追加します。

- 「メタデータの生成」を選択した場合は、ハイレベル・データ・コントロール・オブジェクトのXMLデータ・コントロール構造ファイルが生成されます。これらのファイルは、特定のデータ・コントロール・オブジェクトに対して定義する、UIヒントや検証ルールなどの宣言的メタデータを保管しています。このオプションを選択しなかった場合は、DataControls.dcx概要エディタを使用してデータ・コントロール・オブジェクトに宣言的メタデータを追加するときに、データ・コントロール構造ファイルがオンデマンドで作成されます。詳細は、 「データ・コントロールへのビジネス・ロジックの追加」を参照してください。

概要エディタおよび「データ・コントロール」パネルの一般的な情報は、「データ・コントロール作成時のプロジェクト内の処理」を参照してください。EJBおよびBeanデータ・コントロールに固有の情報は、「EJBおよびBeanデータ・コントロールのIDEでの表示」を参照してください。

3.3.3 EJBおよびBeanデータ・コントロールのIDEでの表示

EJBまたはBeanデータ・コントロールを作成した後、DataControls.dcxファイルに対して概要エディタを使用してデータ・コントロールをさらに詳細に構成でき、「データ・コントロール」パネルを使用してデータバインドされたUIコンポーネントを作成できます。

3.3.3.1 EJBおよびBeanデータ・コントロールのDataControls.dcx概要エディタ

DataControls.dcxファイルの概要エディタには、データ・モデルのマスター/ディテール階層のビューおよびセッション・ファサードのメソッドが表示されます。ノードを選択するとフィールドが表示され、これらのフィールドを「属性」タブの対応するエンティティ・クラス内のデータベース列にマッピングできます。「アクセッサ」タブでは、エンティティの関係が定義されている対応するエンティティ・クラスのフィールドが表示されます(たとえばOneToManyおよびManyToOne)。コレクションの「操作」タブでは、コレクション・アクセッサの追加と削除のメソッドなど、データ・コントロールが標準操作に使用するエンティティ・メソッドを表示できます。

概要エディタおよび「データ・コントロール」パネルで使用されるアイコンの説明は、表2-1を参照してください。

データ・コントロールの設定を変更するには、要素を選択し、「編集」アイコンをクリックします。データ・コントロールの編集の詳細は、 「データ・コントロールへのビジネス・ロジックの追加」を参照してください。

3.3.3.2 EJBおよびBeanデータ・コントロールの「データ・コントロール」パネル

「データ・コントロール」パネルはパレットとして機能し、ノードを「データ・コントロール」パネルからWebページのデザイン・エディタにドラッグすることにより、データバインドされたUIコンポーネントを作成できます。「データ・コントロール」パネルの内容については、「「データ・コントロール」パネルのビジネス・サービスの表示」を参照してください。

EJBおよびJPAベースのBeanデータ・コントロールのほかに、表2-1に示すように名前付き基準のノードが表示されます。名前付き基準は、クイック検索フォームの作成に使用されます。デフォルトでは、「すべての問合せ可能な属性」という名前の暗黙的な名前付き基準が、データ・コントロールの作成時にそれぞれの問合せ可能なコレクションに対して表示されます。「名前付き基準を使用した結果セットのフィルタリング」で説明されているとおり、コレクションごとに追加の宣言的名前付き基準を作成できます。

データ・コントロールからのデータバインドされたUIコンポーネントの作成については、「「データ・コントロール」パネルでのデータバインドされたUIコンポーネントの作成」を参照してください。

3.3.3.3 EJBおよびBeanデータ・コントロールの組込み操作

EJBデータ・コントロールは、標準の組込みデータ・コントロール操作も提供しています。この操作を使用して、ページ・ナビゲーションおよびデータ操作のためのコマンド・コンポーネントをユーザー・インタフェース内で作成できます。

データ・コントロールに対して使用できるすべての操作については、「データ・コントロールの組込み操作」を参照してください。

3.3.4 「名前付き基準のサポート」オプションおよびページングに関する必知事項

EJBまたはJPAベースのBeanデータ・コントロールを作成する際に提示される「名前付き基準のサポート」オプションは、データ・コントロールによって使用されるハンドラ・クラスに影響を及ぼし、またアクセス・モードなどの機能にも影響を及ぼします。

データ・コントロールを作成する際、スクロール可能アクセス・モードまたは範囲ページング・アクセス・モードを選択した場合、「名前付き基準のサポート」オプションを選択したままにしておく必要があります。それ以外の場合、DataFilterHandlerハンドラを使用するようにデータ・コントロールが生成されます。つまり、ページング・メソッドを手動で実装する必要があります。(JPQLDataFilterHandlerは、スクロール可能アクセス・モードまたは範囲ページング・アクセス・モードを選択し、かつ「名前付き基準のサポート」オプションを選択したままにしている場合に使用され、追加のコーディングを必要とせずにアクセス・モードを実装します。)

データ・コントロールのアクセス・モードの詳細は、「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。

3.3.5 EJBデータ・コントロールのCRUD操作に関する必知事項

EJBデータ・コントロールを作成する際に、CRUD (作成/読取り/更新/削除)機能は、セッションBeanのサービス・メソッドと、セッションBeanに含まれるエンティティBeanに依存します。

たとえば、セッションBeanの永続化メソッドとマージ・メソッドが「データ・コントロール」パネルに表示され、これらのメソッドを使用して作成したボタンにより、ユーザーがオブジェクトの現行インスタンスを永続化およびマージできます。

組込みデータ・コントロール操作も使用可能で、これらの操作を使用してデータ操作をUIにバインドできます。続いて、これらの操作はセッション・ファサードおよびエンティティ・クラス内の該当するメソッドを呼び出します。また、これらの操作はADFイテレータの状態を更新する場合があります。たとえば、データ・コレクションのCreate操作を呼び出すと、そのコレクションを表すエンティティ・クラスのコンストラクタが呼び出されてインスタンスが作成され、続いてセッションBean内の該当する永続化メソッドが呼び出されて、JPA永続化コンテキストに新規インスタンスが追加されます。その後、新規に作成されたインスタンスはADFイテレータに追加されます。

ヒント:

可能な場合は、組込み操作を使用することが一般には最善策です。これは、これらの操作がJPAエンティティ・マネージャとADFイテレータの両方との通信を処理し、両者の同期を保つからです。

CRUD (作成/読取り/更新/削除)機能をJPAに依存せずに実行する場合は、CRUD操作のためにユーザー独自のロジックを実装することもできます。カスタムCRUD操作の実装の詳細は、「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください。

3.3.6 マージ・メソッドと永続化メソッドに関する必知事項

セッションBeanを作成したときに、マージ・メソッドと永続化メソッドの公開を選択した場合は、これらのメソッドが「データ・コントロール」パネルに表示されます。これらのメソッドを使用して作成したボタンにより、ユーザーはオブジェクトの現行インスタンスのマージと永続化を行うことができます。どちらを使用するかは、更新が行われた後でページとインスタンスとの対話が必要かどうかで決まります。インスタンスを使用し続ける必要がある場合、永続化メソッドを使用します。

マージ・メソッドは、JPA EntityManager.mergeメソッドの実装です。このメソッドは、現在のインスタンスを取得してコピーし、そのコピーをPersistenceContextに渡します。その後、元のオブジェクトではなく、その永続化されたエンティティへの参照が返されます。つまり、それ以降そのインスタンスに行われる変更は、マージ・メソッドを再度コールしないかぎり永続化されないということです。

永続化メソッドは、JPA EntityManager.persistメソッドの実装です。マージ・メソッド同様、このメソッドは、現在のインスタンスをPersistenceContextに渡します。ただし、コンテキストによってそのインスタンスの管理が続けられるため、以降の更新はコンテキスト内のインスタンスに行われます。

3.3.7 削除メソッドに関する必知事項

削除メソッド(JPA永続化コンテキストからオブジェクトを削除するための)を含むセッションBeanまたはJavaサービス・ファサードに基づくデータ・コントロールを使用している場合は、これらのメソッドが他のファサード・メソッドとともに「データ・コントロール」パネルに公開されます。ただし、ADFイテレータにバインドされたフォームまたは表からエンティティを削除する場合は、削除メソッドのかわりにDelete操作を通常は使用する必要があります。Delete操作は、ファサードの削除メソッドを呼び出すほか、ADFイテレータに変更について通知することにより、イテレータと永続性コンテキストの同期を保ちます。削除メソッド内でコーディングしたカスタム動作を利用するために削除メソッドを直接呼び出す場合は、ADFイテレータをリフレッシュするためのコードも提供する必要があります。

3.3.8 新規行の自動永続化について

EJB (およびJPAベースのBean)データ・コントロールのほとんどの種類では、Create操作によって新規行が作成され、行セットに挿入されます。ただし、新規に作成したオブジェクトが永続性コンテキストに追加されることはありません。インスタンスの永続化を作成直後に試行すると、必須フィールドが空であるために制約違反となる可能性があるため、これは暗黙的コミットを行うステートレス・データ・モデルには望ましい動作です。

ただし、モデルによっては、Create操作時に永続化メソッドを呼び出すオプションがサポートされます。これは、行を永続化するための基礎となるDMLが、コミット時まで据え置かれるからです。JDeveloperの「セッションBean作成」ウィザードを使用して、CMTおよび明示的コミットの動作を使用するステートフル・セッションBeanを生成する場合は、この自動永続化動作をサポートするモデルが生成されます。会話型Webアプリケーションにおけるこのモデルの利点は、アプリケーションがこれらの作成と永続化のステップを単一のジェスチャー(通常はボタン)に結合できることです。複数のインスタンスを作成した後、ユーザーはコミット・ボタンをクリックして、未処理の変更をすべて適用できます。この時点でトランザクションが開始され、データベース内のDML文が実行されて、未処理のINSERT、UPDATE、またはREMOVEの各操作が実行されます。

EJBまたはBeanのデータ・コントロールを作成する際に、クラスがスキャンされて、この「自動永続化」動作の対象になるかどうかが確認されます。対象になる場合は、データ・コントロールのEagerPersistプロパティがtrueに設定されます。この初期値をオーバーライドして、必要に応じてこのオプションを有効または無効にすることができます。

エンティティの永続化メソッドの自動呼出しは、一般に次の条件が満たされている場合にのみお薦めします。

- セッションBeanが明示的なコミット動作を行う(暗黙的コミット動作を行うと、オブジェクトが作成と同時にコミットされるため)。

- 永続化メソッドが呼び出されたときに、モデルがSQLの実行を即座に試行しない。

- 主キー列に対するID生成をセットアップした。詳細は、「@GeneratedValueアノテーションを使用した主キーのIDの生成について」を参照してください。

- EJBセッションBeanがステートフルで、次のものを使用する。

- コンテナ管理のトランザクション

- セッションBeanクラスの@TransactionAttribute(TransactionAttributeType.NOT_SUPPORTED)アノテーション

- コミット・メソッドの@TransactionAttribute(TransactionAttributeType.REQUIRED

JDeveloperの「セッションBean作成」ウィザードを使用して、コンテナ管理のトランザクションと明示的コミット・モデルを使用するステートフル・セッションBeanを作成する場合は、このBeanに対して作成するすべてのデータ・コントロールが、EagerPersistプロパティをtrueに設定して生成されます。それ以外の場合、EagerPersistはfalseに設定されます。

3.3.9 EagerPersistプロパティを変更する方法

Beanが自動永続化動作を使用する条件を満たしていて(「新規行の自動永続化について」で説明したとおり)、ただしオンになっていない場合(エンティティ・クラスの作成に「エンティティ作成(表ベース)」ウィザードを使用しなかった場合など)は、EagerPersistプロパティをtrueに手動で設定できます。同様に、プロパティがtrueに設定されている場合に、自動永続化動作が必要なければ、プロパティをfalseに変更できます。

データ・コントロールのEagerPersistプロパティの値を変更する手順は次のとおりです。

1. 「データ・コントロール」パネルで、データ・コントロールのルート・ノードを右クリックして、「定義の編集」を選択します。

2. ejb定義の「プロパティ」ダイアログで、EagerPersistプロパティの値を変更します。

3.3.10 永続性コンテキストと問合せの再発行に関する必知事項

コンテナ管理のステートフル・セッションBeanに基づくデータ・コントロールを使用している場合は、セッション内で行われたコミット前の変更が、データソースに対して行われる後続の問合せに反映されません。このため、ユーザーがトランザクションの途中でデータソースを問い合せる操作を実行した場合、その後でページのデータのリフレッシュを行っても、セッションで行われた変更内容が結果に含まれません。

3.3.11 単一のBeanに対して異なるデータ・コントロールを作成する方法

単一のBeanに対して、データ・コントロールのインスタンスを複数作成できます。これは、比較用のデータ・コントロール機能をUI開発者に提供する必要がある場合に便利です。たとえば、スクロール可能ページングを使用するUIコンポーネントと、範囲ページングを使用するUIコンポーネントの2種類をUI開発者が作成できるようにする場合などが考えられます。

始める前に:

EJBデータ・コントロールの一般的な使用法について理解しておくと役に立ちます。詳細は、「ADFデータ・コントロールを使用したセッションBeanサービスの公開」を参照してください。

アプリケーションでデータ・コントロールに対して使用することが必要になる可能性がある一般的なデータ・コントロール機能を理解しておくと役に立つこともあります。詳細は、「EJBデータ・コントロールの追加機能」を参照してください。

データ・コントロールが使用する、セッションBean内のコード・パターンとコンストラクトについて理解しておくと役に立つこともあります。詳細は、「データ・コントロールで使用するセッションBeanの準備」を参照してください。

また、「EJBデータ・コントロールの作成方法」の説明に従って、データ・コントロールを作成する必要があります。

Beanに対して追加のデータ・コントロール・インスタンスを作成する手順は次のとおりです。

1. 追加のデータ・コントロール・インスタンスを作成する対象のBeanを右クリックして、「データ・コントロールの作成」を選択します。

2. ウィザードの「セッションEJBの選択」ページ(または「Beanクラスの選択」)で、データ・コントロール・インスタンスの一意の名前(前に作成したどのデータ・コントロール・インスタンスとも異なる)を指定します。

3. データ・コントロールのそのインスタンスに必要なオプションを指定して、ウィザードを完了します。

3.3.12 追加のデータ・コントロール・インスタンスを作成する際の処理内容

Beanに対して追加のデータ・コントロール・インスタンスを作成する際には、DataControls.dcxファイルの概要エディタに追加のハイレベル・ノードが表示されます(図3-3および「データ・コントロール」パネルを参照)。

図3-3 2つのデータ・コントロール・インスタンスを表示するデータ・コントロール概要エディタ

注意:

UIヒントやバリデータなどの宣言的メタデータをデータ・コントロールに追加する際に、Beanの様々なデータ・コントロール・インスタンスがその同じメタデータを使用します。宣言的メタデータの追加の詳細は、 「データ・コントロールへのビジネス・ロジックの追加」を参照してください。

3.4 EJBデータ・コントロールでのデータのページ分割されたフェッチ

EJBデータ・コントロールまたはBeanデータ・コントロールを作成するときには、ウィザードの「アクセス・モード」ドロップダウン・リストを使用して、データベースからレコードにどのようにアクセスするか、また同時にメモリーに保持されるレコードの数を制限するかどうかを決定できます。

EJBデータ・コントロールおよびBeanデータ・コントロールでは、データのフェッチとメモリーへの格納については、次のようなことが考えられます。

- スクロール可能アクセス・モード。
データ・コントロールの作成時にデフォルトを受け入れた場合、データのアクセス・モードはscrollableに設定されます。つまり、アプリケーションで表示する必要のあるデータは、必要に応じて(UIコンポーネントのイテレータで指定されたレンジ・サイズと等しい増分で)データベースから取得され、メモリーに格納されます。次に、ユーザーがアプリケーションで前方にスクロールすると、必要に応じて追加の行がフェッチされ、メモリーに格納されます。フェッチされた行はすべて、メモリーに残っています。

たとえば、実行中のアプリケーションに、行1から20までを1つのWebページに表示する表が含まれていて、その表のイテレータのレンジ・サイズが25 (デフォルト)の場合は、データ・コントロールでは最初の25行がフェッチされます。結果セットの行477から496までを表示するためにユーザーが下にスクロールした場合は、行26から500までがフェッチされるまで、ユーザーがスクロールするにつれて、データは25件ずつフェッチされます。その時点では、合計500行がメモリーに格納されています。

oracle.adf.model.adapter.bean.DataFilterHandlerおよびoracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerを使用したデータ・コントロールでは、これがデフォルトのモードです。ただし、oracle.adf.model.adapter.bean.DataFilterHandlerを使用したデータ・コントロールでは、アクセス・モードを実装するには、データ・コントロールにページング・メソッドを引き続き追加する必要があります。詳細は、「データ・コントロールでページ分割サポートを手動で実装する方法」を参照してください。

- 範囲ページング・アクセス・モード
同時にフェッチされメモリーに格納されるレコードの数を制限するために、rangePagingアクセス・モードを使用できます。スクロール可能モードと同様に、範囲ページング・モードでも、アプリケーションでデータを増分でフェッチできます。範囲ページング・モードでの大きな違いは、メモリーに残されるのは、最後にフェッチされた増分のみであるということです。したがって、たとえば、アクセッサ・イテレータのrangeSize属性が25に設定されていると、いずれの時点でも、メモリーに保持されるレコードは25件までです。

前述のスクロール可能な例を範囲ページング版に当てはめると、データ・コントロールでは、行1から20までを表示するために、行1から25までをフェッチしてメモリーに保持します。ユーザーが下にスクロールした場合、データ・コントロールでは、ユーザーがスクロールするのに伴ってデータを25件ずつフェッチし、新しい範囲をフェッチするたびに前の25件のレコードをメモリーから解放します。前述の例で、ユーザーが行477から496までに達した時点でメモリーに残っているのは、行476から500までのみです。

複数の増分からのデータを表示する位置までスクロールした時点でメモリーに保持されるのは、最後にフェッチされた増分からのデータのみです。

データ・コントロールの作成時に、「EJBデータ・コントロールの作成」ウィザードの「アクセス・モード」ドロップダウンの「範囲ページング」を選択して、ページ範囲を設定できます。

注意:

データ・コントロールで範囲ページングを使用した場合、そのデータ・コントロールから作成された、データ・バインダされたUIコンポーネントに対して、組込みナビゲーション操作Lastは機能しません。

- ページ分割なし。ページ分割がない場合は、UIコンポーネントに使用できるデータがすべてフェッチされます。
「EJBデータ・コントロールの作成」ウィザードの「アクセス・モード」ドロップダウンの「ページングなし」を選択して、ページングを使用しないようにデータ・コントロールを構成できます。

具体的なコレクションに対してページングを無効にするには、アノテーションを使用することもできます。詳細は、「データ・コントロールで個別オブジェクトにアクセス・モードを指定する方法」を参照してください。

- カスタム・ページ分割。組込みページ分割オプションがニーズに合わない場合は、カスタム・ハンドラ・クラスを実装することによって、独自のページ分割を実装できます。詳細は、「問合せおよびページ分割にカスタム・ハンドラを実装する方法」を参照してください。

アクセス・モードおよびデータ・コントロール・ハンドラの詳細は、「スクロール可能モードおよび範囲ページング・モードに関する必知事項」を参照してください。

3.4.1 データ・コントロールのページング・モードを変更する方法

データ・コントロールのページング・モードを変更する場合は、「データ・コントロール」パネルで変更できます。

注意:

oracle.adf.model.adapter.bean.DataFilterHandlerとoracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerのどちらかのハンドラを使用したデータ・コントロールでは、デフォルトのアクセス・モードはscrollableです。

始める前に:

EJBデータ・コントロールおよびBeanデータ・コントロールのアクセス・モードの一般的な知識があると役立ちます。詳細は、「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。

アプリケーションでデータ・コントロールに対して使用することが必要になる可能性がある一般的なデータ・コントロール機能を理解しておくと役に立つこともあります。詳細は、「EJBデータ・コントロールの追加機能」を参照してください。

EJBまたはBeanのデータ・コントロールを作成する必要があります。詳細は、「EJBデータ・コントロールを作成する方法」を参照してください。

データ・コントロールのページング・モードを変更する手順は次のとおりです。

1. 「データ・コントロール」パネルで、データ・コントロールのノードを右クリックして「定義の編集」を選択します。

2. ejb-definitionの「プロパティ」ダイアログまたはbean-definitionの「プロパティ」ダイアログで、「AccessMode」ドロップダウン・リストからrangePagingまたはscrollableを選択します。

3. 範囲ページングを使用するようにデータ・コントロールを変更する場合は、データ・コントロールのFactoryClassプロパティをoracle.adf.model.adapter.bean.BeanDCFactoryImplと指定してください。

FactoryClassプロパティにアクセスするには、DataControls.dcxファイルのソース・エディタを使用するか、あるいはソース・エディタまたは概要エディタでDataControls.dcxを開いたときに表示される「プロパティ」ウィンドウを使用します。

3.4.2 範囲ページングを使用するデータ・コントロールにレンジ・サイズを設定する方法

データ・コントロールのアクセス・モードをrangePagingに設定すると、データ・コントロールは、データ・コントロール内のコレクションにバインドされる各コンポーネントのアクセッサ・イテレータのrangeSizeプロパティを読み取ることによって、レンジ・サイズを判別します。

コンポーネントのレンジ・サイズを設定する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、データ・コントロールにバインドされるコンポーネントがあるページを選択します。

2. 「構造」ウィンドウで、データ・コントロール・コレクションにバインドされるコンポーネントを選択します。

3. 「プロパティ」ウィンドウで、「動作」ノードを開き、rangeSizeプロパティを目的の値に設定します。

イテレータ・バインディングの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のページ定義ファイルに作成されるイテレータ・バインディングに関する項を参照してください。

3.4.3 スクロール可能モードおよび範囲ページング・モードに関する必知事項

スクロール可能モードおよび範囲ページング・モードをサポートするデータ・コントロールは、その機能を実装するに際して、Beanクラス内のメソッドに依存しています。データ・コントロールが使用するメソッドは、データ・コントロールが使用するデータ・コントロール・ハンドラ・クラスに依存しています。

JPAベースのデータ・コントロールでは通常、JPQLDataFilterHandlerハンドラが指定されています。JPQLDataFilterHandlerは、JPA問合せとqueryByRange()メソッドがBean内に存在しているかどうかに応じて異なります。詳細は、「EJBデータ・コントロールの前提条件と考慮事項」を参照してください。

非JPAのBeanデータ・コントロール(およびqueryByRange()メソッドを持たないEJBデータ・コントロールとJPAベースのデータ・コントロール)の場合は、DataFilterHandlerが指定されます。このハンドラを使用するデータ・コントロールに範囲ページングを実装するには、「データ・コントロールでページ分割サポートを手動で実装する方法」に示されているように、Beanクラスにコードを追加する必要があります。

これらのハンドラ・クラスのいずれも持たないデータ・コントロール(名前付き基準のサポートを明示的にオフにしたEJBデータ・コントロールなど)の場合は、スクロール可能ページングまたは範囲ページングの組込みサポートはありません。ただし、ユーザーが独自のハンドラ・クラスを作成してページング・サポートを実装できます。詳細は、「問合せおよびページ分割にカスタム・ハンドラを実装する方法」を参照してください。

3.4.4 データ・コントロールで個別オブジェクトにアクセス・モードを指定する方法

様々なサイズの複数のコレクションがデータ・コントロールに含まれる場合は、コレクションのいくつかに別々のアクセス・モードを設定することもできます。これを行うには、Bean内でデータ・コントロールが表すアクセッサ・メソッドにアノテーションを配置します。

アノテーションが使用されるメソッドでは、そのアノテーションによって、データ・コントロールに設定されているアクセス・モードがオーバーライドされます。アクセッサ・メソッドにそのようなアノテーションがない場合、そのアクセス・モードは、データ・コントロールに定義されているアクセッサ・メソッドから継承されます。

Beanデータ・コントロールまたはEJBデータ・コントロールで個別オブジェクトにアクセス・モードを指定する手順は次のとおりです。

1. データ・コントロールのベースとなるクラスを開きます。

2. データ・コントロールに対して一般的に指定されているアクセス・モードとは異なるアクセス・モードを指定するメソッドに、アノテーションを追加します。

注意:

これらのアノテーションは、getterメソッドに対してのみ機能します。

次の例は、必要なインポート文と使用可能なアノテーション、およびコレクションに対してそれらをどのように使用できるかを示しています。

import oracle.adf.model.adapter.bean.annotation.AccessMode;
import oracle.adf.model.adapter.bean.annotation.AccessModeType;

...
* List with scrollable access
*/
@AccessMode(type=AccessModeType.SCROLLABLE)
public List<Employees> getEmployeesScrollable() {
...
* List with range paging.
*/
@AccessMode(type=AccessModeType.RANGE_PAGING)
public List<Employees> getEmployeesRangePaging() {
...
* List with no paging.
*/
@AccessMode(type=AccessModeType.NO_PAGING)
public List<Employees> getEmployeesNoPaging() {
...

注意:

DataControls.dcxファイルにあるAdapterDataControl要素のDefinition属性によって指定されるクラス上にアノテーションを配置する必要があります。デフォルトでは、これはBean実装クラスです。

Oracle ADFの12.1.2リリースでは、Definition属性は、デフォルトでセッションBeanのビジネス・インタフェース(リモートまたはローカル)に設定されました。つまり、アノテーションを、Bean実装クラスではなくビジネス・インタフェースに配置する必要があります。このリリースでこの動作を保持する必要がある場合は、ビジネス・インタフェースを指すようにDefinition属性の値を変更することができます。

3.4.5 範囲がページ分割されたコレクションに基づいた表のソートに関する必知事項

デフォルトでは、JPAベースのデータ・コントロールにバインドされた表をユーザーがソートした場合、ADFモデル・ランタイムによってイテレータは、すべての行をメモリーに返してソートするように強制されます。これは、バックエンドJPQL問合せがそのソートをデータベース・レベルですでに行っている場合でも同じであり、コレクションが大きすぎるとメモリーに障害が発生する恐れがあります。コレクションに範囲ページングを使用している場合は、ADFモデル・ランタイムによるメモリー内の全ソートを無効にし、そのかわりに、現在選択している範囲に基づいて、ソートをデータ・コントロールに処理させることができます。

データ・コントロールを使用して、範囲がページ分割されたコレクションのソートを処理する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、DataControls.dcxファイルをダブルクリックして概要エディタで開きます。

2. 概要エディタで、編集するデータ・コントロールのノードを選択します。

3. 「プロパティ」ウィンドウで、ImplementsSortプロパティをtrueに設定します。

3.5 アノテーションを使用した属性のUIヒントの提供

EJBセッションBeanまたはJavaBeansコンポーネントのデータ・コントロールを作成したら、Javaアノテーションを使用してデータ・オブジェクト属性に対する宣言的メタデータを作成し、UIコンポーネントでの属性の表示方法に関するデフォルトを提供することができます。これにより、UIコンポーネントでこれらのUIヒントを使用して、ロケールに依存した一貫性のある方法で問合せ情報を自動表示することができます。たとえばUIヒントを使用して、該当するゲッターによって返されるフィールドに対応するデータ・コントロール属性からUIコンポーネントを作成する際に、ラベルとツールチップ・テキスト用のデフォルトを提供できます。

Webページで、UI開発者は、EL式ユーティリティ・メソッドを入力することによりUIヒント値にアクセスできます。EL式ユーティリティ・メソッドは、バインディング・ネームスペースで定義され、ADFバインディング・インスタンス名に対して指定されます。「データ・コントロール」パネルを使用して、これらのUIヒントのアノテーションが付けられた属性に基づいてUIコンポーネントを作成すると、ヒントにアクセスするためのEL式がUIコンポーネント・コードで生成されます。これらのEL式に対する構文の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のEL式を使用してUIヒントにアクセスする方法に関する項を参照してください。

アノテーションを使用して、次のUIヒントを設定できます。

- label - コンポーネントのラベル。

- tooltip - コンポーネントのツールチップ。

- display - UIにおいてコレクションの場合にフォームおよび表で属性を表示するかどうか。この属性をfalseに設定すると、この属性は、「データ・コントロール」パネルのコレクションの属性の中に表示されません。

- width - コンポーネントの幅(ピクセル単位)

- height - コンポーネントの高さ(ピクセル単位)

- autoSubmit - 該当するアクション(クリック、テキスト変更など)が実行されたときにコンポーネントから自動送信を行うかどうか。

- controlType - 属性を表示するためにクライアントUIで使用されるコントロールのタイプ。このヒントのデフォルト値はControlHintType.DEFAULTです。これは、属性のJavaタイプに応じて最適なコンポーネントを選択するようにクライアントによって解釈されます。Javaタイプの属性に対してこのデフォルト値を保持することができます。(このヒントに対して他の値を考えることが意味を持つのは、属性が非Javaタイプに基づいている場合のみです。)

- formatType - 属性(日付、通貨、パーセンテージなど)に適用される書式設定の種類を定義するクラス。

- format - 特に数値または日付値を表示する方法を決定するための書式マスク。たとえば日付の場合、dd/MM/YYYYと指定できます。これは、最初に日、次に月、最後に年を指定して日付を示し、各部分はスラッシュ(/)によって区切られます。

- timezoneId - タイプがDateの属性の場合、使用される固定タイムゾーンを指定するために使用できます。このUIヒントを設定しない場合、ユーザーのブラウザ(またはUIを表示する他のクライアント)によってタイムゾーンが決定されます。

アノテーションを通して設定できるUIヒントは、XMLデータ・コントロール構造ファイルを使用して宣言的にデータ・コントロールに対して設定できるメタデータのサブセットから構成されます。データ・コントロール構造ファイルを使用すると、宣言的検証ルール、属性のデフォルト値およびオブジェクトの他のメタデータを全体として設定することもできます。データ・コントロール構造ファイルを通してデータ・コントロールを構成するすべての方法の詳細は、 「データ・コントロールへのビジネス・ロジックの追加」を参照してください。

注意:

アノテーションとXMLデータ・コントロール構造ファイルを両方使用して属性のUIヒントを設定する場合、データ・コントロール構造ファイルの設定が優先されます。

BeanクラスのUIヒントを提供するために次の3つの高レベルのアノテーションが用意されています。

- oracle.adf.model.adapter.bean.annotation.AttributeHint - フィールドのデフォルト・ラベル、ツールチップ、高さおよび幅を指定できます。また、属性を表示するか非表示にするか、ユーザーが入力を完了したときにフィールドを自動的に送信するかどうか、およびフィールドに対してどのようなタイプのコンポーネントを生成するかを指定できます。

- oracle.adf.model.adapter.bean.annotation.DateFormatter - Date属性に対して書式マスクとタイムゾーンを指定できます。format要素を使用して、MM/dd/YYYYなどの書式マスクを設定できます。書式マスクに使用できる日時パターン文字列の構文の詳細は、java.text.SimpleDateFormatに関するAPIドキュメント(http://docs.oracle.com/javase/7/docs/api/java/text/SimpleDateFormat.html)を参照してください。

- oracle.adf.model.adapter.bean.annotation.Formatter - その他の数値のタイプ(oracle.jbo.format.DefaultCurrencyFormatterやoracle.jbo.format.PercentageFormatterなど)の書式設定を指定できます。

また、前述のアノテーションに対して使用可能な値を列挙し、前述のアノテーションの使用時にクラスへのインポートが必要になる可能性のある次のサポート・クラスが用意されています。

- oracle.adf.model.adapter.bean.annotation.ControlHintType - AttributeHint属性のcontrolType要素から参照できるコンポーネントのタイプのリストを提供します。

- oracle.adf.model.adapter.bean.annotation.FormatterType - DateFormatterおよびFormatterアノテーションによって参照されるフォーマッタのタイプのリストを提供します。

- oracle.adf.model.adapter.bean.annotation.TimeZoneID - DateFormatterアノテーションから参照できるタイムゾーンのリストを提供します。

注意:

属性ヒントのアノテーションをメソッドに追加すると、値の入力に役立つJDeveloperの構文補完インサイト機能を使用できます。入力中に構文補完インサイトのポップアップが自動的に表示されない場合は、[Ctrl]を押しながら[Space]を押します

次のコードは、エンティティBeanクラスのgetterメソッドでUIヒントのアノテーションを使用する方法の例です。アノテーションが利用可能になるのは、データ・コントロールを生成した後、またはEJBプロジェクトにADF Model Generic Runtimeライブラリを追加した後のみです。

import oracle.adf.model.adapter.bean.annotation.AttributeHint;
import oracle.adf.model.adapter.bean.annotation.ControlHintType;
import oracle.adf.model.adapter.bean.annotation.DateFormatter;
import oracle.adf.model.adapter.bean.annotation.FormatterType;
import oracle.adf.model.adapter.bean.annotation.TimeZoneID
...
@AttributeHint (
label = "Hire Date",
tooltip = "Type date in the form MM/dd/YYYY",
display = true,
controlType = ControlHintType.DEFAULT,
width = 40,
height = 20,
autoSubmit = true)
@DateFormatter (
type = FormatterType.SIMPLE_DATE,
format = "MM/dd/YYYY",
formatter = "",
timezoneId = TimeZoneID.DEFAULT)
public Date getHireDate() {
return hireDate;
}

注意:

@Formatterおよび@DateFormatterアノテーションのformatter要素は、日付または数値の書式を提供するために個別のハンドラ・クラスを指定できる拡張オプションです。たとえば、この要素を使用して、oracle.jbo.format.DefaultDateFormatterを拡張するハンドラを提供できます。

次の例は、@Formatterアノテーションを使用して、通貨の書式設定によって属性を表示するように指定する方法を示しています。

import oracle.model.adapter.bean.annotation.Formatter;
import oracle.model.adapter.bean.annotation.FormatterType;
...
@Formatter (type = FormatterType.CURRENCY)
public Integer getMinSalary() {
return minSalary;
}

@Formatter type要素を通して次のフォーマッタを割り当てることができます。

- BIGDECIMAL - oracle.jbo.format.DefaultBigDecimalFormatterによって定義されるタイプ
CURRENCY oracle.jbo.format.DefaultCurrencyFormatterによって定義されるタイプ

DATE - oracle.jbo.format.DefaultDateFormatter

PERCENTAGE -oracle.jbo.format.PercentageFormatterによって定義されるタイプ

NUMBER - oracle.jbo.format.DefaultNumberFormatterによって定義されるタイプ

注意:

UIヒントのアノテーションを適用する場合、データ・コントロールに基づいて作成するページのデザインタイム・ビューでヒントの影響を確認することはできません。ただし、ADFモデル・テスターを使用してヒントのテストと検証を行うことができます。テスターの使用方法の詳細は、「Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト」を参照してください。

3.6 EJBデータ・コントロールのフェイルオーバーの有効化

ステートフル・セッション・Beanに基づくEJBデータ・コントロールを構成して、ADFモデル・ランタイムによってその状態が管理されるようにし、データ・コントロールによってカプセル化されたオブジェクトのフェイルオーバーを有効にすることができます。EJBデータ・コントロールのフェイルオーバー・サポートは、Beanデータ・コントロールと同じように動作します。

このフェイルオーバー・サポートのセッションBeanでのメソッド・スタブの生成の詳細は、「EJBデータ・コントロールを作成する方法」を参照してください。それらのメソッドの実装の詳細は、「Beanデータ・コントロールでのフェイルオーバーの有効化」を参照してください。

4 Beanデータ・コントロールの作成と構成

この章では、Java Persistence API (JPA)とプレーンJavaオブジェクト("POJO"とも呼ばれる)に基づくJavaBeansコンポーネントのデータ・コントロールを作成する方法を説明します。

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

- Beanデータ・コントロールについて

- データ・コントロールによって公開するBeanの準備

- Beanデータ・コントロールによるJavaコレクションとメソッドの公開

- Beanデータ・コントロールでのデータのページ分割されたフェッチ

- Beanデータ・コントロールでのフェイルオーバーの有効化

- Beanデータ・コントロールのカスタムCRUD操作の有効化

- 非JPA Beanデータ・コントロールへのトランザクション動作の追加

- アノテーションを使用したBeanデータ・コントロールのメタデータの宣言

- カスタムBeanデータ・コントロールの作成

4.1 Beanデータ・コントロールについて

データ・コントロールは、ADFモデルによって提供される抽象化です。データ・コントロールを使用して、データとビジネス・サービスを宣言的に操作し、UIコンポーネントを容易に作成できます。データ・コントロールの一般情報については、「ADFモデルについて」を参照してください。

Beanデータ・コントロール・タイプを使用して、プレーンJavaオブジェクト(POJO)とJPAベースのJavaサービス・ファサード・クラスを作成します。

4.1.1 JPAベースのBeanデータ・コントロールについて

EJBデータ・コントロールと同様に、JPAベースのBeanデータ・コントロールを使用して持続データを処理できます。これらのデータ・コントロールは、JPAエンティティ・クラスにアクセッサ・メソッドを提供するPOJOサービス・ファサード・クラスに基づいています。JPAベースのBeanデータ・コントロールの主な違いは、EJBコンテナに依存できず、永続性を管理するためのコードをユーザーが提供する必要があることです。EJBデータ・コントロールの詳細は、「EJBデータ・コントロールについて」を参照してください。

4.1.2 非JPA Beanデータ・コントロールについて

JPA機能を使用しないJavaクラスのBeanデータ・コントロールを作成することもできます。これらのデータ・コントロールは、永続性機能や名前付き基準のサポートを提供しませんが、たとえば属性に対する宣言的検証ルールの追加や、UIヒントのサポートなど、アダプタ・データ・コントロールのその他の機能は備えています。

JPAベースのBeanデータ・コントロールとは異なり、非JPAデータ・コントロールにはトランザクションの処理やデータソースの更新の実装が組み込まれていません。ただし、データ・コントロールによって認識されるシグネチャを持つ特定のメソッド内で、その機能のユーザー独自の実装をBeanクラスにコーディングできます。詳細は、「非JPA Beanデータ・コントロールへのトランザクション動作の追加」、および「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください。

非JPAデータ・コントロールは、スクロール可能ページングと範囲ページングをサポートしていますが、多少の手動コーディングを必要とします。詳細は、「データ・コントロールでページ分割サポートを手動で実装する方法」を参照してください。

Beanデータ・コントロールを拡張するカスタム・データ・コントロール・タイプを作成することもできます。詳細は、「カスタムBeanデータ・コントロールの作成」を参照してください。

4.1.3 Beanデータ・コントロールの追加機能

データ・コントロールを実装する前に、他のADFおよびJDeveloperの機能を理解しておくと役に立つことがあります。次に、役に立つ可能性のある他のセクションへのリンクを示します。

一般的なデータ・コントロール機能: EJBデータ・コントロールを使用する前に、広範なデータ・コントロールの概念を理解することが重要です。詳細は、「ADFデータ・コントロールの使用」を参照してください。

ADFモデルとデータ・バインディング: ADF Webアプリケーション内でフォームを作成する場合は、ADFモデルおよびデータ・バインディングを使用します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「Fusion WebアプリケーションでのADFモデルの使用」およびOracle ADFモデルJava APIリファレンスを参照してください。

ADF Faces: データバインドされたUIコンポーネントを作成する際に、ADF Facesコンポーネント・セットからのコンポーネントを使用する場合があります。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされたWebユーザー・インタフェースの作成」を参照してください。

ADFタスク・フロー: タスク・フローは、JSFページ・フローを拡張して、トランザクション対応のモジュラ・アプローチによるナビゲーションおよびアプリケーション・コントロールを実現します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFタスク・フローの作成」を参照してください。

4.2 データ・コントロールによって公開するBeanの準備

Beanデータ・コントロールは、Beanクラスのメタデータ・ラッパーとして機能し、データ・コントロール・オブジェクトとしてBeanのコード要素を公開します。このオブジェクトを使用して、これらのコード要素をUIコンポーネントにバインドできます。

4.2.1 Beanデータ・コントロールでサポートされる型とコンストラクト

Beanデータ・コントロールは、EJBデータ・コントロールと同じJava型およびコンストラクトをサポートします。詳細は、「EJBデータ・コントロールでサポートされる型とコンストラクト」を参照してください。

4.2.2 Beanデータ・コントロール・オブジェクト

Beanに基づいてデータ・コントロールを作成すると、データ・コントロールによって数種類のオブジェクトが公開され、それぞれのオブジェクトを各種UIコンポーネントにバインドできます。Beanデータ・コントロールは、EJBデータ・コントロールと同じタイプのオブジェクトを公開します。詳細は、「EJBデータ・コントロール・オブジェクト」を参照してください。

4.2.3 Beanデータ・コントロールの前提条件と考慮事項

Beanデータ・コントロールは、JavaBeans仕様を満たすクラスを基礎としています。たとえば、クラスが有効なデータ・コントロール・ソースであるためには、publicデフォルト・コンストラクタが必要です。

JPAベースのデータ・コントロールの全機能を活用するには、データ・コントロールによってサービスの構造を表現するために使用できるいくつかの要素をクラスに組み込む必要があります。これらの要素は、EJBデータ・コントロールのものとほとんど同じです。主な違いは、EJBセッションBeanのかわりに、Beanデータ・コントロールのJavaサービス・ファサード・クラスを使用することです。詳細は、「EJBデータ・コントロールの前提条件と考慮事項」を参照してください。

4.2.4 JPAベースのBeanデータ・コントロールのサービス・ファサードを作成する方法

Javaエンティティ・クラスにアクセスするためのサービス・メソッドを含むPOJOクラスに基づいて、Beanデータ・コントロールを作成できます。JDeveloperに備わっているウィザードが、データ・コントロールの操作に必要なすべてのメソッドを含むファサード・クラスの作成に役立ちます。

始める前に:

サービス・ファサードとデータ・コントロールが準拠するコード規則について、全般的に理解しておくと役に立つ場合があります。詳細は、「データ・コントロールによって公開するBeanの準備」を参照してください。

アプリケーションでデータ・コントロールに対して使用することが必要になる可能性がある一般的なデータ・コントロール機能を理解しておくと役に立つこともあります。詳細は、「Beanデータ・コントロールの追加機能」を参照してください。

『Oracle JDeveloperによるアプリケーションの開発』のJPAエンティティを作成する方法に関する項で説明されているとおり、JPAエンティティを使用するプロジェクトを含むアプリケーション・ワークスペースを作成する必要があります。

JPAベースのBeanデータ・コントロールのサービス・ファサードを作成する手順は次のとおりです。

1. JPAエンティティ・クラスを含むパッケージを右クリックして、Javaサービス・ファサードを選択します。

2. 「Javaサービス・ファサードの作成」ウィザードの「Javaサービス・クラス」ページで、次のことを行います。

- サービス・クラスの名前を指定します。

- サービス・ファサードの基礎にする永続性ユニットを指定します。

- 「暗黙的」または「明示的」ラジオ・ボタンを選択して、コマンドの動作を決定します。
「明示的」を選択した場合は、クラスにトランザクション・メソッドが生成されます。後でこのクラスに基づいてデータ・コントロールを作成した場合、これらのメソッドはCommit操作およびRollback操作として公開されます。

「暗黙的」を選択した場合は、データソースの行を追加および削除するためのメソッドとして、ウィザードによって生成されるpersistEntity()、mergeEntity()、およびremoveEntity()の各メソッドを使用できます。

3. 「Javaサービス・ファサード・メソッド」ページで、生成するメソッドを選択します。

注意:

後でデータ・コントロールを作成し、組込みページ分割とJPA問合せのサポートを使用する場合は、queryByRange()メソッドを必ず選択してください。

4. 「終了」をクリックして、ウィザードを終了します。

4.3 Beanデータ・コントロールによるJavaコレクションとメソッドの公開

Beanの準備ができたら、JDeveloperを使用してデータ・コントロールを作成でき、これらのデータ・コントロールにより、Beanのサービス、およびデータ・コントロールによって提供される組込み操作にUIコンポーネントを宣言的にバインドするために必要なオブジェクトが提供されます。

4.3.1 JPAベースのBeanデータ・コントロールを作成する方法

JPAベースのBeanデータ・コントロールは、「新規ギャラリ」ウィンドウまたは「アプリケーション」ウィンドウから作成します。

始める前に:

Beanデータ・コントロールの一般的な知識があると役立ちます。詳細は、「Beanデータ・コントロールによるJavaコレクションとメソッドの公開」を参照してください。

アプリケーションでデータ・コントロールに対して使用することが必要になる可能性がある一般的なデータ・コントロール機能を理解しておくと役に立つこともあります。詳細は、「Beanデータ・コントロールの追加機能」を参照してください。

データ・コントロールが使用する、Bean内のコード・パターンとコンストラクトについて理解しておくと役に立つこともあります。詳細は、「データ・コントロールによって公開するBeanの準備」を参照してください。

また、「JPAベースのBeanデータ・コントロールのサービス・ファサードを作成する方法」で説明しているように、Javaサービス・ファサード・クラスを作成する必要があります。

Beanデータ・コントロールを作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、データ・コントロールの作成対象のBeanを右クリックし、「データ・コントロールの作成」を選択します。

JPAベースのデータ・コントロールの場合は、データ・コントロールのベースとしてJavaサービス・ファサード・クラスを使用します。

2. 「Beanデータ・コントロールの作成」ウィザードの「Beanクラスの選択」ページで、データ・コントロール・インスタンスの名前を指定します。

注意:

同じBeanの異なる動作を使用して、複数のデータ・コントロール・インスタンスを作成できます。詳細は、「単一のBeanに対して異なるデータ・コントロールを作成する方法」を参照してください。

3. ADFデータ・コントロール機能の選択ページで、アプリケーションに使用する追加のデータ・コントロール機能に応じて、次のいずれかのチェック・ボックスを選択します。データ・コントロール機能を実装するためのメソッドがBeanに追加されます。

- トランザクション。この機能を選択すると、commitTransaction()、rollbackTransaction()、およびisTransactionDirty()の各メソッドがBeanに生成されます。JDeveloperを使用して、明示的なコミット動作を行うJavaサービス・ファサードを作成した場合は、これらのメソッドがすでに実装されています。詳細は、「非JPA Beanデータ・コントロールへのトランザクション動作の追加」を参照してください。

- カスタムCRUD。この機能により、永続データの操作をユーザーが独自に実装できます。JPAベースのBeanデータ・コントロールにはすでにJPAからのCRUD機能が備わっているので、JPAの機能をオーバーライドする場合は単にこの機能を選択すれば済みます。詳細は、「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください。

- フェイルオーバー。詳細は、「Beanデータ・コントロールでのフェイルオーバーの有効化」を参照してください。

4. オプションで、「新規ラッパー・クラス」アイコン(「実装クラス」フィールドの右側)をクリックして、ウィザードのこのページで作成されたカスタム・メソッドを保持する、Beanクラスを拡張した別個のクラスを生成します。

5. 「Beanデータ・コントロールのオプション」ページで、追加オプションのいずれかを選択します。

- アクセス・モード。データ・コントロールがデータをフェッチしてメモリーに格納する方法を設定できます。詳細は、「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。

- 名前付き基準のサポート。選択すると、宣言的名前付き基準の組込みサポートがデータ・コントロールに付加されます。このサポートを使用して、クイック検索フォームを作成できます。詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。このオプションは、デフォルトで選択されているJPAベースのデータ・コントロールでのみ使用できます。
「名前付き基準のサポート」オプションは、queryByRange()メソッドも含むJPAベースのBeanに対してのみ使用できます。データ・コントロールは、BeanのqueryByRange()メソッドを使用してすべての問合せを処理します。このメソッドを使用しない場合、問合せはBeanの個々のgetterメソッドによって実行されます。詳細は、「EJBおよびBeanデータ・コントロールがgetterメソッドを使用する方法に関する必知事項」を参照してください。

- メタデータの生成。このオプションを選択すると、現行プロジェクト内にあるデータ・コントロールによって表現されるすべてのBeanに対して、メタデータ・ファイルを即時に生成できます。このようなメタデータ・ファイルは、データ・コントロールを編集する際にオンデマンドで作成されるので、このオプションは通常は不要です。ただし、アプリケーションのMDSカスタマイズを可能にする場合は、このオプションが役に立つことがあります。詳細は、「データ・コントロールのMDSカスタマイズに関する必知事項」を参照してください。

4.3.2 非JPAベースのBeanデータ・コントロールを作成する方法

Beanデータ・コントロールは、「新規ギャラリ」ウィンドウまたは「アプリケーション」ウィンドウから作成します。

始める前に:

Beanデータ・コントロールの一般的な知識があると役立ちます。詳細は、「Beanデータ・コントロールによるJavaコレクションとメソッドの公開」を参照してください。

アプリケーションでデータ・コントロールに対して使用することが必要になる可能性がある一般的なデータ・コントロール機能を理解しておくと役に立つこともあります。詳細は、「Beanデータ・コントロールの追加機能」を参照してください。

データ・コントロールが使用する、Bean内のコード・パターンとコンストラクトについて理解しておくと役に立つこともあります。詳細は、「データ・コントロールによって公開するBeanの準備」を参照してください。

次のタスクを完了する必要があります。

1. アプリケーション・ワークスペースとプロジェクトを作成します。詳細は、『Oracle JDeveloperによるアプリケーションの開発』のアプリケーションとプロジェクトの作成に関する項を参照してください。

2. プロジェクトにBeanクラスを作成します。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の新規Javaクラスまたはインタフェースを作成する方法に関する項を参照してください。

非JPA Beanデータ・コントロールを作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、データ・コントロールの作成対象のBeanを右クリックし、「データ・コントロールの作成」を選択します。

2. 「Beanデータ・コントロールの作成」ウィザードの「Beanクラスの選択」ページで、データ・コントロール・インスタンスの名前を指定します。

注意:

同じBeanの異なる動作を使用して、複数のデータ・コントロール・インスタンスを作成できます。詳細は、「単一のBeanに対して異なるデータ・コントロールを作成する方法」を参照してください。

3. ADFデータ・コントロール機能の選択ページで、アプリケーションに使用する追加のデータ・コントロール機能に応じて、次のいずれかのチェック・ボックスを選択します。選択する機能ごとに、データ・コントロールによって認識されるシグネチャを持つメソッドがBeanに追加されます。これらのメソッド内では、それぞれのデータ・コントロール機能の実装をユーザーが作成できます。

- トランザクションこの機能を選択すると、commitTransaction()、rollbackTransaction()、およびisTransactionDirty()の各メソッドがBeanに生成されます。詳細は、「非JPA Beanデータ・コントロールへのトランザクション動作の追加」を参照してください。

- カスタムCRUD。この機能により、永続データの操作をユーザーが独自に実装できます。詳細は、「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください。

- フェイルオーバー。詳細は、「Beanデータ・コントロールでのフェイルオーバーの有効化」を参照してください。

4. オプションで、「新規ラッパー・クラス」アイコン(「実装クラス」フィールドの右側)をクリックして、ウィザードのこのページで作成されたメソッドを保持する、Beanクラスを拡張した別個のクラスを生成します。

5. 「Beanデータ・コントロールのオプション」ページで、追加オプションのいずれかを選択します。

- アクセス・モード。データ・コントロールがデータをフェッチしてメモリーに格納する方法を設定できます。詳細は、「Beanデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。アクセス・モードを選択するには、「名前付き基準のサポート」オプションを選択する必要があります。

- メタデータの生成。このオプションを選択すると、データ・コントロールの作成時に、そのデータ・コントロールによって表現されるすべてのBeanのメタデータ・ファイルを自動的に生成できます。メタデータ・ファイルは、データ・コントロールを編集する際にオンデマンドで作成されるので、このオプションは不要です。ただし、アプリケーションのMDSカスタマイズを可能にする場合は、このオプションが役に立つことがあります。詳細は、「データ・コントロールのMDSカスタマイズに関する必知事項」を参照してください。

4.3.3 Beanデータ・コントロール作成時のプロジェクト内の処理

JavaBeansコンポーネントに基づくデータ・コントロールを作成する際に、JDeveloperは次の処理を行います。

- データ・コントロール定義ファイル(DataControls.dcx)を作成し、概要エディタでファイルを開きます。

- 「データ・コントロール」パネルに、作成されたデータ・コントロール・オブジェクトの階層を表示します。

- ADFデータ・コントロール機能ページでいずれかの機能を選択した場合は、これらの機能を実装するメソッドをセッションBeanに追加します。

概要エディタおよび「データ・コントロール」パネルの一般的な情報は、「データ・コントロール作成時のプロジェクト内の処理」を参照してください。JPAベースのデータ・コントロールに固有の情報は、「EJBおよびBeanデータ・コントロールのIDEでの表示」を参照してください。

ADFデータ・コントロール機能ページでいずれかの機能を選択した場合は、これらの機能を実装するメソッドがBeanに(ラッパー・クラスの生成を選択した場合は、ラッパー・クラスに)追加されます。

コレクションの問合せを行うアクセッサ・メソッドがBeanに存在し、ウィザードで「名前付き基準のサポート」を選択した場合は、oracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerを使用するデータ・コントロールが生成されます。これは、宣言的名前付き基準とページ分割された問合せのサポートをデータ・コントロールに提供します。

コレクションの問合せを行うアクセッサ・メソッドがBeanに存在しない場合は、oracle.adf.model.adapter.bean.DataFilterHandlerを使用するデータ・コントロールが生成されます。名前付き基準をサポートしないほか、oracle.adf.model.adapter.bean.DataFilterHandlerにはページ分割機能が完全には実装されていません。ただし、ページ分割を実装するメソッドをBeanに追加できます。詳細は、「データ・コントロールでページ分割サポートを手動で実装する方法」を参照してください。

4.3.4 非JPA Beanデータ・コントロールの主キーに関する必知事項

非JPA Beanを作成する場合であっても、@Idアノテーションを使用してフィールドに主キー列のマークを付けることができます。

ただし、パフォーマンス上の理由から、JPAランタイム・ライブラリへの依存性が生じないように、データ・コントロール・レベルで主キーを指定したほうが望ましい場合があります。詳細は、「主キーとして属性を指定する方法」を参照してください。

4.4 Beanデータ・コントロールでのデータのページ分割されたフェッチ

Beanデータ・コントロールを作成するときには、ウィザードの「アクセス・モード」ドロップダウン・リストを使用して、データベースからレコードにどのようにアクセスするか、また同時にメモリーに保持されるレコードの数を制限するかどうかを決定できます。

Beanデータ・コントロールのページ分割サポートは、一般にEJBデータ・コントロールのページ分割と同じプリンシパルに従います。詳細は、「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。ただし、特に非JPAベースのデータ・コントロール場合、実装の一部を自分で提供しようと思う、または提供する必要がある場合があります。

4.4.1 データ・コントロールでページ分割サポートを手動で実装する方法

非JPAデータ・コントロール(または、oracle.adf.model.adapter.bean.jpa.DataFilterHandlerハンドラを使用する任意のEJBまたはBeanデータ・コントロール)では、ADFモデル・ランタイムによってスクロール可能ページングおよび範囲ページングを実装するには、セッション・ファサードまたはサービス・ファサードで、各コレクションにメソッドを3つずつ追加する必要があります。メソッド・シグネチャは、次のような形式となります。

List<EntityBeanName> getEntityBeanNameList()
List<EntityBeanName> getEntityBeanNameList(int firstResult, int maxResults)
long getEntityBeanNameListSize()

注意:

JPAベースのデータ・コントロールは、一般にoracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerハンドラを使用するので、これらのメソッドを手動で実装する必要はありません。ただし、ベースとなるBeanがqueryByRange(String jpqlStmt, int firstResult, int maxResults)メソッドを含んでいない場合は、oracle.adf.model.adapter.bean.jpa.DataFilterHandlerハンドラがデータ・コントロールに割り当てられる可能性があります。詳細は、「推奨されるセッション・ファサードの要素」を参照してください。

4.4.2 問合せおよびページ分割にカスタム・ハンドラを実装する方法

問合せとページングの組込みオプションがアプリケーションに不十分な場合は、データ・コントロールに独自のデータ・ハンドラ・クラスを指定することによって、問合せとページングのカスタム動作を実装できます。

始める前に:

Beanデータ・コントロールの一般的な知識があると役立ちます。詳細は、「Beanデータ・コントロールによるJavaコレクションとメソッドの公開」を参照してください。

アプリケーションでデータ・コントロールに対して使用することが必要になる可能性がある一般的なデータ・コントロール機能を理解しておくと役に立つこともあります。詳細は、「Beanデータ・コントロールの追加機能」を参照してください。

データ・コントロールが使用する、Bean内のコード・パターンとコンストラクトについて理解しておくと役に立つこともあります。詳細は、「データ・コントロールによって公開するBeanの準備」を参照してください。

Beanデータ・コントロールまたはEJBデータ・コントロールを作成する必要があります。詳細は、「JPAベースのBeanデータ・コントロールを作成する方法」、「非JPAベースのBeanデータ・コントロールを作成する方法」および「EJBデータ・コントロールを作成する方法」を参照してください。

注意:

データ・コントロールを作成する際、どのアクセス・モードを選択するかは重要ではありません。次の手順で、そのアクセス・モードを手動でオーバーロードします。

問合せおよびページ分割にカスタム・ハンドラを実装する手順は次のとおりです。

1. データ・コントロールのカスタム・ハンドラ・クラスを記述して、データ・コントロールのプロジェクトに追加します。

oracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerやoracle.adf.model.adapter.bean.DataFilterHandlerなど、既存のハンドラをサブクラス化できます。次の例は、カスタム・ハンドラ・クラスの概略を示します。

public class MyJPQLDataFilterHandler  extends JPQLDataFilterHandler
{
public boolean invoke(Map bindingContext,
OperationBinding action,
DataFilter filter)
{
/** TODO: Users provide custom criteria. */
}

public Object invoke(RowContext rowCtx, String name,
DataFilter filter)
{
/** TODO: Users provide custom criteria. */
}

}

2. DataControls.dcxファイルの「ソース」ビューで、ハンドラの完全修飾クラス名を、各データ・コントロールのDataControlHandler属性の値として入力します。

DataControlHandlerは、EJBデータ・コントロールのejb-definition要素の属性であり、Beanデータ・コントロールのbean-definition要素の属性です。

4.5 Beanデータ・コントロールでのフェイルオーバーの有効化

Beanデータ・コントロールの状態をADFランタイムによって管理するように構成できます。この構成は、高可用性環境やクラスタ環境でアプリケーションを実行する場合に特に役立ちます。障害が発生したサーバー・ノード上でアプリケーションを実行している場合は、データ・コントロールのセッション状態の最新スナップショットをクラスタ内の別のノードにリストアできます。同様に、ユーザーのセッションが中断された場合は、フェイルオーバー・サポートを使用して、セッションが再開されたときにデータ・コントロールの状態をリストアできます。

フェイルオーバーを有効にするには、データ・コントロールの状態を保存およびリストアするためのメソッドを実装します。ADFモデル・ランタイムは、これらのメソッドの呼出しを管理し、データ・コントロールの状態の配布に関する詳細を処理します。EJBおよびBeanデータ・コントロールのフェイルオーバーのサポートには、次の3つのメソッドが必要です。これらのメソッドは、データ・コントロール・ウィザードを使用して、または手動でBeanクラスに追加できます。

- public Serializable createSnapshot()。データ・コントロール、および基礎となるBeanの状態をシリアライズ・オブジェクトとして保存し、そのオブジェクトのハンドルを返します。ADFランタイムは、データ・コントロールによってバインドされたコンポーネントに対してユーザーが変更を実行するたびに(または、ユーザーが単にページをリフレッシュしたときに)、このメソッドを呼び出します。
このメソッドには、保存される対象を決定し、対応するSerializableハンドルを返すロジックを追加する必要があります。

- public void restoreSnapshot(Serializable handle)。最も新しく作成されたスナップショットに基づいて、セッション状態をリストアします。このメソッドは、接続の切断、サーバー障害など、なんらかの理由によって中断されたセッションをADFモデル・ランタイムがリストアする必要があるときに呼び出されます。
このメソッドでは、createSnapshot()によって返されるハンドルからデータ・コントロールをリストアするための実装をユーザーが提供する必要があります。

- public void removeSnapshot(Serializable handle)。createSnapshot()メソッドによって返されるハンドルに関連したスナップショットを削除します。

4.5.1 コンストラクタからのPageFlowScopeのコールに関する必知事項

フェイルオーバーを実装するBeanデータ・コントロールでは、BeanのコンストラクタからPageFlowScopeをコールしないでください。アプリケーションのフェイルオーバー時に、データ・コントロール・オブジェクトはコンストラクタのコールによって再インスタンス化されます。そのコールはADFライフサイクルの外部で行われるので、FacesContextは使用できず、これを実装の基礎としているものもすべて使用できません。

4.6 Beanデータ・コントロールのカスタムCRUD操作の有効化

JPAベースのデータ・コントロールは、JPAのCRUD (作成/読取り/更新/削除)サポートと緊密に統合されています。たとえば、CreateやDeleteなどの組込みデータ・コントロール操作は、実行時に呼び出されると、対応するJPA永続化メソッドを使用してこれらの操作を実行します。

ただし、データ・コントロールがJPAベースでない場合は、ユーザー独自の実装を提供してBeanのCRUDモデルをデータ・コントロールと統合できます。

「Beanデータ・コントロールの作成」ウィザードを使用してBeanデータ・コントロールを作成し、カスタムCRUDサポートを有効にするときに、Beanデータ・コントロール・クラスに追加されるメソッド・スタブを次に示します。

- public Object createRowData(RowContext p0)。新しいデータの行を作成するために使用されます。実行時に、Create操作が呼び出されるとこのメソッドが呼び出されます。このメソッドのユーザー独自の実装を提供することにより、新規行をどのように永続化するかカスタマイズできます。

- public boolean removeRowData(RowContext p0)。データの行を削除するために使用されます。実行時に、Delete操作が呼び出されるとこのメソッドがコールされます。

- public boolean setAttributeValue(oracle.binding.AttributeContext p0, Object p1)。このメソッドは、Bean内の属性に新しい値が設定されるときに、ADFモデル・ランタイムによってコールされます。

- public Object registerDataProvider(oracle.binding.RowContext p0)。このメソッドは、オブジェクトが変更されるか削除のマークが付けられる前にデータ・バインディング機能によってコールされるため、データ・コントロールによって行に未検証のマークが付けられる可能性があります。
カスタムCRUD機能を実装する場合にはこのメソッドが存在している必要がありますが、通常はユーザー独自の実装を提供する必要はありません。

- public void validate()。未検証の場合にトランザクションを検証します。
カスタムCRUD機能を実装する場合にはこのメソッドが存在している必要がありますが、通常はこのメソッドのユーザー独自の実装を提供する必要はありません。

非JPAデータ・コントロールの作成については、「非JPAベースのBeanデータ・コントロールを作成する方法」を参照してください。

4.7 非JPA Beanデータ・コントロールへのトランザクション動作の追加

「Javaサービス・ファサードの作成」ウィザードを使用してJPAベースのBeanを作成する際に、明示的なコミット・モデルをサポートするコードを生成できます。データ・コントロールがこのようなクラスに基づいている場合、Beanのトランザクション・メソッドはデータ・コントロール内でCommit操作およびRollback操作として公開されます。

非JPA Beanデータ・コントロールの場合は、Commit操作とRollback操作をサポートするデータ・コントロールを作成する際に、スタブ・メソッドを生成できます。これらのスタブ・メソッド内で、トランザクション動作のユーザー独自の実装を作成できます。実行時に、Commit操作とRollback操作が呼び出されると、これらのメソッドが呼び出されます。

「Beanデータ・コントロールの作成」ウィザードを使用してBeanデータ・コントロールを作成し、トランザクション・サポートを有効にするときに、Beanデータ・コントロール・クラスに追加されるメソッド・スタブを次に示します。

- public boolean isTransactionDirty()。コミット(またはロールバック)される保留中の変更があるかどうかのマーク付けに使用されます。

- public void commitTransaction()。保留中の変更をすべてデータソースにコミットします。

- public void rollbackTransaction()。保留中の変更をロールバックします。

注意:

非JPAデータ・コントロールにトランザクション・サポートを実装するためには、カスタムCRUDメソッドも実装する必要があります。詳細は、「Beanデータ・コントロールのカスタムCRUD操作の有効化」を参照してください

非JPAデータ・コントロールの作成については、「非JPAベースのBeanデータ・コントロールを作成する方法」を参照してください。

4.8 アノテーションを使用したBeanデータ・コントロールのメタデータの宣言

Adapter Data Control Frameworkは、BeanおよびEJBデータ・コントロールのメタデータを指定するために使用できるJavaアノテーションをいくつか提供しています。

- oracle.adf.model.adapter.bean.annotation.AttributeHint、oracle.adf.model.adapter.bean.annotation.DateFormatterおよびoracle.adf.model.adapter.bean.annotation.Formatter。データ・コントロールのUIヒントを提供するために使用します。XMLデータ・コントロール構造ファイルを作成する必要はありません。詳細は、「アノテーションを使用した属性のUIヒントの提供」を参照してください。

- oracle.adf.model.adapter.bean.annotation.AccessMode。DataControls.dcxファイルのAccessModeフラグをオーバーライドするために使用します。このアノテーションを使用して、アクセッサ・メソッドのレベルでJPAベースのデータ・コントロールのページング機能を制御できます。これにより、単一のデータ・コントロール内で異なるアクセス・モードを使用することが可能になります。

// AccessModeType can be either NO_PAGING, RANGE_PAGING or SCROLLABLE)@AccessMode(type = AcessModeType.RANGE_PAGING)
public Collection<EmpBean> getListEmpBean() {}
public Collection<EmpBean> getListEmpBean(int firstResult, int maxResults) {}
public int getListEmpBeanSize() {}
}

詳細は、「データ・コントロールで個別オブジェクトにアクセス・モードを指定する方法」を参照してください。

- oracle.adf.model.adapter.bean.annotation.AccessModeType。クラス内でoracle.adf.model.adapter.bean.annotation.AccessModeアノテーションを使用する場合に、これもインポートする必要があります。

- oracle.adf.model.adapter.bean.annotation.Property。属性のカスタム・プロパティを定義するために使用します。次に例を示します。

@Property(name = "myProp1", value = "myProp1Value")
public Long getEmpno() {}

- oracle.adf.model.adapter.bean.annotation.Properties。属性の複数のプロパティを指定するために使用します。次に例を示します。

@Properties( {
@Property(name = "myProp1", value = "myProp1Value"),
@Property(name = "myProp2", value = "myProp2Value"),
})
public Long getEmpno() {}

- oracle.adf.model.adapter.bean.annotation.ElementType。コレクションのタイプを定義するために使用します。たとえば、要素タイプEmpBeanは、@ElementType(name = "model.EmpBean"によって定義できます。これは、汎用コレクション(たとえば、Collection<EmpBean>)を使用するかわりとなり、JDK 1.4以前を使用する場合、またはコレクションの要素タイプをオーバーライドする必要がある場合にのみお薦めします。

@ElementType(name = "model.EmpBean")
public Collection getListEmpBean() {}

- oracle.adf.model.adapter.bean.annotation.Id。属性の主キーを定義するために使用します。次に例を示します。

@Id
public int getPrimaryKey() {}

このアノテーションは、javax.persistence.Idアノテーションを使用するエンティティ・クラスを含むJPAベースのデータ・コントロールには使用しないでください。

4.9 カスタムBeanデータ・コントロールの作成

Beanデータ・コントロール・タイプの定義と実装クラスを拡張して、カスタム・データ・コントロールを作成することによって、Beanデータ・コントロール・タイプの機能を変更または拡張できます。

カスタムBeanベースのデータ・コントロールの作成は、次の主なステップを組み合せて行います。

- (オプション)データ・コントロールがフィルタリング、フェイルオーバー、データソースの更新などのデータ・コントロール機能を処理する方法をカスタマイズするために、oracle.adf.model.adapter.bean.BeanDataControlを拡張します。

- (オプション)新規の実装クラスを作成するために、oracle.adf.model.adapter.bean.BeanDCDefinitionを拡張します。
新規の実装クラスを作成する場合は、その実装クラスをDataControls.dcxファイル内で登録する必要があります。ファイルのソース・ビュー内で、データ・コントロールのImplDefプロパティ(oracle.adf.model.adapter.bean.BeanDataControl)の値を、新しい実装クラスの完全修飾名に置き換えます。

- (オプション)データ・コントロールによって表現されるデータ構造のタイプに対して、新しい構造定義タイプを作成します。

- (オプション)データ・コントロールのDataControls.dcxファイルで提供されるメタデータを保持する構成クラスを定義します。たとえば、oracle.adf.model.adapter.bean.BeanDCConfigurationを拡張できます。これは、標準のBeanデータ・コントロールに対する構成クラスです。
この場合、データ・コントロール実装クラスで、oracle.adf.model.adapter.AbstractDefinitionから継承されたgetConfiguration()メソッドをオーバーライドし、その戻り値を新しい構成クラスにキャストする必要があります。

- (オプション)データ・コントロール・クラス内で、サポートされる既存の機能(フェイルオーバーやカスタムCRUDサポートなど)のいくつかを実装します。

Beanデータ・コントロールとその他のデータ・コントロール・タイプによって使用されるクラスのAPIドキュメントについては、 Oracle ADFモデルJava APIリファレンスを参照してください。

5 ADF モデル・レイヤーを使用したコンシューミングWebサービス

この章では、SOAPおよびREST Webサービス用のADFデータ・コントロールを作成して、ユーザー・インタフェース内でこれらのサービスをより高度に活用できるようにする方法を説明します。

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

- ADFアプリケーションのWebサービス・データ・コントロールについて

- Webサービス・データ・コントロールの作成

- Webサービス・データ・コントロールのセキュリティ保護

5.1 ADFアプリケーションのWebサービス・データ・コントロールについて

企業はWebサービスを使用して、元のアプリケーションのプラットフォームや言語に関係なくビジネス機能を公開できます。これは、ビジネス機能を、他のアプリケーションでも認識され、使用可能な標準XMLまたはJSONコンストラクトで構成されるメッセージに抽象化して公開するからです。

Webサービスは統合と再利用が簡単なモジュール化ビジネス・サービスで、SOA内のコンポーネントとして理想的です。JDeveloperでは、トップダウンWebサービス(WSDLから作成されるサービス)、ボトムアップWebサービス(JavaクラスやデータベースのPL/SQLストアド・プロシージャなどの基礎となる実装から作成されるサービス)、および既存の機能から作成されるサービス(アプリケーション・モジュールをサービスとして公開したものなど)を作成できます。

注意:

ADFビジネス・コンポーネント・アプリケーション・モジュールから作成されたREST Webサービス・リソースへの接続に基づいて、データ・コントロールを作成することもできます。そのようなデータ・コントロールは手動構成を必要としません。必要なメタデータはRESTサービスのdescribeエンドポイントで提供されるからです。そのようなデータ・コントロールの作成の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のADFビジネス・コンポーネントをベースとするコンシューミングREST Webサービスに関する項を参照してください。

また、RESTデータ・コントロールをJDeveloperで編集するには、REST接続に基づいている必要があることに注意してください。JDeveloperの以前のリリースでURL接続からRESTデータ・コントロールを作成している場合には、アプリケーションを現在のリリースに移行する際に接続はREST接続に変換されます。

5.1.1 Webサービス・データ・コントロールのユースケースと例

WebサービスはWebアプリケーションで使用できますが、その一般的な理由は次のとおりです。

- アプリケーションとともに開発するには時間がかかる機能を、Webサービスとして即座に提供できます。

- 異なるアーキテクチャで動作するアプリケーションにアクセスできます。

- 別チームのアプリケーションを個別にインストール、アップグレード、および管理する必要がある場合、特にデータがローカルでレプリケートされていない場合(つまり他の方法を使用してアプリケーションにアクセスできない場合)に、そのチームが所有しているアプリケーションにアクセスできます。

5.1.2 ADFアプリケーションのWebサービス・データ・コントロールの追加機能

Webサービス・データ・コントロールを使用する前に、他のOracle ADF機能を理解しておくと役立つ場合があります。また、JDeveloperにおけるWebサービス開発のサポートを理解しておくと役立つことがあります。次に、関連する他の機能へのリンクを示します。

- 「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。データ・コントロールの使用の一般情報については、「ADFデータ・コントロールの使用」を参照してください。

- ファイアウォールで保護されている環境で、ファイアウォール外にあるWebサービスを使用する場合は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のブラウザ・プロキシ情報の設定に関する項の説明に従って、JDeveloperでWebブラウザとプロキシ設定を構成する必要があります。

- データ・コントロールを通して後で公開するWebサービスを開発している場合、JDeveloperの機能を使用してプロセスを簡素化できます。詳細は、『Oracle JDeveloperによるアプリケーションの開発』のWebサービスの開発と保護に関する項を参照してください。

次の各章では、データ・コントロールで使用できる特定のオブジェクトに関する情報を提供しています。

- データ・コントロール上のコレクションを使用してフォームを作成する方法については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされた基本的なページの作成」を参照してください。

- コレクションを使用して表を作成する方法については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFによるデータバインドされた表の作成」を参照してください。

- マスター/ディテール関係を使用してUIコンポーネントを作成する方法については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「マスター/ディテール・データの表示」を参照してください。

- リストの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされた選択リストおよびシャトルの作成」を参照してください。

- グラフ、チャート、およびその他の視覚化UIコンポーネントの作成については、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされたチャート・コンポーネントおよびゲージ・コンポーネントの作成」を参照してください。

5.2 Webサービス・データ・コントロールの作成

Oracle ADFを使用して開発されたアプリケーションでWebサービスを使用する場合、外部Webサービスのデータ・コントロールを作成するのが最も一般的な方法です。これは、アプリケーションとともに開発するには時間がかかる機能を、Webサービスとして即座に提供でき、異なるアーキテクチャで動作するアプリケーションにアクセスできるからです。

また、Oracle ADFで作成されたコンポーネントを再利用して、他のアプリケーションからアクセス可能なWebサービスとして提供することもできます。

5.2.1 SOAPベースのWebサービス用のデータ・コントロールを作成する方法

JDeveloperでは、サービスにWSDLのみを使用して既存のWebサービスのデータ・コントロールを作成できます。ローカル・ファイル・システムまたはUDDIレジストリでWSDLを検索するか、WSDL URLを直接入力します。

注意:

ファイアウォールで保護されている環境で、ファイアウォール外にあるWebサービスを使用する場合は、JDeveloperでWebブラウザとプロキシの設定を構成する必要があります。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のブラウザ・プロキシ情報の設定に関する項を参照してください。

始める前に:

ADFアプリケーションでのWebサービス・データ・コントロールの使用方法に関する知識があると、役立つ場合があります。詳細は、「Webサービス・データ・コントロールの作成」を参照してください。

また、他のWebサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「ADFアプリケーションのWebサービス・データ・コントロールの追加機能」を参照してください。

アプリケーション・ワークスペースを作成し、プロジェクトをそのワークスペース内で作成する必要があります。プロジェクトの編成方法に応じて、既存のアプリケーション・ワークスペースとプロジェクトを使用することも、新規に作成することもできます。アプリケーション・ワークスペースの作成については、『Oracle JDeveloperによるアプリケーションの開発』のアプリケーションとプロジェクトの作成に関する項を参照してください。

SOAPベースのWebサービス用のデータ・コントロールを作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、Webサービス・データ・コントロールを作成する先のプロジェクトを右クリックして、「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「ビジネス層」を展開して「Webサービス」を選択し、「Webサービス・データ・コントロール(SOAP/REST)」を選択して「OK」をクリックします。

3. 「Webサービス・データ・コントロールの作成」ウィザードの「データ・ソース」ページで、データ・コントロールの名前を入力し、「SOAP」ラジオ・ボタンを選択して、WSDL URLを入力し、データ・コントロールによってアクセスする特定のWebサービスを指定します。

4. 「データ・コントロール操作」ページで、データ・コントロールによってサポートする操作を「選択済」に移動します。

オプションで、「HTTPヘッダー・パラメータを含める」チェック・ボックスを選択します。詳細は、「Webサービス・データ・コントロール用のヘッダー・パラメータの含み方」を参照してください。

5. 「レスポンス・フォーマット」ページで、SOAPレスポンスのフォーマットを指定します。

6. 「エンドポイント認証」ページで、エンドポイントURLの認証詳細を指定し、「終了」をクリックします。

5.2.2 RESTful Webサービス用のデータ・コントロールを作成する方法

JDeveloperにより、Webサービスへの接続と、呼び出すメソッドのスキーマを使用して、RESTful Webサービス用のデータ・コントロールを作成できます。

始める前に:

ADFアプリケーションでのWebサービス・データ・コントロールの使用方法に関する知識があると、役立つ場合があります。詳細は、「ADFアプリケーションのWebサービス・データ・コントロールについて」を参照してください。

また、他のWebサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「ADFアプリケーションのWebサービス・データ・コントロールの追加機能」を参照してください。

次のタスクを完了する必要があります。

- アプリケーション・ワークスペースを作成し、プロジェクトをそのワークスペース内で作成します。プロジェクトの編成方法に応じて、既存のアプリケーション・ワークスペースとプロジェクトを使用することも、新規に作成することもできます。アプリケーション・ワークスペースの作成については、『Oracle JDeveloperによるアプリケーションの開発』のアプリケーションとプロジェクトの作成に関する項を参照してください。

- レスポンス・フォーマットまたはペイロード・フォーマットを記述する際に含める必要があるローカル・スキーマ・ファイル(XSDまたはJSON)がある場合、「XMLスキーマをRESTデータ・コントロールで利用できるようにする方法に関する必知事項」の説明に従って、これらをプロジェクトのリソース・パスにコピーします。

RESTful Webサービス用のデータ・コントロールを作成する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、Webサービス・データ・コントロールを作成する先のプロジェクトを右クリックして、「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で、「ビジネス層」を展開して「Webサービス」を選択し、「Webサービス・データ・コントロール(SOAP/REST)」を選択して「OK」をクリックします。

3. 「Webサービス・データ・コントロールの作成」ウィザードの「データソース」ページで、データ・コントロールの名前を指定して「REST」ラジオ・ボタンを選択します。

4. 手動で記述された機能を持つ汎用データ・コントロールを選択します。

5. 「接続」フィールドで、使用するREST接続を選択します。
REST接続を確立していない場合は、「新規REST接続の作成」アイコンをクリックして、「REST接続の作成」ダイアログを開きます。そのダイアログで、接続の名前とベースURIを入力します。URLにはリソースまたはパラメータを含めないでください。

注意:

「REST接続の作成」ダイアログで、「接続のテスト」をクリックして、URIに接続できることを確認できます。ただし、URIのサーバーがベースURIに対するリクエストを受け入れないように構成されている場合、テストは失敗します。失敗しても関係なく、「OK」をクリックして接続を作成できます。

このようなベースURIを使用していて、サービスに接続できることを確認する必要がある場合は、URLに一時的にリソースを追加して、接続をテストしてから、「OK」をクリックする前にリソースを削除できます。

6. 「OWSMポリシー」ページで、必要に応じてWebサービス・クライアントのポリシーをオプションで設定できます。

7. 「リソース」ページで、リソースごとに次のサブステップを実行して、接続のリソースを指定します。

a. 「追加」アイコンをクリックしてリソース・パスを追加します。

b. リソース・パスの名前をインラインで入力します。
リソース・パスの一部として、パス・パラメータを入力することもできます。

パス・パラメータは、##paramName##の形式で入力します。たとえば、アクセス対象のWebサービスが株式相場を提供している場合に、株の1つを表すリソースの完全なURLがhttp://www.example.com/quotes/ACOMPANYで、パス・パラメータ名がtickerの場合は、リソース・パスとして/quotes/##ticker##のように入力します。

注意:

パラメータを使用して、ソース・パスに動的入力を提供することもできます(たとえば、/##servicename##/##ticker##)。この場合、ユーザーはサービス名も入力する必要があります(たとえば、quote)。

問合せパラメータを指定してリソースを作成する場合は(つまり、?ParamName=ParamValueの形式をとるパラメータ)、ウィザードの次のページでこれらのパラメータを指定できます。

c. 「データ・フォーマット」ドロップダウン・リストから該当するデータ・フォーマット(XMLまたはJSON)を選択します。

d. ダイアログの右側で、リソース・パスを選択した状態で、チェック・ボックスの1つを選択してリソース・パスのRESTメソッドを指定し、そのメソッドを「データ・コントロール」パネルで識別するために使用できる名前を入力します。

8. データ・コントロールに組み込むリソースごとに、ステップ7を繰り返します。
図5-1は、2つのリソースが入力されたウィザードの「リソース」ページを示しており、2つ目のリソースにパス・パラメータが含まれています。図に示したように、2つ目のリソースが選択され、そのリソースに対してGETメソッドが指定されています。

図5-1 「Webサービス・データ・コントロールの作成」ウィザードの「リソース」ページ

9. 「メソッドの詳細」ページで、メソッドを選択して、そのメソッドのデータ・フォーマットを提供するスキーマ・ファイル(XSDまたはJSON)を指定します。

提供するスキーマファイルがローカルである場合、「XMLスキーマをRESTデータ・コントロールで利用できるようにする方法に関する必知事項」の説明に従って、最初にこれらをプロジェクトのリソース・パスに配置する必要があります。

データ・フォーマットのスキーマ・ファイルがない場合には、サンプル・コードのスニペットから1つ生成することができます。サンプル・コードからデータ・フォーマットを生成するには、「リソース・メソッド」リストで該当するメソッドを選択し、「サンプル・コードからの解析」ラジオ・ボタンをクリックして、「レスポンス・サンプル」テキスト・ボックスにサンプル・コードのスニペットを貼り付けます。

GETメソッドの場合、指定されたリソースへのGET呼出しを行うと、スキーマが自動的に作成されます。そのため、GETメソッドを指定したリソースのスキーマが存在しない場合、「メソッドの詳細」ページでスキーマ・ファイルを指定しなくても構いません。「次へ」ボタンをクリックしたときに、リソースに対するGET呼出しが実行され、GETメソッドのスキーマが作成されます。

ヒント:

XSLスタイル・シートを使用して、レスポンスXMLに基づいてデータ・コントロールに含めるカスタム要素を定義することもできます。このアプローチを使用する場合、「レスポンスXSD」フィールドで指定するスキーマは、「レスポンスXSL」フィールドで指定するスタイル・シートに基づいている必要があります。詳細は、「RESTful Webサービス・データ・コントロールへのカスタム属性の追加方法」を参照してください。

10. メソッドが、PUT、PATCHまたはPOSTメソッドの場合、「ペイロードXSD」/「ペイロードJSON」フィールドのリクエスト・ペイロードにスキーマを指定するか、「サンプル・コードからの解析」ラジオ・ボタンをクリックして、「ペイロード・サンプル」テキスト・ボックスにサンプル・コードのスニペットを貼り付けます。

11. 選択したメソッドに対して、URLパラメータとデフォルト値を指定します。
リソース・パスに含まれていたパラメータの場合は、パラメータ名が「URLパラメータ」リストに含まれています。これらのパラメータに対しては、デフォルト値を入力する必要があります。

たとえば、ステップ7に示したサンプル・パラメータでは、tickerがパラメータ名、ACOMPANYがデフォルト値です。

GETメソッドのパス・パラメータについては、ステップ9でメソッドのレスポンス・ファイルを指定してある場合、デフォルト値を指定する必要はありません。

12. オプションで、「HTTPヘッダー・パラメータを含める」チェック・ボックスを選択します。詳細は、「Webサービス・データ・コントロール用のヘッダー・パラメータの含み方」を参照してください。

13. メソッドごとにステップ9から12を繰り返します。
図5-2に示す「メソッドの詳細」ページでは、getDetailsメソッドが選択され、レスポンス・ファイルが指定され、そのdeptIdパラメータにデフォルト値が設定されています。

図5-2 「Webサービス・データ・コントロールの作成」ウィザードの「メソッドの詳細」ページ

14. 「終了」ページで、生成するデータ・コントロールの詳細を確認して、「終了」をクリックします。

5.2.3 RESTデータ・コントロールでのパス・パラメータの使用に関する必知事項

RESTデータ・コントロール・リソースにパス・パラメータを含めると、これらのパラメータは実行時にHTTPリクエストの一部として発行されます。パス・パラメータの値が指定されていない、または指定された値が見つからない場合、サービスは「404 見つかりません」の例外を戻します。

ページが実行時に初めてレンダリングされる場合はパラメータは空白の場合が多く、ユーザーが1つ以上のパラメータに値を入力する必要があります。そのため、最初のリクエスト(ページがレンダリングされる際に発行される)はパラメータ値なしで送信され、「404 見つかりません」の例外を起こします。

たとえば、指定したページが株式相場を提供しているWebサービスにアクセスするフォームを表示していて、リソースのURLがhttp://www.example.com/quotes/##ticker##であるとします(ここで、パス・パラメータの名前はtickerです)。ユーザーが最初にページを開くとき、銘柄記号の入力のためのフィールドは最初は空白です。そのため、暗黙の最初のリクエストは例外を戻します。

このシナリオを避けるために、入力値なしではリフレッシュしないように、アクセッサ・イテレータでリフレッシュ条件を設定できます。「アプリケーション」ウィンドウで、フォームを含むページのページ定義ファイルをダブルクリックします。ページ定義ファイルの概要エディタで、アクセッサ・イテレータを選択します。次に、「プロパティ」ウィンドウで、「詳細」セクションを展開し、次のような式を(param-nameをパス・パラメータの名前に置き換えて)RefreshConditionフィールドに追加します。

#{bindings.param-name.inputValue ne null}

「Webサービス・データ・コントロールの作成」ウィザードの「メソッドの詳細」ページで指定するデフォルト値は、設計時のテスト目的専用です。アプリケーションをデプロイして実行する際に、デフォルト値は含まれません。

注意:
RESTデータ・コントロールをパス・パラメータ付きで使用するときに404例外を防ぐには、RefreshConditionを使用します。

5.2.4 Webサービス・データ・コントロール用のヘッダー・パラメータの含み方

Webサービス・データ・コントロールを使用する場合、HTTPリクエストの起動時にHTTPヘッダーにカスタム・パラメータを追加する場合があります。このようなパラメータは、セキュリティや通知など、様々な目的で役立ちます。たとえば、リクエストを呼び出すときにエンタープライズIDをHTTPヘッダーに追加できます。リクエスト内のエンタープライズIDによって、Webサービス・データ・コントロールは、リクエストの転送先クラウド・サービスを指定できます。

ヘッダー・パラメータを使用するようにWebサービス・データ・コントロールを構成するには、「Webサービス・データ・コントロールの作成」ウィザードで、「HTTPヘッダー・パラメータを含める」を選択します。SOAPベースのWebサービス・データ・コントロールの場合、これは「データ・コントロール操作」ページにあります。RESTベースのWebサービス・データ・コントロールの場合は、「メソッドの詳細」ページにあります。

データ・コントロールの作成後、「データ・コントロール」パネル内のWebサービス・データ・コントロールのメソッドの「パラメータ」ノードの下に、HttpHeaderが表示されます。また、Webサービス・データ・コントロールのAdapterDataControl要素(.dcxファイル内)に、<httpHeaders paramName="HttpHeader"/>要素が含まれています。

HttpHeaderパラメータを使用するには、Webサービス・データ・コントロール用のユーザー・インタフェース・プロジェクトでバッキングBeanを作成する必要があります。HttpHeaderパラメータの値はバッキングBean経由で提供されます。バッキングBeanはMapの型のプロパティを持ち、HTTPヘッダーの名前/値のペアをそのプロパティに追加する必要があります。さらに、Mapの型は<String, List<String>>または<String,String>でなければならず、次の例で示すように、getterおよびsetterメソッドを使用してプロパティを公開する必要があります。

public class BackingBean {
private Map<String,Object> httpHeadersMap = new HashMap<String,Object>();
public BackingBean() {
List<String> headersList = new ArrayList<String>();
headersList.add("Oracle");
httpHeadersMap.put("enterpriseID",headersList);
}
public void setHttpHeadersMap(Map<String,Object> httpHeadersMap) {
this.httpHeadersMap = httpHeadersMap;
}
public Map<String,Object> getHttpHeadersMap() {
return httpHeadersMap;
}
}

「データ・コントロール」パネルからページに操作を「ADFパラメータ・フォーム」としてドラッグ・アンド・ドロップする際、フィールド・リストからHttpHeaderを削除します。次に、「アクション・バインディングの編集」ダイアログの「パラメータ」セクションで、バッキングBeanのMapプロパティを指す式を提供することで、HttpHeaderパラメータの値を指定します。図5-3に、「アクション・バインディングの編集」ダイアログを示します。

図5-3 「アクション・バインディングの編集」ダイアログ

5.2.5 RESTful WebサービスのレスポンスHTTPヘッダーへのアクセス方法

レスポンスHTTPヘッダー・パラメータにアクセスするには、Beanクラスのアクション・バインディングにアクセスし、そこから値を取得する必要があります。アクション・バインディングが実行されない場合、アクション・バインディングを実行してresponseHTTPHeaderパラメータを取得します。次に、responseHTTPHeaderパラメータを取得するアクション・バインディングのサンプル・コードを示します。

Map responseHeaders;
public Map getResponseHeaders() {
findResponseHeaders();
return responseHeaders;
}
private void findResponseHeaders()
{
BindingContainer bindings = BindingContext.getCurrent().getCurrentBindingsEntry();
JUCtrlActionBinding operationBinding = (JUCtrlActionBinding)bindings.getOperationBinding("testrest");
RestURLDataControl dc = (RestURLDataControl)operationBinding.getDataControl().getAdaptedDC();
responseHeaders = dc.getResponseHTTPHeaders();
}

RESTful Webサービスのデータ・コントロールの一般的な知識があると役立ちます。詳細は、「RESTful Webサービス用のデータ・コントロールを作成する方法」を参照してください。

ADFデータ・コントロールの使用方法を理解しておくと役に立つ場合があります。詳細は、「ADFデータ・コントロールの使用」を参照してください。

5.2.6 SOAP Webサービス・データ・コントロールのリフレッシュ方法

SOAPベースのWebサービス・データ・コントロールの更新後、Webサービス操作のメソッド・シグネチャ、戻り型、または構造が変更されています。この場合、作成しなおさなくても、データ・コントロールを更新できます。

始める前に:

ADFアプリケーションでのWebサービス・データ・コントロールの使用方法に関する知識があると、役立つ場合があります。詳細は、「Webサービス・データ・コントロールの作成」を参照してください。

また、他のWebサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「ADFアプリケーションのWebサービス・データ・コントロールの追加機能」を参照してください。

SOAPベースのWebサービス・データ・コントロールの操作をリフレッシュする手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、Webサービス・データ・コントロールのDataControls.dcxファイルを選択します。

2. 「構造」ウィンドウで、該当するWebサービス操作を右クリックし、「更新」を選択します。

JDeveloperはWebサービスを問い合せ、Webサービス・データ・コントロールを更新して、選択した操作の最新の状態を反映します。

5.2.7 SOAP Webサービス・データ・コントロールの主キーに関する必知事項

SOAPベースのWebサービスにデータ・コントロールを作成すると、そのデータ・コントロールは公開された任意のコレクションに対する主キー操作をサポートします。

Webサービス定義で参照されるスキーマで、要素または属性がxsd:ID型として定義されている場合、その属性はデータ・コントロールによってキー属性として公開され、コレクションでsetCurrentRowWithKeyおよびsetCurrentRowWithKeyValueデータ・コントロール操作の使用が可能になります。

たとえば、<xsd:attribute>要素を次のように使用することにより、スキーマでdeptno属性を主キーとして設定できます。

<xsd:attribute name="deptno" type="xsd:ID" use="required"/>

また、<xsd:element>要素を次のように使用しても、スキーマでdeptno属性を主キーとして設定できます。

xsd:element name="deptno" type="xsd:ID"/>

注意:

WebサービスをJavaクラスから作成し、キーを表すフィールドまたはgetterメソッドに、JAXB @XmlIDアノテーションおよび@XmlAttribute(required=true)と@XmlElement(required=true)のいずれかを追加している場合は、実行時に前述のXSDエントリが生成されます。

前述のいずれかの方法でコレクションにIDを定義していない場合は、データ・コントロールにより、索引に基づく主キーとなる非表示の属性がコレクションに作成されます。その後、setCurrentRowWithKeyまたはsetCurrentRowWithKeyValueデータ・コントロール操作を使用して、行の索引を渡すことができます。

注意:

コレクションのsetCurrentRowWithKeyまたはsetCurrentRowWithKeyValue操作が「データ・コントロール」パネルに表示されない場合は、DataControls.dcxファイルを手動で更新してこれらの操作を公開する必要がある場合があります。そのためには、DataControls.dcxのソース・ビューを開き、サービスのensureKeyAttributeプロパティの値をtrueに設定します。その後、「データ・コントロール」パネルの「リフレッシュ」アイコンをクリックして、操作のリストをリフレッシュします。

5.2.8 RESTful Webサービス・データ・コントロールへのカスタム属性の追加方法

RESTful Webサービスに基づいてデータ・コントロールを作成する前に、XSLスタイル・シートを作成して、データ・コントロールに組み込むRESTサービスのコンテンツをカスタムXMLフォーマットに変換することができます。たとえば、サービスによって返された他の要素から計算される要素を作成し、これらの要素を、UIコンポーネントを作成する際のベースにすることができる属性として、データ・コントロールで公開することが可能です。

次の例は、レスポンスXMLから直接導出されるNAMEおよびDEPTID要素を定義するスタイル・シートを示しています。また、このスタイル・シートはCUSTOMNAMEおよびUNIQUEID要素を定義し、この値はNAMEおよびDEPTID要素から計算されます。このスタイル・シートに基づいて作成されたデータ・コントロールは、これらの4つの要素すべてを属性として公開します。

<?xml version="1.0" encoding="windows-1252" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
<xsl:template match="DEPARTMENTS">
<DEPARTMENTS>
<xsl:for-each select="DEPT">
<DEPT>
<NAME><xsl:value-of select="NAME"/></NAME>
<DEPTID><xsl:value-of select="DEPTID"/></DEPTID>
<CUSTOMNAME><xsl:value-of select="concat('CUST_',NAME)"/></CUSTOMNAME>
<UNIQUEID><xsl:value-of select="DEPTID * 2"/></UNIQUEID>
</DEPT>
</xsl:for-each>
</DEPARTMENTS>
</xsl:template>
</xsl:stylesheet>

スタイル・シートを作成したら、カスタム要素を組み込むXMLスキーマを作成する必要があります。このプロセスを簡素化する方法の1つは、カスタム要素を含むXMLファイルをレスポンス・フォーマットに基づいて作成し、次にそのXMLファイルに基づいてJDeveloperのXMLツールを使用してスキーマを生成することです。

次の例は、前述の例に示すスタイル・シートで定義されているベース要素とカスタム要素の両方を含むXMLファイルを示しています。

<?xml version="1.0" encoding="UTF-8"?>
<DEPARTMENTS>
<DEPT>
<NAME>Marketing</NAME>
<DEPTID>20</DEPTID>
<CUSTOMNAME>CUST_Marketing</CUSTOMNAME>
<UNIQUEID>40</UNIQUEID>
</DEPT>
<DEPT>
<NAME>Marketing</NAME>
<DEPTID>20</DEPTID>
<CUSTOMNAME>CUST_Marketing</CUSTOMNAME>
<UNIQUEID>40</UNIQUEID>
</DEPT>
</DEPARTMENTS>

次の例は、変更済のXMLレスポンスに基づいたスキーマを示しています。

<?xml version="1.0" encoding="windows-1252" ?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://www.example.org"
targetNamespace="http://www.example.org" elementFormDefault="qualified">
<xsd:element name="DEPARTMENTS">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="DEPT" maxOccurs="unbounded">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="NAME" type="xsd:string"/>
<xsd:element name="DEPTID" type="xsd:integer"/>
<xsd:element name="CUSTOMNAME" type="xsd:string"/>
<xsd:element name="UNIQUEID" type="xsd:integer"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
</xsd:schema>

始める前に:

ADFアプリケーションでのWebサービス・データ・コントロールの使用方法に関する知識があると、役立つ場合があります。詳細は、「Webサービス・データ・コントロールの作成」を参照してください。

また、他のWebサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「ADFアプリケーションのWebサービス・データ・コントロールの追加機能」を参照してください。

RESTデータ・コントロールにカスタム属性を追加する手順は次のとおりです。

1. Webサービスから返されたデータの構造に基づいてXSLスタイル・シートを作成し、組み込むカスタム要素を含めます。

2. メソッドのレスポンスXMLに対するフォーマットに基づいて、カスタム要素も含むXMLドキュメントを作成します。

注意:

1つのリソースが特定のタイプの複数のリソースをネストできる場合、これらのネストされたリソースの2つ以上がXMLファイルに含まれていることを確認してください。これにより、次のステップで生成されるスキーマに1対多カーディナリティが反映されます。

3. 前のステップで作成されたXMLドキュメントに基づいてXMLスキーマを作成します。

JDeveloperでこれを実行するには、「新規ギャラリ」を開いて、「一般」→「XML」→「XMLドキュメントからのXMLスキーマ」を順に選択します。

4. 「RESTful Webサービス用のデータ・コントロールを作成する方法」の説明に従って、データ・コントロールを作成します。

手順のステップ9で、レスポンスXSL (作成済のXSLスタイル・シート )とレスポンスXSD (作成済のXMLスキーマ)の両方を指定します。

5.2.9 Webサービス・データ・コントロールに関する必知事項

他の種類のデータ・コントロールと同様に、「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。詳細は、「「データ・コントロール」パネルの使用方法」を参照してください。

「データ・コントロール」パネルでは、各データ・コントロール・オブジェクトがアイコンで表されます。表5-1は、各アイコンが表すもの、「データ・コントロール」パネルの階層内で表示される場所、そのアイコンを使用して作成できるコンポーネントを示しています。

表5-1 Webサービスの「データ・コントロール」パネルのアイコンおよびオブジェクト階層

アイコン

名前

説明

作成する対象

データ・コントロール

データ・コントロールを表します。データ・コントロール自体を使用してUIコンポーネントを作成することはできませんが、その下に表示される子オブジェクトは、いずれも使用できます。通常、各Webサービスに対するデータ・コントロールは1つです。

他のオブジェクトのコンテナとして機能し、コンポーネント作成には使用されません。

コレクション

サービスの操作から返されるデータ・コントロールを表現します。コレクションは、メソッド戻りオブジェクト、他のコレクション、または構造化属性の下の子としても表示されます。コレクションの下の子は、属性、他のコレクション、カスタム・メソッド、コレクションに対して実行できる組込み操作などです。

フォーム、表、グラフ、ツリー、レンジ・ナビゲーションの各コンポーネント、およびマスター/ディテール・コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされた基本的なページの作成」、「ADFによるデータバインドされた表の作成」、「マスター/ディテール・データの表示」および「データバインドされたチャート・コンポーネントおよびゲージ・コンポーネントの作成」を参照してください。

属性

オブジェクト内の個別のデータ要素(行の属性など)を表します。属性は、自分の属するコレクションまたはメソッド戻りの下に、子として表示されます。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ・コントロール属性を使用したテキスト・フィールドの作成に関する項を参照してください。

構造化属性

複合型でありコレクションではない、返されたオブジェクトを表します。たとえば、構造化属性は、現在のサービス・リクエストに割り当てられた単一のユーザーを表現します。

注意:
HTTPペイロード・メソッドを指定した場合、指定の操作(GET、POST、PUTまたはDELETE)のスキーマがWebサービス・データ・コントロールによって生成され、各操作の入力パラメータが別々に「データ・コントロール」パレットに表示されます。ページの設計中に、これらの各操作用の入力パラメータを使用して、編集可能な形式でページ上にドロップできます。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ・コントロール属性を使用したテキスト・フィールドの作成に関する項および「データバインドされた選択リストおよびシャトルの作成」を参照してください。

メソッド

データ・コントロールの操作またはその公開された構造のいずれかを表し、パラメータの受入れや、ビジネス・ロジックの実行を行ったり、オプションで単一の値、構造、またはそれらのコレクションを戻すことができます。

注意:

HTTPペイロード・メソッドを指定した場合、Webサービス・データ・コントロールによってスキーマが生成され、指定の操作(GET、POST、PUTまたはDELETE)が「データ・コントロール」パレットに表示されます。これらのペイロード操作はメソッドとして表現されます。メソッドが引数をとる場合、その引数は、メソッドのノード内にネストされたパラメータとして「パラメータ」ノードに表示されます。

ページの設計中、これらのペイロード操作メソッドをフォーム上でコマンド・ボタンまたはリンクとして使用できます。フォームに操作をドロップすると、その操作は、入力としてすでにドロップされている入力パラメータを受け取ります。そのフォームをこのボタンにバインドできます。

コマンド・コンポーネント。

パラメータを受け入れるメソッドの場合: コマンド・コンポーネントおよびパラメータ付きフォーム。

詳細は、コマンド・コンポーネントを使用したビュー・レイヤーの機能の呼出しに関する項を参照してください。

メソッド戻り

Webサービス・メソッドによって戻されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。

メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッドの戻りオブジェクトの下の子として表示されるオブジェクトは、該当コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、および親コレクション上で実行可能な操作です。

単一値のメソッド戻り値がドロップされると、メソッドはフレームワークにより自動的に起動されなくなります。メソッドを起動するために、対応するメソッドをボタンとしてドロップする必要があります。また、タスク・フローを使用している場合は、メソッド・アクティビティを作成できます。実行可能ファイルの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のページ定義ファイルで定義されるExecutableバインディング・オブジェクトに関する項を参照してください

コレクションと属性、および問合せフォームの場合と同じコンポーネント。

問合せフォームの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFによるデータバインドされた検索フォームの作成」を参照してください。

操作

親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。データ・コントロール操作は、コレクションの下の「操作」ノードにあります。1つ以上のパラメータが操作に必要な場合、それらのパラメータは操作の下の「パラメータ」ノードにリストされます。

現在行のナビゲーションと設定のために、First、Last、Next、Previous、setCurrentRowWithKey、およびSetCurrentRowWithKeyValueの各操作がサポートされます。問合せをリフレッシュするために、Executeがサポートされます。Webサービス操作に応じて、CreateおよびDeleteが使用可能です。Webサービス・データ・コントロールはトランザクション方式ではないので、CommitおよびRollbackはサポートされません。

ボタン、リンクおよびメニューなどのUIコマンド・コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ・コントロール操作を使用したコマンド・コンポーネントの作成に関する項および入力フォームの作成に関する項を参照してください。

パラメータ

メソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。パラメータは、メソッドまたは操作の下の「パラメータ」ノード内に表示されます。

配列および構造化パラメータは、データ・コントロールの下の更新可能な構造化属性およびコレクションとして公開され、UI上にADFフォームまたは更新可能な表としてドロップできます。UIを使用して配列または複合オブジェクト(標準のJava型ではない)のパラメータを作成できます。

ラベル、テキストおよび選択リストの各コンポーネント。

5.2.10 スキーマ・ファイルをRESTデータ・コントロールで利用できるようにする方法に関する必知事項

通常、RESTデータ・コントロールの一部としてJSONまたはXMLスキーマを含めると、データ・コントロール定義には参照が絶対パスとして格納されます。これは、指定したファイルがネットワーク・リソースである場合にうまく機能します。指定したスキーマ・ファイルがローカル・リソースである場合、プロジェクトのリソース・パスに配置できます。これにより、ファイルはアプリケーションにパッケージされ、それへの参照は相対パスとして格納されます。

プロジェクトのリソース・パスにないスキーマ・ファイルのローカル・コピーへの参照を提供する場合、そのリソースへの参照は絶対パスとして格納されます。この場合、アプリケーション・サーバーのローカル・インスタンス上でアプリケーションを後に実行すると、スキーマ・ファイルがアプリケーションで利用可能になります。ただし、リモート・サーバーにアプリケーションをデプロイすると、アプリケーションはファイルにアクセスにできなくなります。

リモート・サーバー・インスタンスにデプロイしたときにアプリケーションがスキーマ・ファイルのローカル・コピーを利用できるようにするには、データ・コントロールを作成する前にそのファイルをプロジェクトのリソース・パスに手動でコピーする必要があります。

プロジェクトのリソース・パスは、「プロジェクト・プロパティ」ダイアログで指定できます。図5-4に示すように、(「プロジェクト・プロパティ」ダイアログの)「プロジェクトのソース・パス」ノードを開き、「リソース」ノードを選択します。「リソース」フィールドにリストされているフォルダは、プロジェクトのリソース・パスです。

図5-4 プロジェクトのリソース・パス

5.2.11 RESTデータ・コントロール付きのPATCHメソッドの使用に関する必知事項

ネイティブJava HttpURLConnectionハンドラは、PATCHリクエストをサポートしません。また、Weblogic ServerのデフォルトのHTTPハンドラをオーバーライドした場合、PATCHが失敗する原因となります。PATCHメソッドはRESTデータ・コントロールでサポートされますが、基礎となるHttpURLConnectionが実行時にサポートする必要があります。

PATCHが正常に機能するように、次のWeblogic Serverのシステム・プロパティを設定し、関連するjarを含めます。

java.protocol.handler.pkgs=weblogic.net

JDeveloperからプロジェクトを実行するには、「実行構成の編集」ダイアログの起動設定でこのプロパティをプロジェクト・レベルで設定します。該当するプロジェクトを選択し、「アプリケーション」メニューから「プロジェクト・プロパティ」を選択します。次に「プロジェクト・プロパティ」ダイアログで、「実行/デバッグ」を選択して該当する実行構成を選択し、「編集」をクリックします。

5.3 Webサービス・データ・コントロールのセキュリティの構成

Webサービスを使用すると、アプリケーションは定義済アプリケーション・プログラミング・インタフェースからデータと情報を交換できます。SSL (Secure Sockets Layer)は、信頼性の低いネットワークでの安全なデータ転送を提供しますが、SSLは2点間でのみ機能します。データが相手側に到達すると、SSLセキュリティは解除され、データはそのままの形式でアクセスできるようになります。複雑なWebサービス・トランザクションでは、データの複数メッセージが異なるシステムに送信されることがありますが、SSLはエンドツーエンドのセキュリティを提供できないため、データは盗み読みされる危険があります。

Webサービスでは、あらゆる形態のセキュリティで、次の問題に対応する必要があります。

- データの真正性と整合性

- データのプライバシと機密性

- 認証と認可

- 否認防止

- サービス拒否攻撃

この項では、「クライアント」とは、デプロイされたWebサービスにSOAPまたはRESTメッセージを送信するWebサービス・データ・コントロールを指します。デプロイされたWebサービスは次のいずれかです。

- Oracle WebLogic Server上で実行されているWebサービス

- インターネット経由でアクセスできる、世界のどこでも実行可能なWebサービス

5.3.1 Oracle WSMのポリシー・フレームワーク

Oracle Web Services Manager (WSM)ポリシー・フレームワークを使用して、組織全体にわたって整合的にWebサービスを管理および保護できます。ポリシー・フレームワークは、WS-Policy標準を使用して構築されます。この標準は、複数のセキュリティ・テクノロジを統一し、システムおよびプラットフォーム間での安全なWebサービスの相互運用性を実現します。

Oracle WSMポリシー・フレームワークは、主に次のような面でWebサービスのセキュリティ問題を解決します。

- 認証と認可
データの送信者のアイデンティティが確認され、セキュリティ・システムによって、送信者がデータ・トランザクションを実行する権限を持っていることが確認されます。

認証型はプレーン・テキストまたは信頼性の高いX509認証チェーンで送信される、基本的なusername/passwordペアです。SAMLアサーション・トークンを使用して、クライアントがサービスに対する認証を受けたり、フェデレートされたSSO環境に参加できるようにすることもできます。この場合、認証の詳細は、ベンダー固有の方法を使用してドメイン間で共有します。

- データの真正性、整合性および否認防止
業界標準メッセージを使用するXMLデジタル署名は、アルゴリズムをダイジェスト化し、SOAPメッセージにデジタル署名します。

- データ・プライバシ
業界標準の暗号化アルゴリズムを使用するXML暗号化により、メッセージを暗号化します。

- サービス拒否攻撃
SOAPメッセージにタイム・スタンプを押すXML構造を定義します。サーバーは、タイム・スタンプを使用して、定義された間隔後SOAPメッセージを無効にします。

Webサービス・セキュリティの詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』を参照してください。

5.3.2 キー・ストアの使用

キー・ストアを使用して、メッセージ・レベルのセキュリティに対応するようにWebサービスを構成できます。メッセージ保護のためのキー・ストアの作成と使用の詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』のメッセージ保護の構成に関する項を参照してください。

5.3.3 SOAP Webサービス・データ・コントロールのセキュリティの定義方法

JDeveloperプロジェクトにSOAPベースのWebサービス・データ・コントロールを作成したら、「データ・コントロール・ポリシーの編集」ダイアログを使用して、データ・コントロールのセキュリティを定義できます。

始める前に:

Webサービス・データ・コントロールでのセキュリティの使用方法に関する知識があると役立つ場合があります。詳細は、「Webサービス・データ・コントロールの保護」を参照してください。

また、他のWebサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「ADFアプリケーションのWebサービス・データ・コントロールの追加機能」を参照してください。

SOAP Webサービス・データ・コントロールのセキュリティを定義する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、Webサービス・データ・コントロールのDataControls.dcxファイルを選択します。

2. 「構造」ウィンドウで、Webサービス・データ・コントロールを右クリックして「Webサービス・セキュリティの定義」を選択します。

JDeveloperは「データ・コントロール・ポリシーの編集」ダイアログに「ポリシー・ストア」の場所を表示します。

注意:

別のポリシー・ストアを使用するには、「プリファレンス」ダイアログの「WSポリシー・ストア」ページでそのポリシー・ストアをまず指定する必要があります。このためには、メイン・メニューで「ツール」→「プリファレンス」を選択し、「WSポリシー・ストア」ページを選択します。

3. 「ポート」ドロップダウン・リストから、指定したポリシーを適用するポートを選択します。

4. 「MTOM」ドロップダウン・リストから、使用するMTOM (メッセージ送信最適化メカニズム)ポリシーを選択します。このフィールドを空白のままにすると、MTOMポリシーは使用されません。

5. 「信頼性」ドロップダウン・リストから、使用する信頼性ポリシーを選択します。このフィールドを空白のままにすると、信頼性ポリシーは使用されません。

6. 「アドレス指定」ドロップダウン・リストから、使用するアドレス指定ポリシーを選択します。このフィールドを空白のままにすると、アドレス指定ポリシーは使用されません。

7. 「セキュリティ」リストで、適用する追加のポリシーを任意に指定できます。ポリシーを追加するには、そのポリシーのチェック・ボックスを選択します。

8. 「WS構成」リストで、適用する追加のWebサービス構成ポリシーを任意に指定できます。ポリシーを追加するには、そのポリシーのチェック・ボックスを選択します。

構成ポリシーの詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』の構成ポリシーに関する項を参照してください。

9. 「管理」リストで、適用する追加の管理ポリシーを任意に指定できます。ポリシーを追加するには、そのポリシーのチェック・ボックスを選択します。

10. 必要な場合は、ポリシーに対応するチェック・ボックスを選択解除して、「セキュリティ」リストと「管理」リストからポリシーを削除することもできます。

11. 「プロパティのオーバーライド」をクリックして、オプションで「セキュリティ」リストおよび「管理」リスト内のポリシーのプロパティをオーバーライドできます。

12. 「OK」をクリックします。

事前定義済ポリシーおよびポリシーとそのプロパティの構成の詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』の構成ポリシーに関する項を参照してください。

5.3.4 RESTful Webサービス・データ・コントロール・セキュリティの定義方法

JDeveloperプロジェクトにRESTful Webサービスのデータ・コントロールを作成したら、「データ・コントロール・ポリシーの編集」ダイアログを使用して、データ・コントロールのセキュリティを定義できます。

始める前に:

Webサービス・データ・コントロールでのセキュリティの使用方法に関する知識があると役立つ場合があります。詳細は、「Webサービス・データ・コントロールの保護」を参照してください。

また、他のWebサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「ADFアプリケーションのWebサービス・データ・コントロールの追加機能」を参照してください。

RESTful Webサービス・データ・コントロールのセキュリティを定義する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、Webサービス・データ・コントロールのDataControls.dcxファイルを選択します。

2. 「構造」ウィンドウで、Webサービス・データ・コントロールを右クリックして「RESTセキュリティの定義」を選択します。

JDeveloperは「データ・コントロール・ポリシーの編集」ダイアログに「ポリシー・ストア」のデフォルトの場所を表示します。

注意:

別のポリシー・ストアを使用するには、「プリファレンス」ダイアログの「WSポリシー・ストア」ページでそのポリシー・ストアをまず指定する必要があります。このためには、メイン・メニューで「ツール」→「プリファレンス」を選択し、「WSポリシー・ストア」ページを選択します。

3. 「セキュリティ」リストで、適用する追加のポリシーを任意に指定できます。ポリシーを追加するには、そのポリシーのチェック・ボックスを選択します。

4. 「WS構成」リストで、適用する追加のWebサービス構成ポリシーを任意に指定できます。ポリシーを追加するには、そのポリシーのチェック・ボックスを選択します。

構成ポリシーの詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』の構成ポリシーに関する項を参照してください。

5. 「管理」リストで、適用する追加の管理ポリシーを任意に指定できます。ポリシーを追加するには、そのポリシーのチェック・ボックスを選択します。

6. 必要な場合は、ポリシーに対応するチェック・ボックスを選択解除して、「セキュリティ」リストと「管理」リストからポリシーを削除することもできます。

7. 「プロパティのオーバーライド」をクリックして、オプションで「セキュリティ」リストおよび「管理」リスト内のポリシーのプロパティをオーバーライドできます。

8. 「OK」をクリックします。

事前定義済ポリシーおよびポリシーとそのプロパティの構成の詳細は、『Oracle Web Services ManagerによるWebサービスの保護とポリシーの管理』の構成ポリシーに関する項を参照してください。

6 ADFモデル・レイヤーを使用したコンシューミングURLサービス

この章では、URLサービス用のデータ・コントロールを作成する方法を説明します。

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

- ADFモデルでのURLサービスの使用について

- ADFデータ・コントロールを使用したURLサービスの公開

- URLサービス・データ・コントロールの使用

6.1 ADFモデルでのURLサービスの使用について

問合せをポストする単純なURLをURLサービスにして、そのURLをADFフォームとして公開できます。たとえば、会社の従業員データにアクセスできるURLサービスがあるとします。このデータは、次の例に示すようなURLを使用して取得できます。

http://example.com/getEmployee?empId=20+deptId=10

従業員データにアクセスするこの単純なURLを、メソッド(getEmployee)と2つのパラメータ(empIdおよびdeptId)を持つADFデータ・コントロールにして、フォームとしてページにドロップできます。

また、URLサービスでは、Representational State Transfer (REST)アクションを利用できます。RESTサービスは、複雑なSOAPプロトコルではなく、単純なHTTP URLを使用してアクセスできるWebサービスです。HTTPの各アクション(GET、PUT、POST、DELETE)は、サービスの実装時に、データに対するアクセスと操作を行うサービス操作にマップされます。応答データはデリミタ区切り値とXMLフォーマットで返すことができ、XSDを指定すると、PUTおよびPOSTアクションの入力フォーマットを定義できます。

注意:

この章では、URLサービス・データ・コントロール・タイプを使用した、単一のURLサービスに基づくデータ・コントロールの作成について主に説明します。REST Webサービスに基づくデータ・コントロールを作成するには、「REST Webサービス」データ・コントロール・タイプを使用すると便利です。このタイプを使用すれば、ウィザードを1回通して実行するだけで、複数のRESTメソッドを1つのデータ・コントロールに取り込むことができます。詳細は、「RESTful Webサービス用のデータ・コントロールを作成する方法」を参照してください。

6.1.1 URLサービスのユースケースと例

RESTアーキテクチャでは、WebサービスがHTTPリソースとして表され、Webサービスのメソッドと操作がHTTP URLからアクセスできるサーバー上のリソースのように認識されるため、Webサービス起動が簡単になります。

たとえば、あるWebサービスにgetEmployee(int EmpID)というメソッドがあるとします。RESTアーキテクチャを使用すると、これをhttp://mywebservice.com/myService/getEmployee?EmpID=20とできます。プレーンなHTTP URLとして表すと、このサービスにアクセスするデータバインドされたページを、URLサービス・データ・コントロールを使用して簡単に作成できます。

6.1.2 URLサービスの追加機能

URLサービスを使用する前に、他のデータ・アクセス機能を理解しておくと役立つ場合があります。次に、関連する他の機能へのリンクを示します。

- 「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。詳細は、「「データ・コントロール」パネルの使用方法」を参照してください。

- データ・コントロールの作成の一般情報については、「ADFデータ・コントロールの使用」を参照してください。

- Webサービス・データ・コントロールの作成の詳細は、ADFモデル・レイヤーを使用したWebサービスの公開を参照してください。

6.2 ADFデータ・コントロールを使用したURLサービスの公開

URLサービス・データ・コントロールを使用すると、指定されたURLからデータ・ストリームにアクセスし、これを使用できます。URLサービス・データ・コントロールは、複数の操作を表すことができます。たとえば、特定のURLサービスのGET操作とPUT操作を同じデータ・コントロールで表すことができます。

6.2.1 URL接続の作成方法

URL接続を作成するには、「URL接続の作成」ダイアログを使用して、名前、およびURLエンドポイントへのアクセスに必要な接続の詳細を指定します。このダイアログには、「URLサービス・データ・コントロールの作成」ウィザードからアクセスすることも、別個にアクセスすることもできます。「URLサービス・データ・コントロールの作成」ウィザードからダイアログにアクセスする場合は、データ・コントロールのアプリケーションにのみ接続が適用されます。ダイアログに別個にアクセスする場合は、単一のIDEレベル接続を作成して、複数のデータ・コントロールにコピーできます。

始める前に:

URLサービス・データ・コントロールの一般的な知識があると役立ちます。詳細は、「ADFデータ・コントロールを使用したURLサービスの公開」を参照してください。

また、他のURLサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「URLサービスの追加機能」を参照してください。

データ・コントロールからアクセスされるURLサービスへのアクセス権があることを確認する必要があります。

IDEレベルURL接続を作成する手順は次のとおりです。

1. メイン・メニューから「ファイル」→「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で「一般」を開き、「接続」、「URL接続」の順に選択して、「OK」をクリックします。

3. 「URL接続の作成」ダイアログで、接続を作成する場所を選択します。

URL接続をアプリケーション内でのみ使用できるようにする場合は、「アプリケーション・リソース」を選択します。URL接続を他のアプリケーションで使用するために「リソース」ウィンドウで選択できるようにする場合は、「IDE接続」を選択します。

4. 接続の名前を入力します。

5. 「URLエンドポイント」フィールドに、目的のデータ・ストリームのURLを入力します。

通常、これにはホストとポートのみを含めます。URLパラメータは含めないでください。たとえば、http://service.example.com:7101/のように入力できます。

6. 「認証タイプ」ドロップダウンから認証レベルを選択します。

デフォルトの認証タイプは「なし」で、認証は無効になります。セキュリティが必要な場合は、「ダイジェスト」を使用します。この方法では、パスワードはユーザー・パスワードのMD5ダイジェストとしてネットワーク上を送信され、ネットワーク・トラフィックを傍受しても判別できません。「基本」認証は、主にネットワーク上でのサービス・アクセスに高度なセキュリティを必要としない場合にのみ役立ちます。

7. ダイジェスト認証または基本認証を選択した場合は、Webサイトへのアクセスに必要なユーザー名とパスワードを指定します。

8. URLがWebサイト全体の保護領域に関連付けられている場合は、認証レルムを入力します。

9. 名前とエンドポイントを入力したら、「接続のテスト」をクリックして、URLコネクションが有効であることを検証します。

10. 「OK」をクリックします。

6.2.2 URLサービス・データ・コントロールの作成方法

URLサービス・データ・コントロールは、「新規ギャラリ」にある、「URLサービス・データ・コントロールの作成」ウィザードを使用して作成できます。URLサービス・データ・コントロールを作成するときには、ウィザードを使用して操作を1つずつ作成します。

始める前に:

URLサービス・データ・コントロールの一般的な知識があると役立ちます。詳細は、「ADFデータ・コントロールを使用したURLサービスの公開」を参照してください。

また、他のURLサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「URLサービスの追加機能」を参照してください。

次のタスクを完了する必要があります。

- アプリケーション・ワークスペースを作成し、プロジェクトをそのワークスペース内で作成します。プロジェクトの編成方法に応じて、既存のアプリケーション・ワークスペースとプロジェクトを使用することも、新規に作成することもできます。アプリケーション・ワークスペースの作成については、『Oracle JDeveloperによるアプリケーションの開発』のアプリケーションとプロジェクトの作成に関する項を参照してください。

- データ・コントロールからアクセスされるURLサービスへのアクセス権が必要です。

- オプションで、「URL接続の作成方法」の説明に従って、使用するURL接続を作成します。

URLサービス・データ・コントロールを作成するには:

1. 「アプリケーション」ウィンドウで、データ・コントロールを配置する先のプロジェクトを右クリックして、「新規」→「ギャラリから」を選択します。

2. 「新規ギャラリ」で「ビジネス層」を開き、「データ・コントロール」を選択して「URLサービス・データ・コントロール」を選択し、「OK」をクリックします。

3. 「URLサービス・データ・コントロールの作成」ウィザード(「データソース」ページ)で、データ・コントロールの名前を指定します。

4. データ・コントロールで使用するURL接続を選択します。

- URL接続をまだ作成していない場合は、「新規接続の作成」アイコンをクリックして、接続のURLと名前を指定します。

- すでにURL接続を作成している場合は、「接続」ドロップダウンから、使用する接続を選択します。

5. 「HTTPメソッド」ドロップダウン・リストから、このデータ・コントロールのアクションを選択します。

6. オプションで、「HTTPヘッダー・パラメータを含める」チェック・ボックスを選択します。詳細は、「URLサービス・データ・コントロールのカスタム・ヘッダー・パラメータを組み込む方法」を参照してください。

7. 「ソース」フィールドで、URLサービスのソースを入力し(たとえば、servicepath/servicename)、「次へ」をクリックします。

この操作にパラメータが必要な場合は、?symbol=##ParamName##形式で指定できます(たとえばservicepath/servicename?symbol=##id##)。また、パラメータを使用してソース・パスを動的に入力することもできます(たとえばservicepath/##servicename##?symbol=##id##)。

8. 「パラメータ」ページで、指定したパラメータのデフォルト値を指定して、「次へ」をクリックします。

PUTおよびPOST操作の場合は、入力フォーマットを定義したXMLスキーマ定義(XSD)も指定する必要があります。

9. 「データ・フォーマット」ページで、データソースのデータ・フォーマットを選択し、関連するプロパティを設定して、「次へ」をクリックします。

XMLフォーマット(XSDおよびXSLファイルのURLを指定)とデリミタ区切り値(デリミタ、テキスト修飾子およびデータのエンコーディングを指定)のいずれかを選択できます。

注意:

XSL URLフィールドはオプションです。このフィールドを使用して、他のフィールドの値に基づいて計算されたフィールドなど、カスタム要素を定義するXSLスタイル・シートを指定できます。これにより、これらの要素は、データ・コントロール内の属性であることが明らかになります。XSLスタイル・シートの準備の詳細は、「RESTful Webサービス・データ・コントロールへのカスタム属性の追加方法」を参照してください。

10. 「終了」ページで「URL接続のテスト」をクリックすると、URLデータ接続が有効であることを検証できます。「終了」をクリックします。

11. データ・コントロールに含める他のすべての操作について、前述の手順を繰り返します。同じデータ・コントロールに追加の操作を含めるには、ウィザードの「データソース」ページの「名前」フィールドに、最初の操作についてウィザードを実行したときにデータ・コントロールに使用した名前と同じ名前を入力します。

6.2.3 URLサービス・データ・コントロールの作成時の処理内容

データ・コントロールを作成する際に、JDeveloperによってデータ・コントロール定義ファイル(DataControls.dcx)が作成され、概要エディタでファイルが開き、ファイルの階層が「データ・コントロール」パネルに表示されます。詳細は、「データ・コントロール作成時のプロジェクト内の処理」を参照してください

URLサービス・データ・コントロールを作成すると、DataControls.dcxの概要エディタに各操作のメソッド・ノードが移入されます。これらのメソッド・ノードには、戻りサブノードがある場合があり、戻りサブノードには、コレクション、スカラー値および属性のサブノードが含まれる場合があります。

「HTTPヘッダー・パラメータを含める」チェック・ボックスを選択した操作については、メソッド・ノードにMap型のHttpHeaderという入力パラメータが指定されます。

たとえば、図6-1は3つのメソッドを含むデータ・コントロールを示しており、これらのメソッドにはカスタム・ヘッダー・パラメータを使用するメソッド(loadData(Map))が含まれます。

図6-1 「データ・コントロール」パネル内のURLデータ・コントロール

複合データ型のパラメータをとる操作の場合は、構造化属性ノードも表示されます。

URLサービス・データ・コントロールに対して表示される全ノードのリストと使用方法の詳細は、表6-1を参照してください。

6.2.4 スキーマを使用しないURLデータ・コントロールの生成に関する必知事項

HTTP GETメソッドに基づくURLデータ・コントロールを作成する際に、ウィザードでスキーマを指定しなければ、スキーマが自動的に生成されます。ただし、この自動生成されたスキーマには、データ・コントロールが期待どおりに動作するために必要な情報が含まれていない可能性があります。たとえば、自動生成されたスキーマには次の制約があります。

- 要素から返されるデータがない場合、生成されたスキーマは要素の構造の詳細を反映しておらず、このため「データ・コントロール」パネルには対応するデータ・コントロール・オブジェクトが表示されません。

- ある要素から返されたデータに含まれる行がただ1つの場合、作成されるデータ・コントロール内でその要素は表として扱われません。(スキーマ内でその要素にmaxOccurs="unbounded"属性を追加することによって、この問題を修正できます。)

- 主キーとして属性を設定すると、生成されたスキーマが正しいデータ型を反映しない場合があります。詳細は、「URLサービス・データ・コントロールの主キーに関する必知事項」を参照してください。

生成されたスキーマは、「アプリケーション」ウィンドウでプロジェクトのリソース・ノードの下に表示され、そこでスキーマを確認して編集できます。

6.2.5 URLサービス・データ・コントロールのカスタム・ヘッダー・パラメータを組み込む方法

URLサービス・データ・コントロールを使用する場合、HTTPリクエストの起動時にHTTPヘッダーにカスタム・パラメータを追加する場合があります。このようなパラメータは、セキュリティや通知など、様々な目的で役立ちます。

始める前に:

URLサービス・データ・コントロールの一般的な知識があると役立ちます。詳細は、「ADFデータ・コントロールを使用したURLサービスの公開」を参照してください。

また、他のURLサービス機能を使用して追加できる機能についても理解しておくと役立ちます。詳細は、「URLサービスの追加機能」を参照してください。

次のタスクを完了する必要があります。

- URLサービス・データ・コントロールを作成して、ウィザードの「HTTPヘッダー・パラメータを含める」チェック・ボックスを選択します。詳細は、「URLサービス・データ・コントロールの作成方法」を参照してください。

- 『Oracle ADF FacesによるWebユーザー・インタフェースの開発』のWebページの作成に関する項で説明されているとおりに、JSFページを作成します。

- マネージドBeanを作成して、ビュー・プロジェクトのadfc-config.xmlファイルに登録します。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のマネージドBeanを使用した情報の格納方法に関する項を参照してください。

URLサービスにカスタム・ヘッダーを渡すには:

1. マネージドBeanに、ヘッダー・パラメータの名前と値を指定する、java.util.Map型のBeanプロパティを作成します。
このようなマネージドBeanの例は、例6-1を参照してください。

2. 「データ・コントロール」パネルで、カスタム・ヘッダー・パラメータを含むメソッドをWebページにドラッグし、「ADFボタン」としてドロップします。

3. 「アクション・バインディングの編集」ダイアログで、次の手順を実行してボタンとマネージドBean間のバインディングを作成します。

a. 「データ・コレクション」ツリーで、HTTPヘッダー・パラメータを含むメソッドを選択します。

b. 「パラメータ」表で、パラメータの「値」セルをクリックし、ドロップダウン・ボタンをクリックして「EL式ビルダーの表示」を選択します。

c. 「変数」ダイアログで、式を手動で入力するか、「変数」ツリーを移動して、バインドするHTTPパラメータを表すマネージドBeanフィールドを選択します。
たとえば、例6-1に示すhttpHeadersMapプロパティにバインドするには、「ADFマネージドBean」ノードを開きます。さらに、Beanのスコープのノードを開いて、adfc-config.xmlファイルで指定されているBean名(クラス名と同じであるとは限りません)のノードを開き、「httpHeadersMap」を選択します。

実行時に、データ・コントロールはマップ(存在する場合)からエントリを取得して、HTTPヘッダーとしてリクエストに追加します。

例6-1 URLサービス・データ・コントロールのカスタム・パラメータを含むマネージドBean

package view;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class BackingBean {

private Map<String,String> httpHeadersMap = new HashMap<String,String>();

public BackingBean() {
httpHeadersMap.put("TenantID","OurCompany");
}

public void setHttpHeadersMap(Map<String,String> httpHeadersMap) {
this.httpHeadersMap = httpHeadersMap;
}

public Map<String,String> getHttpHeadersMap() {
return httpHeadersMap;
}
}

6.2.6 URLサービス・データ・コントロールの主キーに関する必知事項

URLサービスにデータ・コントロールを作成すると、そのデータ・コントロールは公開された任意のコレクションに対する主キー操作をサポートします。ただし、主キー機能が確実に正しく動作するように、「URLサービス・データ・コントロール」ウィザードの「データ・フォーマット」ページで、主キー・フィールドのデータ型の名前を示すスキーマを指定する必要があります。(HTTP GETメソッドに基づくURLデータ・コントロールの場合は、スキーマを指定する必要はありません。)

その他の面では、この機能はWebサービス・データ・コントロールの対応する機能と同じです。詳細は、「SOAP Webサービス・データ・コントロールの主キーに関する必知事項」を参照してください。

6.2.7 URLサービス・データ・コントロールに関する必知事項

URLサービス・データ・コントロールは更新不可能であるため、「データ・コントロール」パネルの一部のオブジェクトには制限があります。たとえば、「操作」ノードの下の組込み操作で使用可能になっているのは、取得とナビゲーションのみです。また、URLサービス・データ・コントロールのパラメータ・オブジェクトは、ユーザーがURLに含めて渡すパラメータです。詳細は、表6-1を参照してください。

6.3 URLサービス・データ・コントロールの使用

他の種類のデータ・コントロールと同様に、「データ・コントロール」パネルから項目をドラッグし、それを特定のUIコンポーネントとしてページ上にドロップすることで、データバインドされたユーザー・インタフェースを設計できます。詳細は、「「データ・コントロール」パネルの使用方法」を参照してください。

「データ・コントロール」パネルでは、各データ・コントロール・オブジェクトがアイコンで表されます。表6-1は、各アイコンが表すデータ・コントロール・オブジェクト、「データ・コントロール」パネルの階層内で表示される場所、そのアイコンを使用して作成できるコンポーネントを示しています。

表6-1 URLサービス・データ・コントロールの「データ・コントロール」パネルのアイコンおよびオブジェクト階層

アイコン

名前

説明

作成する対象

データ・コントロール

データ・コントロールを表します。データ・コントロール自体を使用してUIコンポーネントを作成することはできませんが、そのデータ・コントロールの下に表示される子オブジェクトは使用できます。複数のデータ・コントロールが存在する可能性もあります。これらはそれぞれ、データ関数の論理グループを表しています。

他のオブジェクトのコンテナとして機能します。なし。

メソッド

URLのコンテンツを取得する、loadData()操作を表します。この操作は、パラメータを受け入れ、なんらかのアクションまたはビジネス・ロジックを実行し、データまたはデータ・コレクションを戻すことができます。メソッドがMapのgetメソッドで、データ・コレクションを戻す場合、この下にはメソッド戻りアイコンが子として表示されます。メソッドにパラメータが必要な場合は、そのメソッドの下に必須パラメータをリストするノードが表示されます。

コマンド・コンポーネント。

パラメータを受け入れるメソッドの場合: コマンド・コンポーネントおよびパラメータ付きフォーム。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ビュー・レイヤーで各機能を起動するコマンド・コンポーネントの使用」を参照してください。

メソッド戻り

Webサービス・メソッドによって戻されたオブジェクトを表します。戻されたオブジェクトは、単一の値またはコレクションです。

メソッド戻りは、これを戻すメソッドの下に、子として表示されます。メソッドの戻りオブジェクトの下の子として表示されるオブジェクトは、該当コレクションの属性、親コレクションに関連するアクションを実行する他のメソッド、および親コレクション上で実行可能な操作です。

単一値のメソッド戻り値がドロップされると、メソッドはフレームワークにより自動的に起動されなくなります。メソッドを起動するために、対応するメソッドをボタンとしてドロップする必要があります。また、タスク・フローを使用している場合は、メソッド・アクティビティを作成できます。実行可能ファイルの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のページ定義ファイルで定義されるExecutableバインディング・オブジェクトに関する項を参照してください

コレクションと属性、および問合せフォームの場合と同じコンポーネント。

問合せフォームの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFによるデータバインドされた検索フォームの作成」を参照してください。

コレクション

URLサービスの操作から返されるデータ・コントロールを表現します。コレクションは、メソッド戻りオブジェクト、他のコレクション、または構造化属性の下の子として表示されます。コレクションの下の子は、属性、他のコレクション、カスタム・メソッド、コレクションに対して実行できる組込み操作などです。

フォーム、表、グラフ、ツリー、レンジ・ナビゲーションの各コンポーネント、およびマスター/ディテール・コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「データバインドされた基本的なページの作成」、「ADFによるデータバインドされた表の作成」、「マスター/ディテール・データの表示」および「データバインドされたチャート・コンポーネントおよびゲージ・コンポーネントの作成」を参照してください。

構造化属性

複合型でありコレクションではない、返されたオブジェクトを表します。たとえば、構造化属性は、現在のサービス・リクエストに割り当てられた単一のユーザーを表現します。

ラベル、テキスト・フィールド、日付、値リスト、および選択リストの各コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ・コントロール属性を使用したテキスト・フィールドの作成に関する項および「データバインドされた選択リストおよびシャトルの作成」を参照してください。

属性

オブジェクト内の個別のデータ要素(行の属性など)を表します。属性は、自分の属するコレクションまたはメソッド戻りの下に、子として表示されます。

ラベル、テキスト・フィールドおよび選択リストの各コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ・コントロール属性を使用したテキスト・フィールドの作成に関する項を参照してください。

操作

親オブジェクトに対してアクションを実行する、組込みデータ・コントロール操作を表します。データ・コントロール操作は、コレクションの下の「操作」ノードにあります。1つ以上のパラメータが操作に必要な場合、それらのパラメータは操作の下の「パラメータ」ノードにリストされます。

First、Last、Next、およびPreviousのナビゲーション操作がサポートされます。問合せをリフレッシュするために、Executeがサポートされます。URLメソッドに応じて、CreateおよびDeleteが使用可能です。URLサービス・データ・コントロールはトランザクション方式ではないので、CommitおよびRollbackはサポートされません。

ボタン、リンクおよびメニューなどのUIコマンド・コンポーネント。

詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のデータ・コントロール操作を使用したコマンド・コンポーネントの作成に関する項および入力フォームの作成に関する項を参照してください。

パラメータ

メソッドまたはその下に表示される操作によって宣言されたパラメータ値を表します。パラメータは、メソッドまたは操作の下のノードに表示されます。

URLサービス・データ・コントロールのパラメータは、ユーザーがURLに入れて渡したパラメータです。これらは、URLサービス・データ・コントロールが作成されたときに、loadData()メソッドへのパラメータとして表示されます。たとえば、URL http://www.example.org?id=##param##へのデータ・コントロールを作成したとします。「データ・コントロール」パネルには、paramという名前のパラメータを1つ持ったloadData()が表示されます。呼び出しが行われると、前述のURLでは、このパラメータに提供された値を使った置き換えが行われます。

ラベル、テキストおよび選択リストの各コンポーネント。

7 データ・コントロールへのビジネス・ロジックの追加

この章では、宣言的メタデータ、たとえば属性のデフォルト・ラベル、新規一時属性、検証ルール、組込み検索基準などを使用してデータ・コントロールを構成する方法を説明します。また、この章では、構成したデータ・コントロールをアプリケーション内で使用する前にテストする方法、およびデータ・コントロールでのGroovy式の使用に関する参考情報を示します。

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

- データ・コントロールへのビジネス・ロジックの追加の概要

- データ・コントロールの構成

- 属性の使用

- データ・オブジェクトへの一時属性の追加

- 属性への検証ルールの宣言的な定義

- 名前付き基準を使用した結果セットのフィルタリング

- 値オブジェクトのリストの作成

- Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト

- Groovy言語サポート

7.1 データ・コントロールへのビジネス・ロジックの追加の概要

データ・コントロールを生成すると、それ以上変更を加えずに、データ・モデルとアプリケーション内のUIコンポーネントとの間のバインディングを作成するためにそれらを使用できます。さらに、データ・コントロールを構成して、データ・モデルにビジネス・ロジックやその他の機能を追加し、UIコンポーネントの作成に「データ・コントロール」パネルを使用する際にそれらの機能を適用できます。たとえば、作成するデータ・コントロールのタイプに応じて、次の作業を行うことができます。

- 属性のデフォルト値の構成

- 属性へのラベルおよびツールチップの追加

- ADF Faces UIから式言語(EL)を介して参照可能なカスタム・メタデータ(通常は名前-値ペア)の追加

- 計算属性の追加

- 属性レベルの検証ルールとカスタム・エラー・メッセージの追加

- 宣言的な検索フォームの定義

7.2 データ・コントロールの構成

データ・コントロールを作成すると、データ・コントロールについて、値と動作の標準的なセットが設定されます。たとえば、属性のラベルのクライアントでの表示方法がデータ・コントロールによって決定されます。データ・コントロールの要素に対応するデータ・コントロール構造ファイルを作成および変更することによって、これらの値と動作を構成できます。まず、.dcxファイルの概要エディタを使用して、データ・コントロール構造ファイルを生成します。

7.2.1 データ・コントロールの編集方法

データ・コントロールを構成可能にするには、DataControls.dcxファイルの概要エディタを使用し、データ・コントロールに含まれるオブジェクトに対応するデータ・コントロール構造ファイルを作成します。個別のデータ・コントロール構造ファイルを編集できるようになります。

始める前に:

データ・コントロール構成の一般的な知識があると役立ちます。詳細は、「データ・コントロールの構成」を参照してください。

また、「ADFデータ・コントロールの作成方法」の説明に従って、データ・コントロールを作成する必要があります。

データ・コントロールを編集するには:

1. 「アプリケーション」ウィンドウで、DataControls.dcxをダブルクリックします。

2. 概要エディタで、構成するオブジェクトを選択し、「編集」アイコンをクリックしてデータ・コントロール構造ファイルを生成します(図7-1を参照)。

図7-1 データ・コントロール・レジストリの「編集」ボタン

3. データ・コントロール構造ファイルの概要エディタで、必要な変更を加えます。

7.2.2 データ・コントロール編集時の処理

データ・コントロールを編集すると、JDeveloperにより、影響を受けたコレクションのメタデータが含まれているデータ・コントロール構造ファイルが作成され、そのファイルが概要エディタで開かれます。このファイルには、そのコレクション固有のデータ・コントロールの構成データ(データ・オブジェクトに対して指定したUIヒントまたはバリデータなど)が保存されています。

データ・コントロール構造ファイルのベース名は、対応するデータ・オブジェクトのものと同じです。たとえば、Customer.javaエンティティBeanに対応するコレクション・ノードが選択されている状態で「編集」アイコンをクリックすると、データ・コントロール構造ファイルの名前はCustomer.xmlとなります。データ・コントロール構成ファイルはBeanクラスのパッケージに対応するパッケージに生成され、パッケージ名にpersdefが付加されます。たとえば、Customer.java Beanがmodelパッケージ内にある場合、Customer.xmlデータ・コントロール定義ファイルはpersdef.modelパッケージ内に生成されます。データ・コントロール構成ファイルが生成された後、概要エディタを使用してそのファイルをさらに構成できます。

データ・コントロール構造ファイルには、次の情報が含まれます。

- 属性: サービスのすべての属性を表します。たとえば、エンティティBeanの場合は、データベース列にマップされたBeanプロパティごとに属性が存在します。また、一時属性も追加できます。これらの属性のUIでの表示方法を定義するUIヒントを設定できます。属性値が必須か、一意である必要があるか、表示可能かどうかなどの他のプロパティを設定することもできます。詳細は、「属性の操作」を参照してください。
属性の検証を設定したり、カスタム・プロパティを作成することもできます。検証の詳細は、「属性への検証ルールの宣言的な定義」を参照してください。カスタム・プロパティの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のカスタム・プロパティによって駆動される汎用機能の実装方法に関する項を参照してください。

- アクセッサ: 結果セットを返すデータ・コントロール要素を表します。

- 名前付き基準: 表示された行をフィルタリングするためのルールを作成できます。名前付き基準は、JPAベースのデータ・コントロールに対して使用できます。
詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

- 値リスト: 現在のデータ・オブジェクトの属性と、別のデータ・オブジェクトの行の間に、宣言的な関連付けを作成できます。その後、これらの関連からドロップダウン・リストなどのコンポーネントを作成できます。

- 操作: データ・コントロールの組込み操作で使用されるデータ・オブジェクト上のメソッドを表します。たとえば、それぞれ「作成」および「削除」組込み操作で使用されるaddおよびremoveメソッドなどです。

図7-2に、Item Beanのデータ・コントロール構造ファイルを示します。

図7-2 概要エディタでのデータ・コントロール構造ファイル

注意:

データ・コントロール構造ファイルの概要エディタには、データ・オブジェクトに関連付けられているすべての属性、アクセッサおよび操作が表示されます。ただし、データ・コントロール構造ファイルのXMLソースには、編集した要素の定義のみが含まれます。基本要素は、データ・オブジェクトからイントロスペクションされます。また、基礎となるデータ・オブジェクトに変更を加えると、データ・コントロールはそれらの変更を継承します。

7.2.3 データ・コントロールを前のリリースから変換する方法

データ・コントロール構造ファイルのフォーマットがリリース11.1.2では変更され、名前付き基準や値リストなどの追加機能が有効になりました。また、データ・コントロール構造ファイルはオンデマンドでのみ生成されるようになりました。たとえば、メタデータをデータ・コントロール・オブジェクトに追加する必要がある場合や、データ・コントロールを作成する際に構造ファイルの生成を要求した場合などに生成されます。データ・コントロール・オブジェクトのメタデータのうち、データ・コントロールのベースとなるオブジェクト内ですでに使用可能な情報を単に繰り返すものは生成されなくなりました。JPAベースのデータ・コントロールの場合、UpdatableSingleValue.xmlファイルとUpdateableCollection.xmlファイルは生成されなくなりました。

前のリリースで作成したデータ・コントロールがある場合は、JDeveloperの新しいバージョンで開発したアプリケーション内でそのデータ・コントロールを引き続き使用できます。ただし、そのデータ・コントロールに変更を加える予定がある場合は、まずデータ・コントロールを新しいフォーマットに変換する必要があります。古いフォーマットのデータ・コントロールの変更はサポートされていません。

現在の構造定義フォーマットを使用するように古いデータ・コントロールを変換するには、次の表からの実装クラスのエントリを更新するなど、DataControls.dcxファイルにいくつか変更を加える必要があります。

表7-1 データ・コントロール実装クラス

データ・コントロール・タイプ

データ・コントロール実装クラス

EJB

oracle.adfinternal.model.adapter.ejb.EjbDCDefinition

Bean

oracle.adf.model.adapter.bean.BeanDCDefinition

Webサービス

oracle.adfinternal.model.adapter.webservice.WSDefinition

URLサービス

oracle.adfinternal.model.adapter.url.URLDCDefinition

新しいデータ・コントロール構造ファイルも生成する必要があります。ただし、既存のUIコンポーネントを更新されたデータ・コントロールに再バインドする必要はありません。

データ・コントロールを前のリリースから移行する手順は次のとおりです。

1. JDeveloperの現在のバージョンで、対象のデータ・コントロールを含むアプリケーション・ワークスペースを開きます。

2. DataControls.dcxファイルを開き、次の変更を行います。

- ImplDef属性の値を、該当するデータ・コントロール実装クラスの名前に変更します(表7-1を参照)。

- オプションで、BeanおよびEJBデータ・コントロールの場合、データ・コントロールのbean-definition要素またはejb-definition要素にDataControlHandler属性を追加して、問合せとページングの完全なサポートを有効にします。JPAベースのデータ・コントロールの場合、通常はoracle.adf.model.adapter.bean.jpa.JPQLDataFilterHandlerを使用します。非JPAデータ・コントロールの場合、通常はoracle.adf.model.adapter.bean.DataFilterHandlerを使用します。

- オプションで、JPAベースのBeanおよびEJBデータ・コントロールの場合、データ・コントロールのbean-definition要素またはejb-definition要素にaccessMode属性を追加して、データ・コントロールのページングのタイプを指定します。accessModeの値は、scrollableまたはrangePagingのどちらかです。アクセス・モードの詳細は、「EJBデータ・コントロールでのデータのページ分割されたフェッチ」を参照してください。

- オプションで、JPAベースのBeanおよびEJBデータ・コントロールの場合、データ・コントロールのbean-definition要素またはejb-definition要素にeagerPersist属性を追加して、新規レコードの永続化を自動的に行うかどうかを指定します。eagerPersistの値は、falseまたはtrueのどちらかです。詳細は、「新規行の自動永続化について」を参照してください。

3. メタデータを追加したデータ・コントロール(UIヒントやバリデータなど)の場合は、「データ・コントロールを編集する方法」で説明しているとおりに新規データ・コントロール構造ファイルを作成します。

4. オプションで、データ・コントロールのプロジェクト内にある古いデータ・コントロール構造ファイルを削除します。これには次のものがあります。

- UpdatableSingleValue.xml

- UpdateableCollection.xml

- データ・コントロール・オブジェクトのメタデータを含む、.xmlが末尾に付いたファイル(ステップ3で生成した新しいファイルは含まない)。

次の例は、変換されたDataControls.dcxファイルを示しています。

<?xml version="1.0" encoding="UTF-8" ?>
<DataControlConfigs xmlns="http://xmlns.oracle.com/adfm/configuration"
version="11.1.1.61.92" id="DataControls" Package="model1">
<AdapterDataControl id="BeanPagingDC1"
FactoryClass="oracle.adf.model.adapter.DataControlFactoryImpl"
ImplDef="oracle.adf.model.adapter.bean.BeanDCDefinition"
SupportsTransactions="false" SupportsSortCollection="true"
SupportsResetState="false" SupportsRangesize="false"
SupportsFindMode="false" SupportsUpdates="true"
Definition="model1.BeanPagingDC1"
BeanClass="model1.BeanPagingDC1"
xmlns="http://xmlns.oracle.com/adfm/datacontrol">
<CreatableTypes>
<TypeInfo FullName="model1.SampleData1"/>
<TypeInfo FullName="model1.BeanPagingDC1"/>
</CreatableTypes>
<Source>
<bean-definition BeanClass="model1.BeanPagingDC1"
DataControlHandler="oracle.adf.model.adapter.bean.DataFilterHandler"
AccessMode="scrollable"
xmlns="http://xmlns.oracle.com/adfm/adapter/bean"/>
</Source>
</AdapterDataControl>
</DataControlConfigs>

7.2.4 データ・コントロールのMDSカスタマイズに関する必知事項

データ・コントロールに含まれるすべてのオブジェクトをOracle Metadata Services (MDS)カスタマイズ可能にする必要がある場合は、パッケージされたアプリケーションにこれらのオブジェクトのデータ・コントロール構造ファイルが含まれている必要があります。

アダプタ・フレームワークに基づくデータ・コントロールを作成する際には、データ・コントロール構造ファイルはデフォルトでは生成されません。これは、特定のオブジェクトにメタデータを追加しない場合、データ・コントロールにこれらのファイルは必要ないからです。「データ・コントロールを編集する方法」で説明しているように、通常、データ・コントロール構造ファイルは、データ・コントロールを編集して宣言的なメタデータ(UIヒントまたはバリデータなど)を追加すると、1つのデータ・コントロール・オブジェクト用にのみ生成されます。各データ・コントロール・オブジェクトにデータ・コントロール構造ファイルを作成するには、データ・コントロール・オブジェクトごとにその手順を繰り返す必要があります。

注意:

「EJBデータ・コントロールの作成」ウィザードと「Beanデータ・コントロールの作成」ウィザードには「メタデータの生成」チェック・ボックスがあり、データ・コントロールの作成時にデータ・コントロール・オブジェクトごとに構造ファイルが生成されるようにするには、このチェック・ボックスを選択します。

MDSの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「MDSによるアプリケーションのカスタマイズ」を参照してください。

7.3 属性の使用

ビジネス・サービスのデータ・コントロールを作成する際、個々のデータ・オブジェクトについて作成するデータ・コントロール構造ファイルで宣言的にデータ・オブジェクトの永続属性の機能を拡張できます。たとえば、UIコンポーネントの属性のデフォルト表示を制御する検証ルールを作成し、UIヒントを設定できます。さらに、一時属性を作成できます。

いずれの場合も、これらのプロパティはデータ・コントロール構造ファイルの概要エディタの「属性」ページで設定します。データ・コントロール構造ファイルの作成の詳細は、「データ・コントロールの編集方法」を参照してください。

7.3.1 属性を主キーとして指定する方法

データ・オブジェクトのデータ・コントロール構造ファイルの概要エディタで、そのデータ・オブジェクトの主キーとして属性を指定できます(データ・オブジェクトの基礎クラスでまだ指定していない場合)。

始める前に:

属性プロパティの設定方法の知識があると役立ちます。詳細は、「属性の操作」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

属性を主キーとして設定する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで、主キーとして指定する属性を選択して、「詳細」タブをクリックします。

4. 「詳細」ページで、「キー属性」プロパティを設定します。

注意:

属性がクラス内ですでに主キーとして指定されている場合は(たとえば、JPA @IDアノテーションによって)、データ・コントロールはその設定を継承し、「キー属性」チェック・ボックスが選択されます。ただし、この場合は、「キー属性」オプションを選択解除することはできません。

7.3.2 属性の更新可能性の制御方法

「更新可能」プロパティにより、特定の属性が更新可能かどうかを制御します。「更新可能」プロパティでは次の値を選択できます。

- 常に: 属性は常に更新可能です。

- なし: 属性は読取り専用です。

- 新規の間: 行を初めて作成するトランザクション中は属性を設定できますが、データベースへのコミットが成功した後、属性は読取り専用になります。

始める前に:

属性プロパティの設定方法の知識があると役立ちます。詳細は、「属性の操作」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

属性の更新可能性を設定する手順:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで編集する属性を選択し、「詳細」タブをクリックします。

4. 「詳細」ページで、「更新可能」ドロップダウン・リストから値を選択します。

7.3.3 属性の静的なデフォルト値を定義する方法

値のタイプが「リテラル」に設定されている場合、「詳細」セクションの「値」フィールドには、属性のデフォルト値を静的に指定できます。たとえば、ServiceRequestエンティティBeanのStatus属性のデフォルト値をOpenに設定したり、User BeanのUserRole属性のデフォルト値をuserに設定できます。

始める前に:

属性プロパティの設定方法の知識があると役立ちます。詳細は、「属性の操作」を参照してください。

属性の静的なデフォルト値を定義する手順:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで編集する属性を選択し、「詳細」タブをクリックします。

4. 「詳細」ページで、「リテラル」オプションを選択します。

5. 「リテラル」オプションの下のテキスト・フィールドに、属性のデフォルト値を入力します。

7.3.4 Groovy式を使用してデフォルト値を定義する方法

属性のデフォルト値は、Groovy式を使用して定義できます。デフォルト値を実行時に変更する場合、この方法が便利です。ただし、デフォルト値が常に同じである場合は、「リテラル」タイプ(「詳細」タブ)で値のフィールドを使用する方が値の表示および管理が容易です。Groovyの使用の詳細は、「Groovy言語サポート」を参照してください。

始める前に:

属性プロパティの設定方法の知識があると役立ちます。詳細は、「属性の操作」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

Groovy式を使用してデフォルト値を定義する手順:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで編集する属性を選択し、「詳細」タブをクリックします。

4. 「詳細」ページで、デフォルト値タイプに「式」を選択し、隣接したテキスト・フィールドの横の「編集」ボタンをクリックします。

5. 「式の編集」ダイアログで、表示されているフィールドに式を入力します。

参照する属性には、データ・オブジェクトに定義されている任意の属性を使用できます。

6. 一時属性の場合は、図7-3に示すように、適切な再計算設定を選択します。

図7-3 式エディタの編集

「常に」(デフォルト)を選択すると、行のいずれかの属性が変更されるたびに式の評価が行われます。

「なし」を選択すると、行が作成された場合にのみ式の評価が行われます。

「次の式に基づく」を選択した場合は、属性値を再計算する時期を決定する式を指定できます。

たとえば、「次の式に基づく」フィールドに次のような式を入力すると、Quantity属性またはUnitPrice属性が変更された場合に属性が再計算されます。

return (adf.object.dataProvider.isAttributeChanged("Quantity") || adf.object.dataProvider.isAttributeChanged("UnitPrice"));

7. ダイアログの下の「選択可能」リストで、値の式またはオプションの再計算式の基礎となる属性を選択し、それぞれ「選択済」リストに移動します。

8. 「OK」をクリックして、式を保存します。

7.3.5 Groovy式を使用したデフォルト値の作成時の処理

Groovy式を使用してデフォルト値を定義すると、データ・コントロール構造ファイルの対応する属性のタグ内に<RecalcCondition>タグと<TransientExpression>タグが追加されます。また、式に依存性を指定した場合は、<Dependencies>タグが追加されます。次の例は、作成された式でデフォルト値がprice属性とquantity属性の積として定義され、再計算条件が「常に」として指定されている場合に、LineItemTotal属性に追加されるコードを示しています。

<RecalcCondition><![CDATA[true]]></RecalcCondition>
<TransientExpression><![CDATA[price * quantity]]></TransientExpression>
<Dependencies>
<Item
Value="price"/>
<Item
Value="quantity"/>
</Dependencies>

7.3.6 属性へのUIヒントの設定方法

属性のUIヒントを設定し、それらの属性を使用するすべてのUIコンポーネントでそれらの属性が一貫したローカライズ可能な方法で表示およびラベル付けされるように設定できます。属性に対してUIヒントを作成するには、「アプリケーション」ウィンドウからアクセス可能な、データ・オブジェクトのデータ・コントロール構造ファイルの概要エディタを使用します。

注意:

EJBおよびBeanデータ・コントロールのUIヒントを設定するためにデータ・コントロール構造ファイルを使用する代わりの方法として、Beanクラスに直接アノテーションを追加して、多くの同じ機能を作成することができます。詳細は、「アノテーションを使用した属性のUIヒントの提供」を参照してください。

始める前に:

属性プロパティの設定方法の知識があると役立ちます。詳細は、「属性の操作」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

UIヒントを設定する手順:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで編集する属性を選択し、「UIヒント」タブをクリックします。

4. 「UIヒント」セクションで、目的のUIヒントを設定します。

各種のUIヒントについては、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のビュー・オブジェクトのUIヒントの定義に関する項を参照してください。

注意:

『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』に示されているビュー・オブジェクトは、SQL問合せをカプセル化し、結果の処理を簡単にするために使用されるADFビジネス・コンポーネントです。データ・コントロール構造ファイルは、アダプタ・データ・コントロール内のビュー・オブジェクトとほぼ同じように機能し、同じ構成オプションを多数提供しています。ビュー・オブジェクトの詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のビュー・オブジェクトについてに関する項を参照してください。

7.3.7 属性へのUIヒントの設定時の処理

属性に対してUIヒントを設定すると、それらのヒントはプロパティとして格納されます。プロパティのタグがデータ・オブジェクトのデータ・コントロール構造ファイルに追加され、プロパティの値はリソース・バンドル・ファイルに保存されます。リソース・バンドル・ファイルが存在しない場合は、データ・コントロールのパッケージに生成され、初めてUIヒントを設定した際にプロジェクト名に従って名前が設定されます。

次の例に、Item.xmlデータ・コントロール構造ファイルにおけるprice属性のコードを示します。属性に対して設定されているラベルおよびフォーマット・タイプ・ヒントのタグも含まれます。

<PDefAttribute
Name="price">
<Properties>
<SchemaBasedProperties>
<LABEL
ResId="${adfBundle['model.ModelBundle']['model.Item.price_LABEL']}"/>
<FMT_FORMATTER
ResId="${adfBundle['model.ModelBundle']['model.Item.price_FMT_
FORMATTER']}"/>
</SchemaBasedProperties>
</Properties>
</PDefAttribute>

次の例に、ModelBundle.propertiesリソース・バンドル・ファイルにおけるラベルおよびフォーマット・タイプ・ヒントの対応するエントリを示します。これらにはプロジェクトのローカライズ可能なプロパティすべての値も含まれています。

model.Item.price_LABEL=Price
. . .
model.Item.price_FMT_FORMATTER=oracle.jbo.format.DefaultCurrencyFormatter

7.4 データ・オブジェクトへの一時属性の追加

データ・コントロール構造ファイルには、基礎となる表内の列にマップされる属性のみでなく、計算された値を表示する一時属性を組み込むことができます。

たとえば、FullNameなどの作成した一時属性は、FirstName属性の値とLastName属性の値を連結した値に基づいて計算できます。

一時属性を作成すると、属性定義でGroovy式を使用してデフォルト値を指定できます。

7.4.1 一時属性の追加方法

一時属性を作成するには、概要エディタの「属性」ページを使用します。

始める前に:

一時属性および計算属性の知識があると役立ちます。詳細は、「データ・オブジェクトへの一時属性の追加」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

データ・オブジェクトのデータ・コントロール構造ファイルに一時属性を追加する手順は次のとおりです。

1. 「アプリケーション」ウィンドウで、データ・オブジェクトのデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックし、「新規属性の作成」アイコンをクリックします。

3. 「新規ビュー属性」ダイアログで、属性の名前を入力し、「OK」をクリックします。

4. 概要エディタの「属性」ページで、「詳細」タブをクリックし、「タイプ」ドロップダウン・リストからオブジェクト・タイプを選択します。

5. オプションで、「デフォルト値」セクションでデフォルト値を設定するか、デフォルト値を計算する式を入力します。

デフォルト値を計算する式の設定方法は、「Groovy式を使用したデフォルト値の定義方法」を参照してください。

6. 値を式によって計算する場合、「更新可能」を「なし」に設定します。

7.4.2 一時属性の追加時の処理

一時属性を追加すると、JDeveloperによって<ViewAttribute>タグがデータ・オブジェクトのデータ・コントロール構造ファイルに追加され、新しい属性が反映されます。次の例は、LineItemTotalという一時属性のXMLコードを示します。これはpriceおよびquantity属性の値を乗算する式を基礎としています。

<ViewAttribute
Name="LineItemTotal"
IsUpdateable="false"
IsSelected="false"
IsPersistent="false"
PrecisionRule="true"
Type="java.lang.String"
ColumnType="$none$">
SQLType="VARCHAR">
<RecalcCondition><![CDATA[true]]></RecalcCondition>
<TransientExpression><![CDATA[price * quantity]]></TransientExpression>
<Dependencies>
<Item
Value="price"/>
<Item
Value="quantity"/>
</Dependencies>
</ViewAttribute>

7.5 属性への検証ルールの宣言的な定義

検証ルールを作成および管理する最も容易な方法は、宣言的検証ルールを使用することです。宣言的検証ルールは概要エディタを使用して定義され、いったん作成されると、データ・オブジェクトのデータ・コントロール構造ファイルに保存されます。ビジネス・ロジックをこのようにカプセル化することにより、ビジネス情報にアクセスするすべてのクライアントで情報が一貫して検証され、検証の保管先を集中化することによって管理が容易になります。

Oracle ADFでは、一般的なビジネス上のニーズの多くを満たすことができる組込みの宣言的な検証ルールが用意されています。「検証ルールでのGroovy式の使用方法」で説明されているように、Groovy式を検証の基礎にすることもできます。

検証ルールを追加する際、適切なエラー・メッセージを提供し、後に必要に応じて容易に他の言語に翻訳できます。また、重大度レベルも設定できます。

アプリケーションがビジネス・レイヤー検証に加えてページ・レベルでの検証も使用する必要がある場合は、データ・オブジェクトで利用できる宣言的検証機能の多くをページ定義レベルでも利用できます。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFモデル・レイヤーでの検証の使用」の章を参照してください。

注意:

カスタム検証クラスを実装することによって検証ルールを追加することもできます。アプリケーションで複数回使用する必要のある複雑なパラメータ化された検証ルール(クレジット・カードの番号のチェックなど)を定義する必要がある場合、この方法が特に便利です。詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のカスタム検証規則の実装に関する項を参照してください。

7.5.1 属性への検証ルールの追加方法

データ・オブジェクトに検証規則を追加する手順は、ほとんどの検証規則と同じで、「検証ルールの追加」ダイアログを使用します。このダイアログを開くには、データ・オブジェクトのデータ・コントロール構造ファイルを開き、「属性」ページで属性を選択し、「検証ルール」タブをクリックして「追加」アイコンをクリックします。

「検証ルールの追加」ダイアログを使用してルールを宣言的に定義すると、そのルール定義が属性の有効な条件を指定することに注意する必要があります。実行時に、ユーザーが入力したエントリがルール定義に対して評価され、エントリが指定された基準を満たさない場合、エラーまたは警告が発せられます。たとえば、12より小さいか等しい必要のある属性に対して長さのバリデータを指定した場合、エントリが12文字よりも長いと検証が失敗し、エラーまたは警告が発行されます。

データ・コントロール構造ファイルに宣言的検証ルールを追加するには、データ・オブジェクトの概要エディタの「属性」ページを使用します。

始める前に:

データ・コントロール構造ファイルにおける検証ルールの使用に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

検証規則を追加するには:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証ルールを追加する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、「検証ルールの追加」アイコンをクリックします。

5. 「検証ルールの追加」ダイアログで、「ルール・タイプ」ドロップダウン・リストから、目的の検証ルールのタイプを選択します。

選択に応じて下位のフィールドは変わります。

6. ダイアログの設定を使用して新しい規則を構成します。

様々な検証ルールの詳細は、「組込みの宣言的検証ルールの使用方法」を参照してください。

7. 「失敗処理」タブをクリックして、検証規則が失敗した場合にユーザーに対して表示されるエラー・メッセージを入力または選択します。詳細は、「検証エラー・メッセージの作成方法」を参照してください。

8. 「OK」をクリックします。

7.5.2 検証規則の追加時の処理

データ・オブジェクトに検証ルールを追加すると、データ・オブジェクトのデータ・コントロール構造ファイルが更新され、使用したルールと入力したルールのプロパティを示すエントリが含まれます。

次の例に示すように、たとえば、dateShipped属性に、出荷日がdateOrdered属性よりも前ではないことを確認する比較検証ルールを追加すると、XMLファイルに<validation:CompareValidationBean>エントリが作成されます。

<validation:CompareValidationBean
Name="dateShipped_Rule_0"
ResId="${adfBundle['model.ModelBundle']['model.Ord.dateShipped_Rule_0']}"
OnAttribute="dateShipped"
OperandType="EXPR"
Inverse="false"
CompareType="GREATERTHANEQUALTO">
<validation:TransientExpression><![CDATA[dateOrdered]]>
</validation:TransientExpression>
</validation:CompareValidationBean>

7.5.3 組込みの宣言的な検証ルールの使用方法

組込みの宣言的な検証規則は、大部分のビジネス上のニーズを満たすことができます。このような規則は、コードの記述がないため実装が簡単です。検証のタイプとその使用方法を選択するには、ユーザー・インタフェース・ツールを使用します。

組込みの宣言的な検証規則を使用すると、次のことが可能です。

- 属性とリテラル値または式を比較します。

- 手動で指定した値リストに対する検証を行います。

- 値が一定の範囲内にあること、または特定のバイト数または文字数に制限されていることを確認します。

- 正規表現による検証、またはGroovy式の評価を行います。

7.5.3.1 比較に基づいた検証

Compare Validatorは、属性と値の論理比較を実行します。比較バリデータの追加時に、演算子および比較対象を指定します。次のものを比較できます。

- リテラル値
比較バリデータでリテラル値を使用すると、属性の値は指定したリテラル値と比較されます。この種類の比較を使用する場合は、データの型と書式を考慮することが重要です。リテラル値は、ルールを適用する属性のデータ型で指定した書式に準拠する必要があります。すべての場合において、型は属性のタイプ・マッピングに対応します。

たとえば、列タイプDATEの属性はoracle.jbo.domain.Dateクラスにマッピングされますが、これはjava.sql.TimeStampおよびjava.sql.Dateによって受け入れられるのと同じ書式で日付と時間を受け入れます。書式マスクを使用することにより、属性の値の書式が指定されたリテラルに一致するよう指定できます。

- 式
式のオプションについては、「検証ルールでのGroovy式の使用方法」を参照してください。

始める前に:

データ・コントロール構造ファイルにおける検証ルールの使用に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

比較に基づいて検証するには:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証ルールを追加する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、「検証ルールの追加」アイコンをクリックします。

5. 「検証ルールの追加」ダイアログの「ルール・タイプ」ドロップダウン・リストで「比較」を選択します。

6. 適切な演算子を選択します。

7. 「比較」リストで項目を選択し、選択項目に基づいて適切な比較値を指定します。

8. 「失敗処理」タブをクリックして、検証規則が失敗した場合にユーザーに対して表示されるエラー・メッセージを入力または選択します。詳細は、「検証エラー・メッセージの作成方法」を参照してください。

9. 「OK」をクリックします。

7.5.3.2 比較に基づく検証時の処理

Compare Validatorを作成すると、<validation:CompareValidationBean>タグがデータ・オブジェクトのデータ・コントロール構造ファイルに追加されます。

「検証規則の追加時の処理」の例は、dateShipped属性に対するバリデータのXMLコードを示しています。

7.5.3.3 値リストを使用した検証

List Validatorにより、ユーザーが手動で指定した値リストと属性が比較されます。バリデータは、データ・オブジェクト属性の値がそのリスト内(指定された場合はリスト外)にあることを確認します。

始める前に:

データ・コントロール構造ファイルにおける検証ルールの使用に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

値リストを使用して検証するには:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証ルールを追加する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、「検証ルールの追加」アイコンをクリックします。

5. 「検証ルールの追加」ダイアログの「ルール・タイプ」ドロップダウン・リストで「リスト」を選択します。

6. 「演算子」フィールドで、包含的リストか排他的リストかに応じて「In」または「NotIn」を選択します。

7. 「値リストの入力」セクションで、値を1行に1つずつ入力します。

8. 「失敗処理」タブをクリックして、検証規則が失敗した場合にユーザーに対して表示されるエラー・メッセージを入力または選択します。詳細は、「検証エラー・メッセージの作成方法」を参照してください。

9. 「OK」をクリックします。

7.5.3.4 リスト値を使用した検証時の処理

値リストを使用して検証すると、<validation:ListValidationBean>タグがデータ・オブジェクトのデータ・コントロール構造ファイルに追加されます。

7.5.3.5 値が特定の範囲内にあることの確認

Range Validatorは、属性と値の範囲の論理比較を実行します。範囲バリデータの追加時に、最小および最大のリテラル値を指定します。Range Validatorは、属性の値が範囲内(指定された場合は、範囲外)にあることを検証します。

最小および最大値を動的に算出する必要がある場合や、他の属性を参照する必要がある場合は、Script Expression Validatorを使用し、Groovy式を指定します。詳細は、「Groovy式でのADFオブジェクトの参照方法」を参照してください。

始める前に:

データ・コントロール構造ファイルにおける検証ルールの使用に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

特定の範囲内を検証するには:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証ルールを追加する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、「検証ルールの追加」アイコンをクリックします。

5. 「検証ルールの追加」ダイアログの「ルール・タイプ」ドロップダウン・リストで「範囲」を選択します。

6. 「演算子」フィールドで、「Between」または「NotBetween」を選択します。

7. 「最小値」および「最大値」フィールドに適切な値を入力します。

8. 「失敗処理」タブをクリックして、検証規則が失敗した場合にユーザーに対して表示されるエラー・メッセージを入力または選択します。詳細は、「検証エラー・メッセージの作成方法」を参照してください。

9. 「OK」をクリックします。

7.5.3.6 範囲バリデータの使用時の処理

範囲に対して検証すると、<validation:RangeValidationBean>タグがデータ・コントロール構造ファイルに追加されます。

次の例は、最小値が0で最大値が10のquantity属性を示します。

<PDefAttribute
Name="quantity">
<validation:RangeValidationBean
Name="quantity_Rule_0"
ResId="${adfBundle['model.ModelBundle']['QUANTITY_VALIDATOR']}"
OnAttribute="quantity"
OperandType="LITERAL"
Inverse="false"
MinValue="0"
MaxValue="10"/>
. . .
</PDefAttribute>

7.5.3.7 バイトまたは文字数に対する検証

長さバリデータは、属性値の文字列長(文字またはバイト)が、指定した数より小さい、等しい、それより大きい、またはその範囲内かどうかを検証します。たとえば、ユーザーがパスワードまたはPINを入力するフィールドがあり、それが6文字以上、10文字以下であることを検証する必要があるとします。

始める前に:

データ・コントロール構造ファイルにおける検証ルールの使用に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

バイトまたは文字数を検証するには:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証ルールを追加する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、「検証ルールの追加」アイコンをクリックします。

5. 「検証ルールの追加」ダイアログの「ルール・タイプ」ドロップダウン・リストで「長さ」を選択します。

6. 「演算子」フィールドで、値を評価する方法を選択します。

7. 「比較タイプ」フィールドで、「バイト」または「文字」を選択し、「値」フィールドに長さを入力します。

8. 「失敗処理」タブをクリックして、検証規則が失敗した場合にユーザーに対して表示されるエラー・メッセージを入力または選択します。詳細は、「検証エラー・メッセージの作成方法」を参照してください。

9. 「OK」をクリックします。

7.5.3.8 バイトまたは文字数に対する検証時の処理

長さを使用して検証すると、<validation:LengthValidationBean>タグがデータ・コントロール構造ファイルに追加されます。次の例は、最小値6、最大値10を指定したBetween演算子を示しています。

<validation:LengthValidationBean
OnAttribute="pin"
CompareType="BETWEEN"
DataType="CHARACTER"
MinValue="6"
MaxValue="10"
Inverse="false"/>

7.5.3.9 正規表現を使用した検証

正規表現バリデータは、Java正規表現によって指定されたマスクに対して属性値を比較します。

メタデータでパーソナライズできる式を作成する場合は、Script Expression Validatorを使用できます。詳細は、「検証ルールでのGroovy式の使用方法」を参照してください。

始める前に:

データ・コントロール構造ファイルにおける検証ルールの使用に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

正規表現を使用して検証する手順:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証ルールを追加する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、「検証ルールの追加」アイコンをクリックします。

5. 「検証ルールの追加」ダイアログの「ルール・タイプ」ドロップダウン・リストで「正規表現」を選択します。

6. 「演算子」フィールドで、「一致」または「不一致」を選択します。

7. 事前定義された式(ある場合)を使用するには、ドロップダウン・リストから選択して「パターンの使用」をクリックします。事前定義された式を使用しない場合は、表示されているフィールドに独自の正規表現を記述します。

8. 「失敗処理」タブをクリックして、検証規則が失敗した場合にユーザーに対して表示されるエラー・メッセージを入力または選択します。詳細は、「検証エラー・メッセージの作成方法」を参照してください。

9. 「OK」をクリックします。

図7-4は、Regular Expression Validatorを選択して、Email属性が事前定義されたEmail Address式に一致することを検証する場合のダイアログを示しています。

図7-4 電子メール・アドレスを照合するRegular Expression Validator

7.5.3.10 正規表現を使用した検証時の処理

正規表現を使用して検証すると、<RegExpValidationBean>タグがデータ・コントロール構造ファイルに追加されます。次の例は、正規表現に一致する必要のあるEmail属性を示しています。

<validation:RegExpValidationBean
Name="Email_Rule_0"
OnAttribute="Email"
Pattern="[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,4}"
Flags="CaseInsensitive"
Inverse="false"/>

7.5.4 検証ルールでのGroovy式の使用方法

Groovy式は、データ・コントロール構造ファイルに格納されている、Javaのようなスクリプト・コードです。実行時でも値の変更や指定ができます。

検証ルールの作成の詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

ビジネス・ロジックでのGroovy式使用の詳細は、「Groovy言語サポート」を参照してください。

7.5.4.1 Groovy式を使用した検証

Groovy式を使用してtrue/false文を返すことができます。スクリプト式バリデータでは、必ず式がtrueまたはfalseを返す必要があり、そうでなければadf.error.raise/warn()メソッドがコールされます。この機能の一般的な用途は、属性値の検証です(アカウント番号が有効であるかの確認など)。

注意:

adf.error.raise()およびadf.error.warn()メソッドを使用することにより(単純にtrueまたはfalseを返すかわりに)、ユーザーに表示するメッセージ・テキストを定義でき、バリデータを特定の属性に関連付けることができます。詳細は、「Groovyを使用した条件付きでのエラー・メッセージの呼出し」を参照してください。

始める前に:

データ・コントロール構造ファイルにおける検証に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

また、検証ルールでのGroovyの使用方法を理解していると役立ちます。詳細は、「検証ルールでのGroovy式の使用方法」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

true/false式を使用して検証するには:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証ルールを追加する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、「検証ルールの追加」アイコンをクリックします。

5. 「検証ルールの追加」ダイアログの「ルール・タイプ」ドロップダウン・リストで「スクリプト式」を選択します。

6. 表示されているフィールドに検証式を入力します。

7. 「失敗処理」タブをクリックして、検証規則が失敗した場合にユーザーに対して表示されるエラー・メッセージを入力または選択します。詳細は、「検証エラー・メッセージの作成方法」を参照してください。

8. 「OK」をクリックします。

7.5.4.2 Groovy式に基づいて検証を行うときの処理内容

Groovy式を作成すると、データ・オブジェクトのデータ・コントロール構造ファイルに保存されます。Groovy式は、<TransientExpression>タグによってラップされます。一部のGroovy式では、<TransientExpression>タグは、<validation:ExpressionValidationBean>タグによってもラップされます。

7.5.4.3 Groovy検証式でのデータ・オブジェクト・メソッドの参照

現在のオブジェクトのadf.source.dataProviderプロパティを使用すると、データ・オブジェクトに対してメソッドをコールできます。adf.source.dataProviderプロパティでは、検証対象のデータ・オブジェクトにアクセスできます。

メソッドがブール型以外で、メソッド名が引数なしのgetXyzAbc()の場合、XyzAbcという名前のプロパティのようにその値にアクセスします。たとえば、次のGroovy式により、getXyzAbc()メソッドがコールされます。

adf.source.dataProvider.XyzAbc

ブール・プロパティの場合は、同じ条件が当てはまりますが、JavaBeansコンポーネントのgetterメソッドの命名パターンが変更され、getXyzAbc()ではなくisXyzAbc()を再認識します。データ・オブジェクトのメソッドがJavaBeansのgetterメソッドの命名パターンに一致しない場合や、1つ以上の引数を使用する場合は、完全名を使用したメソッドのようにコールする必要があります。

7.5.5 検証エラー・メッセージの作成方法

検証エラー・メッセージはユーザーにとって重要な情報であり、メッセージは不具合やその修正方法を伝達する必要があります。

7.5.5.1 検証エラー・メッセージの作成

始める前に:

データ・コントロール構造ファイルにおける検証ルールの使用に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

検証エラー・メッセージを作成するには:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証エラー・メッセージを作成する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、編集する検証ルールを選択し、「検証ルールの編集」アイコンをクリックします。

5. 「検証規則の編集」ダイアログで、「失敗処理」タブをクリックします。

6. 「メッセージ・テキスト」フィールドで、エラー・メッセージを入力します。

メッセージ・バンドル・ファイルにエラー・メッセージを定義することもできます。定義済のエラー・メッセージを選択する場合や、メッセージ・バンドル・ファイルに新しいエラー・メッセージを定義する場合は、「メッセージ・テキスト」フィールドの右上隅にある「メッセージの選択」アイコンをクリックして、「テキスト・リソースの選択」ダイアログを開きます。

注意:

Script Expression Validatorでは、複数のエラー・メッセージを入力できます。これは、条件によって異なるエラーメッセージや警告メッセージを検証スクリプトで戻す場合に便利です。詳細は、「Groovyを使用した条件付きでのエラー・メッセージの呼出し」を参照してください。

7. オプションで、メッセージ・トークンを定義するには、メッセージ・トークン名をエラー・メッセージのテキスト内に中カッコ({})で囲んで入力します。トークンのエントリが「トークン・メッセージ式」リストに表示され、メッセージ・トークンの値を決定するための式をここで定義できます。

図7-5は、メッセージ・トークンが含まれている、データ・コントロール構造ファイルの検証ルールに対する失敗メッセージを示しています。この機能の詳細は、「エラー・メッセージへのGroovy式の埋込み」を参照してください。

8. 「OK」をクリックします。

図7-5 検証ルールの失敗処理メッセージ

7.5.5.2 検証エラー・メッセージを作成するときの処理内容

検証ルールのエラー・メッセージを作成する際に、メッセージは.propertiesファイルに保存されます。.propertiesファイルとメッセージ文字列は、データ・コントロール構造ファイル内でバリデータのタグのResIdタグ属性から参照されます。

次の例は、エラー・メッセージの場所とキーを指定する検証ルール・タグのResId属性を示しています。

<validation:CompareValidationBean
Name="dateShipped_Rule_0"
ResId="${adfBundle['model.ModelBundle']['model.Ord.dateShipped_Rule_0']}"

次の例は、エラー・メッセージを含む.propertiesファイルの対応するエントリを示しています。

model.Ord.dateShipped_Rule_0=Date Shipped cannot be before Date Ordered

7.5.5.3 検証メッセージのローカライズ

エラー・メッセージは翻訳可能文字列であり、メッセージ・バンドル・ファイルの翻訳可能UIヒントと同じように管理されます。メッセージ・バンドル・クラス内の定義済ルールのエラー・メッセージを表示するには、そのバリデータに関するデータ・コントロール構造ファイルのエントリのResIdプロパティに対応するメッセージ・バンドルのキーを探します。

7.5.5.4 Groovyを使用した条件付きでのエラー・メッセージの呼出し

adf.error.raise()およびadf.error.warn()メソッドを使用して、Groovy式の分岐に応じて様々なエラー・メッセージを条件付きで呼び出すことができます。

式でfalseが戻される(raise()メソッドを使用して特定のエラー・メッセージが呼び出されるのに対して)場合、バリデータは、そのバリデータに関連付けられた最初のエラー・メッセージをコールします。

raise()メソッドの構文は必須パラメータを1つ(メッセージ・バンドルから使用するためのmsgId)利用し、オプションでattrNameパラメータを利用することができます。

例外をスローするか、処理を継続するかに応じて、adf.error.raise()およびadf.error.warn()のいずれのメソッドも使用できます(「検証例外の重大度レベルの設定方法」を参照)。

次の例は、5000以下の値の入力を許可するルールを示しています。値が5000を超える場合は、SALARY_TOO_HIGH_ERRORリソース・バンドル・プロパティに関連したエラー・メッセージが表示され、検証は失敗します。入力された値が1001と5000の間にある場合、検証は正常に終了しますが、ユーザーに警告が表示されます。

if (newValue > 1000)
{
if (newValue > 5000)
{adf.error.raise("SALARY_TOO_HIGH_ERROR")
return false}
adf.error.warn("SALARY_LIMIT_WARNING")
return true
}
else
{
return true
}

7.5.5.5 エラー・メッセージへのGroovy式の埋込み

バリデータのエラー・メッセージには、実行時にサーバーによって解決できる埋込み式を含めることができます。この機能にアクセスするには、Groovy式の結果を表示させるエラー・メッセージ・テキストに名前付きトークン{#}({2}や{errorParam}など)を入力するのみです。

「検証規則の編集」ダイアログの「失敗処理」タブで、エラー・メッセージのテキストにトークンを入力すると、ダイアログの下部の「トークン・メッセージ式」表で行が表示され、トークンのGroovy式を入力できます。図7-5は、メッセージ・トークンが含まれている検証ルールに対する失敗メッセージを示しています。

図7-5に示された式は、quantity属性の値を返すGroovy式です。また、Groovy式を使用して、データ・コントロール構造ファイルで定義されている属性のUIヒントやその他のオブジェクトにアクセスできます。

Groovy式newValueを使用して入力された値を返すことができます。

Groovyを使用してADFオブジェクトにアクセスする方法の詳細は、「Groovy言語サポート」を参照してください。

7.5.6 検証例外の重大度レベルの設定方法

検証例外の重大度レベルを、「情報警告」または「エラー」のいずれかに設定できます。重大度レベルを「情報警告」に設定すると、エラー・メッセージが表示されますが、処理は継続します。検証レベルを「エラー」に設定すると、エラーが修正されるまでユーザーは処理を続行できません。

通常、検証例外には「エラー」レベルを使用するため、これがデフォルト設定です。ただし、ユーザーが特定の機密取扱い資格を持っている場合は、情報警告メッセージを実装できます。たとえば、店長は事務員が同じことをした場合に、エラーとして表示されるように変更できます。

検証例外の重大度レベルを設定するには、「検証ルールの追加」ダイアログの「失敗処理」タブを使用します。

始める前に:

データ・コントロール構造ファイルにおける検証ルールの使用に関する知識があると役立ちます。詳細は、「属性への検証ルールの宣言的な定義」を参照してください。

「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成する必要があります。

検証例外の重大度レベルを設定するには:

1. 「アプリケーション」ウィンドウで、使用するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「属性」ナビゲーション・タブをクリックします。

3. 「属性」ページで検証エラー・メッセージを作成する属性を選択し、「検証ルール」タブをクリックします。

4. 「検証ルール」ページで、編集する検証ルールを選択し、「検証ルールの編集」アイコンをクリックします。

5. 「検証ルールの編集」ダイアログで、「失敗処理」タブをクリックし、「エラー」または「情報警告」のいずれかのオプションを選択します。

6. 「OK」をクリックします。

7.6 名前付き基準を使用した結果セットのフィルタリング

JDeveloperでは、JPAベースのデータ・コントロールを対象に、データ・コントロール構造ファイルに関する名前付き基準を作成できます。名前付き基準は、アプリケーションのデータ・モデルで使用し、検索フォームのシードされた問合せとしてユーザーに公開できます。

名前付き基準を指定して、表示する結果をフィルタリングできます。名前付き基準オブジェクトは1つ以上の名前付き基準行の行セットであり、この属性によって対応するデータ・オブジェクト内の属性がミラーリングされます。名前付き基準の定義には、SQL問合せのWHERE句のように機能する問合せ条件が含まれています。

名前付き基準の結果セットでは、各属性のデータ型はStringであるため、Query-by-Example演算子を使用できます。たとえば、これによってユーザーは"OrderId > 304"のような条件を入力できます。

特定のデータ・コントロール構造ファイルに対して名前付き基準を定義するには、概要エディタの「名前付き基準」ページを使用します。

7.6.1 名前付き基準の用途

個々のアクセッサ結果をフィルタリングする必要がある場合、名前付き基準定義を作成します。デザインタイムで定義した名前付き基準は、ターゲット・データ・コントロール構造ファイルの属性の値をエンド・ユーザーが指定できるような、Query-by-Exampleの検索フォームを簡単に作成する際に使用できます。

たとえば、エンド・ユーザーが顧客名の値および日付を入力することによって、CustomerOrdersコレクションの行が表示されるWebページで結果をフィルタリングできるようにする場合について考えてみましょう。この要件を満たすために、Webページ・デザイナはこの目的に合せて作成された名前付き基準に基づく検索フォームを容易に作成でき、「データ・コントロール」パネルで使用可能にすることができます。「データ・コントロール」パネルでの名前付き基準の使用の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFによるデータバインドされた検索フォームの作成」を参照してください。

7.6.2 名前付き基準を宣言的に作成する方法

JPAベースのデータ・コントロール構造ファイル用の名前付き基準を定義するには、概要エディタでデータ・コントロール構造ファイルを開き、「名前付き基準」ページを使用します。「名前付き基準」ページから開く専用エディタで、属性名(SQL列名ではなく)を使用してWHERE句に相当するものを作成できます。名前付き基準は、1つのデータ・オブジェクトに対して複数定義できます。

名前付き基準の定義はそれぞれ、次の要素で構成されています。

- 1つ以上の名前付き基準行。名前付き基準行は、任意の数の名前付き基準グループ、または現在のデータ・コントロール構造ファイルに対して定義されている別の名前付き基準への任意の数の参照で構成されます。

- 任意の数の名前付き基準アイテムで構成される、オプションの名前付き基準グループ。

- 属性名、属性に適した演算子、およびオペランドで構成される名前付き基準アイテム。オペランドには、フィルタの値が定義されている場合はリテラル値か、または、属性のプロパティ値へのドット表記アクセスを含むスクリプト式がオプションで利用可能なバインド変数を使用できます。
式の記述には、Groovyスクリプト言語を使用します(「Groovy言語サポート」を参照)。

「ビュー基準の編集」ダイアログで作成する名前付き基準の式では、論理積により、選択した基準アイテム(または基準グループ)とその前にあるアイテム(またはグループ)を式の中でどのように結合するかを指定できます。

- AND結合を使用すると、結合した条件のどちらにも一致する問合せ結果が得られます。それぞれの名前付き基準アイテムを追加する場合は、これがデフォルトになります。

- OR結合を使用すると、結合した条件の少なくとも一方に一致する問合せ結果が得られます。名前付き基準グループに対しては、これがデフォルトになります。

さらに、様々な名前付き基準アイテム間の論理積をより制御するために、ネストされた名前付き基準を作成できます。ネストされた名前付き基準グループは、任意の数のネストされた名前付き基準アイテムで構成されます。ネストされた基準では、その親名前付き基準グループの中で基準を満たしている行が制限されます。たとえば、給与がSalary > 3000という基準を満たし、かつ所属部署がDeptNo = 10またはDeptNo = 20という基準を満たしている従業員のリストを問い合せる場合があります。この場合、1つの項目Salary > 3000を含む第1のグループを使用して名前付き基準と、2つの項目DeptNo = 10およびDeptNo =20を含む第2のグループを使用してネストされた名前付き基準を定義できます。

始める前に:

名前付き基準の知識があると役立ちます。詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

次のタスクを完了する必要があります。

- 「EJBデータ・コントロールを作成する方法」の説明に従ってEJBデータ・コントロールを作成するか、「JPAベースのBeanデータ・コントロールを作成する方法」の説明に従ってJPAベースのBeanデータ・コントロールを作成し、ウィザードでデータ・コントロールを作成する際に「名前付き基準のサポート」チェック・ボックスを選択します。

- 「データ・コントロールの編集方法」の説明に従って、必要なデータ・コントロール構造ファイルを作成します。

名前付き基準を定義する手順:

1. 「アプリケーション」ウィンドウで、名前付き基準を作成するデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「名前付き基準」ナビゲーション・タブをクリックします。

3. 「名前付き基準」ページで、「名前付き基準」セクションを展開して「新規ビュー基準の作成」ボタンをクリックします。

4. 「名前付き基準の作成」ダイアログに、アプリケーション内での用途を示す名前付き基準の名前を入力します。

5. 名前付き基準を定義するには、次のいずれかの「追加」ボタンをクリックします。

- 単一の基準アイテムを追加するには、「アイテムの追加」を選択します。エディタによって、現在のグループまたは選択した名前付き基準の下の階層にアイテムが追加されます。デフォルトでは、アイテムを追加するたびに、エディタによって次の属性が選択され、基準アイテムが定義されます。属性は、データ・コントロール構造ファイルが定義する任意の属性に変更できます。

- 新しいグループを追加して、構成する基準アイテムをそのグループに追加するには、「グループの追加」を選択します。新しいグループを追加すると、エディタによって階層にOR結合が挿入されます。この結合は必要に応じて変更できます。

- 定義する名前付き基準を追加するには、「基準の追加」を選択します。この選択肢は、データ・コントロール構造ファイルにすでに存在する名前付き基準を追加する場合の代替の方法となります。新しい名前付き基準を追加すると、エディタによって階層にAND結合が挿入されます。この結合は必要に応じて変更できます。別の名前付き基準を追加するたびに、階層で現在選択している名前付き基準の下に新しい名前付き基準がエディタによってネストされます。階層のルート・ノードでは、現在編集中の名前付き基準が定義されます。

- データ・コントロール構造ファイルですでに定義されている名前付き基準を追加するには、「名前付き基準の追加」を選択します。

注意:

名前付き基準からUIデザイナによって作成される検索フォームでは、別の名前付き基準が含まれている名前付き基準を使用できません。

6. 「名前付き基準」ツリーで名前付き基準アイテム・ノードを選択し、追加したノードを「基準アイテム」セクションで定義します。

7. 基準アイテムで、必要な「属性」を選択します。デフォルトでは、リストの最初のノードがエディタによって追加されます。

8. 必要な「演算子」を選択します。

リストには、選択した属性に適合する演算子のみが表示されます。String型およびDate型属性の場合、「次の間にある」および「次の間にない」演算子では、範囲を定義するために2つのオペランド値を指定する必要があります。Date型属性の場合、日付または日付の範囲をテストする演算子を選択できます(YYYY-MM-DDの書式で入力された日付値について)。たとえば、2010年12月16日の場合、2010-12-16と入力します。

9. 選択した名前付き基準アイテムで、必要な「オペランド」を選択します。

- 属性に値を指定したり、Query-by-Example検索フォームに対するユーザー指定の検索フィールドにデフォルト値を定義する場合は、「リテラル」を選択します。名前付き基準でユーザー・インタフェースの問合せ検索フォームを定義する場合は、「値」フィールドが空のままでも構いません。この場合は、ユーザーが値を指定します。検索フィールドのデフォルト値として機能する値を指定して、ユーザーがオーバーライドできるようにすることもできます。「値」フィールドに指定した値には、ワイルドカード文字の*または%を含めることができます。

- バインド変数を使用して実行時に値を決定する場合は、「バインド変数」を選択します。「新規」をクリックして「バインド変数」ダイアログを表示し、そこでデータ・コントロール構造ファイルに対するバインド変数を新規に作成します。バインド変数の作成の詳細は、「名前付き基準でのバインド変数の使用方法」を参照してください。

10. 定義する各アイテム、グループまたはネストされた名前付き基準に対して、必要に応じてデフォルト設定の論理積を変更し、アイテムの結合方法を指定します。

- ANDを使用すると、結合した条件のどちらにも一致する問合せ結果が得られます。それぞれの名前付き基準アイテムまたはネストされた名前付き基準を追加する場合は、この結合がデフォルトになります。

- ORを使用すると、結合した条件の少なくとも一方に一致する問合せ結果が得られます。名前付き基準グループに対しては、これがデフォルトになります。

11. オプションで、実行時に指定された値の大/小文字に基づいてフィルタリングする場合は、「大/小文字を区別しない」オプションの選択を解除します。デフォルトでは選択されており、このようなフィルタリングはされません。

基準アイテムには、定義したリテラル値またはエンド・ユーザーが入力するランタイム・パラメータを使用できます。このオプションは、String型の属性に対してのみサポートされています。デフォルトでは、大/小文字の区別のある検索は使用できません。

12. 「検証」ドロップダウン・リストで、生成されたWHERE句での属性値の比較において、名前付き基準アイテムを必須とするかオプションとするかを決定します。

- 「選択的に必須」を選択すると、名前付き基準アイテムに基準値が入力されず、かつ基準値を持つ基準アイテムが同じレベルに少なくとも1つ存在する場合、生成されるWHERE句では実行時にその名前付き基準アイテムが無視されます。それ以外の場合は、例外がスローされます。

- 「オプション」を選択すると、値がNULLでない名前付き基準のみWHERE句に追加されます。新規の各名前付き基準アイテムに対してデフォルトの「オプション」を選択すると、NULL値に対しても例外は生成されません。

- 「必須」を選択すると、基準アイテムに値が入力されなかった場合は、WHERE句が実行されず例外がスローされます。

13. 名前付き基準でオペランドとしてバインド変数を使用する場合、IS NULL条件がWHERE句で生成されるかどうかを決定します。バインド変数の検証に「オプション」を選択した場合のみ、このフィールドが有効になります。

- 実行時にバインド変数値が入力されていない場合でも名前付き基準が結果を返すようにする場合、「Null値の無視」を選択したままにしておきます(デフォルト)。検証が「必須」またはオプションで必須に設定されている場合、名前付き基準は値を必要とし、このnull値を無視するオプションは無効になります。
たとえば、ユーザー検索フォームで使用されるバインド変数に対してこのオプションを選択したままにしておくと、そのバインド変数を持つフィールドに値を入力しなくても検索の結果が表示されます。

- 実行時にバインド変数値が入力されていない場合に名前付き基準がnullの結果を返すようにする場合、「Null値の無視」の選択を解除します。
検証の設定が「必須」またはオプションで必須の場合、null値の条件も削除されますが、別の使用方法をサポートします。必要な実行時の動作を実現するために、「Null値の無視」機能と組み合せて使用する必要があります。

14. 「OK」をクリックして名前付き基準を作成し、概要エディタに戻ります。

7.6.3 名前付き基準の作成時の処理

名前付き基準を作成すると、名前付き基準定義がデータ・コントロール構造ファイルに追加され、概要エディタの「名前付き基準」ページに名前が表示されます。

名前付き基準のXMLコードを表示するには、データ・コントロール構造ファイルのソース・エディタを開きます。それぞれの名前付き基準定義には、「名前付き基準の作成」ダイアログで定義したグループの数に対応する、1つ以上の<ViewCriteriaRow>要素が含まれます。

7.6.4 名前付き基準でのバインド変数の使用方法

バインド変数を使用すると、実行時に計算される属性値を名前付き基準に組み込むことができます。

シードされた検索で名前付き基準を使用する場合は、エンド・ユーザーがバインド変数を更新できるようにすることができます。この更新可能オプションを使用する場合、エンド・ユーザーは検索フォームに値を入力する必要があります。

バインド変数が割り当てられている名前付き基準アイテムが必須でない場合、名前付き基準の実行ではバインド変数値を必要としません。この動作を強制する場合、「バインド変数」ダイアログでバインド変数が必須かどうかを指定できます。

バインド変数に対しては、デフォルト値を定義するか、属性プロパティ値へのドット表記法によるアクセスが可能なスクリプト式を記述できます。式の記述には、Groovyスクリプト言語を使用します(「Groovy言語サポート」を参照)。

名前付きバインド変数を名前付き基準に追加する場合は、データ・コントロール構造ファイルの概要エディタにある「名前付き基準」ページを使用します。必要な数のバインド変数を定義できます。

始める前に:

名前付き基準の知識があると役立ちます。詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

次のタスクを完了する必要があります。

- 「名前付き基準を宣言的に作成する方法」の説明に従って、名前付き基準を作成します。

名前付きバインド変数を作成する手順:

1. 「アプリケーション」ウィンドウで、データ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「名前付き基準」ナビゲーション・タブをクリックします。

3. 「名前付き基準」ページで、「バインド変数」セクションを展開して「新規バインド変数の作成」ボタンをクリックします。

4. 「新規変数」ダイアログで、新しいバインド変数の名前およびデータ型を入力します。

バインド変数はデータ・コントロール構造ファイル属性と同じネームスペースを共有するため、既存の属性名と競合しない名前を指定します。

5. 必要に応じて、バインド変数のデフォルト値を指定します。

- 実行時に式から値が決定されるようにするには、Groovyスクリプト言語の式を入力し、値タイプ「式」を選択して、「デフォルト値」フィールドに式を入力します。

- デフォルト値を定義する場合は、値のタイプ「リテラル」を選択し、「デフォルト値」フィールドにリテラル値を入力します。

6. オプションで、「UIヒント」タブをクリックし、「ラベル・テキスト」、「フォーマットの種類」、「フォーマット」マスクなどのヒントを指定します。

名前付きバインド変数の値を入力できる検索ページなどのユーザー・インタフェースを作成する場合、ビュー・レイヤーではバインド変数のコントロール・ヒントが使用されます。「更新可能」オプションでは、エンド・ユーザーがユーザー・インタフェースを使用してバインド変数の値を変更できるようになるかどうかを制御します。バインド変数が更新可能でない場合、その値は開発者のみがプログラムで変更できます。

7. 「OK」をクリックします。

7.6.5 名前付き基準でのバインド変数使用時の処理

1つ以上の名前付きバインド変数をデータ・コントロール構造ファイルに追加すると、実行時にこれらの変数の値を容易に表示し、設定できるようになります。各バインド変数の名前、型およびデフォルト値の情報は、データ・オブジェクトのデータ・コントロール構造ファイルに保存されます。バインド変数に対してUIヒントを定義した場合、この情報はデータ・コントロール構造ファイルの他のUIヒントとともにデータ・モデル・プロジェクトのメッセージ・バンドル・ファイルに保存されます。

7.6.6 ネストされた式に関する必知事項

名前付き基準からUIデザイナによって作成される検索フォームでは、すべてのタイプのネストされた式が動作するわけではありません。特に、検索フォームでは、直接ネストされた名前付き基準をサポートしていません。このタイプのネストされた式では、1つの名前付き基準を別の名前付き基準の直接の子として定義します。それ自体が名前付き基準の子である基準アイテムの子として名前付き基準をネストしたネストされた式は、問合せ検索フォームでサポートされています。名前付き基準を使用して検索フォームを作成する方法の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFによるデータバインドされた検索フォームの作成」を参照してください。

7.6.7 名前付き基準にユーザー・インタフェース・ヒントを設定する方法

データ・コントロール構造ファイル・コレクションに対して作成された名前付き基準は、Webページ・デザイナがQuery-by-Example検索フォームを作成する際に使用できます。Webページ・デザイナは、「データ・コントロール」パネルから名前付き基準を選択して、Webアプリケーション用の検索フォームを作成します。Webページの検索フォームでは、「データ・コントロール」パネルで選択した名前付き基準に最初にバインドされるADF Faces問合せ検索コンポーネントが利用されます。実行時に、エンド・ユーザーは、「データ・コントロール」パネルに表示されるその他すべての名前付き基準の中からいずれかを選択できます。検索フォームでエンド・ユーザーが選択できる名前付き基準は、開発者シード検索と呼ばれます。問合せコンポーネントでは、「保存済の検索」ドロップダウン・リストに、これらのシードされた検索が自動的に表示されます。検索フォームの作成、およびADF問合せ検索コンポーネントの使用の詳細は、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』の「ADFによるデータバインドされた検索フォームの作成」を参照してください。

開発者がシードした検索はモデル・プロジェクト内で作成されるため、「ビュー基準の編集」ダイアログの「UIヒント」ページでは、問合せコンポーネントにおける個々の名前付き基準の実行時の使用方法に対して、デフォルト・プロパティを指定できます。実行時の問合せコンポーネントの動作は、次のシードされた検索プロパティからどれを選択するかによって決まります。

ADF問合せ検索コンポーネントで使用するシードされた検索を作成する場合は、「ビュー基準の編集」ダイアログの「UIヒント」ページで「リストに表示」を選択します。エンド・ユーザーの検索フォームに名前付き基準を表示しない場合は、「リストに表示」の選択を解除します。

始める前に:

名前付き基準の知識があると役立ちます。詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

次のタスクを完了する必要があります。

- 「名前付き基準を宣言的に作成する方法」に記載されている説明に従って、名前付き基準を作成します。

ユーザー・インタフェースに使用する名前付き基準を構成する手順:

1. 「アプリケーション」ウィンドウで、シードされた検索に使用する名前付き基準が定義されているデータ・コントロール構造ファイルをダブルクリックします。

2. 概要エディタで、「名前付き基準」ナビゲーション・タブをクリックします。

3. 「名前付き基準」ページで、シードされた検索で使用する名前付き検索を選択して「編集」アイコンをクリックします。

4. 「ビュー基準の編集」ダイアログで、「UIヒント」タブをクリックして「リストに表示」が選択されていることを確認します。

この選択により、問合せコンポーネントによってシードされた検索が「保存済の検索」ドロップダウン・リストに表示されるかどうかが決まります。

5. 問合せコンポーネントの「保存済の検索」ドロップダウン・リストに追加するシードされた検索に対して、わかりやすい表示名を入力します。

何も入力しない場合、問合せコンポーネントでは、「名前付き基準の編集」ダイアログに表示される名前付き基準の名前が使用されます。

6. エンド・ユーザーが「保存済の検索」ドロップダウン・リストからシードされた検索を選択するたびに、検索結果が自動的に問合せコンポーネントに表示されるようにする場合は、「自動的に問合せ」を有効にします。

デフォルトでは、検索結果は表示されません。

7. オプションで、ユーザーにアイテムが基本モードまたは詳細モードのいずれで表示されるかを決定する「表示されたモード」プロパティを各名前付き基準アイテムについて設定します。

注意:

ユーザーに公開しないアイテムが名前付き基準に含まれている場合、「表示されたモード」設定に「なし」を使用して、検索フォームでそのアイテムを非表示にします。たとえば、ログインした顧客のカート内にある製品を検索するための名前付き基準は作成できますが、ユーザーが顧客IDを変更して別の顧客のカート内にある製品を表示することのないようにする必要があります。このようなシナリオでは、名前付きバインド変数を使用して、顧客IDに対応する名前付き基準アイテムを現在の顧客IDに設定します。バインド変数定義で変数が任意または更新不可に指定されている場合がありますが、UIヒント・プロパティの「表示」が「非表示」に設定されている場合は、「表示されたモード」の設定によってのみ、検索フォームに値が表示されるかどうかが決まります。

8. 必要に応じて、「演算子の表示」ドロップダウン・リストを使用して、エンド・ユーザーが検索フォームのモードを「基本」と「詳細」の間で切り替える際に、問合せコンポーネントで個々の基準アイテムをレンダリングするかどうかを構成します。

デフォルトでは、シードされた検索で定義した名前付き基準アイテムはすべて、どちらかのモードで表示されます。

9. レンダリングされた基準アイテムがDate型の場合、対応するデータ・オブジェクト属性のUIヒントも定義する必要があります。データ・オブジェクト属性の「フォーマットの種類」ヒントを「簡単な日付」に設定し、フォーマット・マスクを適切な値に設定します。これによって検索フォームで日付値を使用できるようになります。詳細は、「属性へのUIヒントの設定方法」を参照してください。

10. 「OK」をクリックします。

7.6.8 複数のJPAエンティティに基づいて名前付き基準を作成する方法

JPAベースのデータ・コントロール上でエンティティ・クラスの名前付き基準を作成する際には、その特定のエンティティに関連した属性のみがフィルタリングに使用できます。ただし、外部キーによって関連付けられる複数の表からデータを集約する、カスタムBeanとJPA問合せに基づいた名前付き基準を作成することも可能です。

始める前に:

名前付き基準の知識があると役立ちます。詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

複数のJPAエンティティに基づく名前付き基準を作成する手順は次のとおりです。

1. フィルタリングする表のJPAエンティティ・クラスを作成し、これらのエンティティを対象にEJBセッションBeanを作成します。詳細は、『Oracle JDeveloperによるアプリケーションの開発』のEJBビジネス・サービス・レイヤーを操作する方法に関する項を参照してください。

2. カスタムBeanを作成し、フィルタリングする(複数のエンティティからの)様々な属性に対する単純なgetterおよびsetterを移入します。たとえば、name属性に対応するgetterとsetterは、次のようなものです。

public void setName(String name) {
this.name = name;
}

public String getName() {
return name;
}

3. データベースに対するJPA問合せに基づいてカスタムBeanのリストを作成するアクセッサ・メソッドを、セッション・ファサードに追加します。

次の例は、リストを作成するためにセッションBeanに追加するメソッドの例を示しています。ここでは、各オブジェクトはCustomerエンティティのid列とname列、およびOrdエンティティのdateOrdered列とdateShipped列で構成されます。

public List<CustomBean> getCustomBeanFindAll() {
String queryString =
"select c.id, c.name, o.date_ordered, o.date_shipped \n" +
"from s_customer c, s_ord o where o.customer_id = c.id";
Query genericSearchQuery = em.createNativeQuery(queryString, "CustomQuery");
List resultList = genericSearchQuery.getResultList();
Iterator resultListIterator = resultList.iterator();
List<CustomBean> customList = new ArrayList();
while (resultListIterator.hasNext()) {
Object col[] = (Object[])resultListIterator.next();
CustomBean custom = new CustomBean();
custom.setCustomerId((BigDecimal)col[0]);
custom.setName((String)col[1]);
custom.setDateOrdered((Date)col[2]);
custom.setDateShipped((Date)col[3]);
customList.add(custom);
}
return customList;
}

4. 「EJBデータ・コントロールを作成する方法」の説明に従ってセッションBean上でEJBデータ・コントロールを作成し、ウィザードでデータ・コントロールを作成する際に「名前付き基準のサポート」チェック・ボックスを必ず選択します。

5. 「データ・コントロールの編集方法」の説明に従って、カスタムBeanのデータ・コントロール構造ファイルを作成します。

6. 「名前付き基準を宣言的に作成する方法」の説明に従って、カスタムBeanに対する名前付き基準を作成します。

7.7 値オブジェクトのリストの作成

データベース・アプリケーションでは、あるデータベース表の一部の列に、別のデータベース表に定義された可能な値の制限セットが指定されている場合があります。たとえば、Ordersデータベース表にCountry列が含まれていて、この列にはCountriesデータベース表から導出された値のみを挿入するように指定されている場合があります。他の表からこのようなデータを容易に操作できるように、JDeveloperでは値リスト・オブジェクト(LOV)を作成することにより、一方のオブジェクトからのデータを他方のオブジェクトで参照できます。データ・モデル内でこの値リスト関係を設定することにより、選択リスト、コンボ・ボックスなどの値リストUIコンポーネントを容易に作成できます。このためには、「データ・コントロール」パネルからページに、LOV属性をドラッグします。

JPAベースのデータ・コントロールの場合は、実行時にリストに表示されるオブジェクトを制限するために、リスト・ソースであるオブジェクト上で定義した名前付き基準を適用することもできます。名前付き基準を作成するには、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

7.7.1 属性のLOVを作成する方法

LOVオブジェクトは、データ・コントロール構造ファイル内で定義します。

始める前に:

値リスト・コンポーネントに関する知識が役立つ場合があります。詳細は、「値リスト・オブジェクトの作成」を参照してください。

次のタスクを完了する必要があります。

- 「データ・コントロールの編集方法」の説明に従って、LOV定義を格納するオブジェクトと、LOVのデータソースになるオブジェクトの両方のデータ・コントロール構造ファイルを作成します。

属性のLOVを作成する手順は次のとおりです。

1. LOV定義を格納するデータ・コントロール構造ファイルの概要エディタで、「値リスト」ナビゲーション・タブをクリックして、「オブジェクトの値リストの追加」をクリックします。

2. 「値リストの作成」ダイアログで、次の手順を実行して名前付き基準を適用します。

a. 「値リスト名」フィールドで、LOVオブジェクトの名前を入力します。

b. 「ベース・オブジェクト・フィールド」ツリーで、値リストへのアクセスに使用されるデータ・コントロール・オブジェクトを選択します。たとえば、コレクションとのOneToMany関係を持つ構造化属性ノードを選択できます。

c. 「リスト・データソース」ツリーで、値のソースのデータ・コントロール・オブジェクトを選択します。
このアクセッサは、アプリケーション内で他の用途に使用しないでください。このアクセッサを他の場所で使用する場合は、機能を複製した代行のデータ・コントロール上で新規アクセッサ・メソッドを作成し、それをリスト・データソースとして使用します。

注意:

LOVを使用してJPAエンティティを選択する場合、リソース・データソース・アクセッサから返されるJPAエンティティが、LOVにバインドされたプロパティと比較されます(equals()を使用して)。リスト・データソース内のJPAエンティティがEntityManagerによって管理されている状態にあり、デタッチ状態にないことが保証されていれば、比較は正しく動作します。デタッチ状態になる可能性がある場合は、デフォルトのequals()メソッドによる比較が期待どおりに動作しないことがあり、少なくともエンティティのIDフィールドを含むように、エンティティ・クラスのequals()メソッドとhashCode()メソッドをオーバーライドする必要があります。

同様に、基礎となるセッションBeanがステートレスのときは、equals()メソッドをオーバーライドする必要があります。ステートレス・セッションBean内でメソッド・コールが行われるたびに、固有の永続性コンテキストが使用されるので、デフォルトのequals()の実装では、別々のメソッド・コールから返されたインスタンスを比較する場合にfalseが返されます。

これら2つのメソッドをオーバーライドするコードを生成できます。このためには、「アプリケーション」ウィンドウでエンティティ・クラスを選択し、「構造」ウィンドウでエンティティのノードを右クリックして、「equals()およびhashCode()の生成」を選択します。ただし、JPAもこれらのメソッドに依存しているので、この方法はお薦めしません。これらのメソッドをオーバーライドする場合は、予期しない動作が可能なかぎり起こらないように、equals()の実装によってエンティティ内の一時的でないプロパティすべてが比較されることを確認してください。お薦めする方法は、ADF Webアプリケーション内でデタッチされたエンティティの使用を避けることです。このためには、拡張永続性コンテキストでステートフル・セッションBeanを使用します。このモデル・タイプを使用すれば、同じ論理エンティティに複数のインスタンスが存在しなくなり、不変のIDに基づいてエンティティを比較するためにequals()メソッドをオーバーライドする必要はありません。

d. 「OK」をクリックします。

3. オプションで、JPAベースのデータ・コントロールの場合、ビュー属性の編集アイコンをクリックして、表示される値の制限に使用するデータソースからの名前付き基準のいずれかを適用します。このアイコンは、ページの右側、「リスト・データソース」パネルと「リスト戻り値」パネルの間にあります。

4. 概要エディタで、「リストUIヒント」タブをクリックして、次の手順を実行します。

a. 「デフォルトのリスト・タイプ」ドロップダウン・リストで、値リストを表示するコンポーネントを選択します。使用可能なコンポーネントのタイプについては、『Oracle Application Development FrameworkによるFusion Webアプリケーションの開発』のリスト・タイプUIヒントのリスト・コンポーネント・タイプの表を参照してください。

b. オプションで、「属性の表示」セクションでリストに表示される属性を変更します。

c. オプションで、使用するリストのタイプに応じて使用可能なその他のオプションを構成します。

5. オプションで、「アクセッサUIのヒント」タブをクリックして、リストに表示される属性、ユーザーの選択内容が自動的に送信されるかどうかなどに関するUIヒントを設定します。

7.7.2 LOVの作成時の処理

LOVオブジェクトを作成する際には、次の処理が行われます。

- まだ存在しない場合は、LOVオブジェクトの属性ノードがベース・オブジェクトのサブノードとして「データ・コントロール」パネルに表示されます。このノードを使用して、ページにドラッグすることにより、モデルドリブン・リストUIコンポーネントを作成できます。属性の親コレクションをページにドラッグして、その属性をリスト・コンポーネントによって表現するフォームまたは表を作成することもできます。

注意:

リスト・ソースへのマッピングがオブジェクト定義内の属性に含まれていない場合、LOVオブジェクトを作成する前に、この属性ノードが「データ・コントロール」パネルにすでに表示されている場合があります。

オブジェクト定義にリスト・ソースへのマッピングが含まれている場合(たとえば、JPAエンティティ・クラス内の@JoinColumnアノテーションの形式で)、デフォルトではその属性が「データ・コントロール」パネルに構造化属性として表示されます。ただし、デフォルトでは、親コレクションをページにドラッグしてADFフォームまたはADF表を作成する際に、この構造化属性のUIコンポーネントは生成されません。このため、別の表にマップされた属性のLOVオブジェクトを作成すれば、以後はモデルドリブン選択リストに組み込むフォームと表の作成が簡単になります。

- 次の要素が、LOV属性を含むコレクションのデータ・コントロール構造ファイルに追加されます。

- <PDefAttribute>要素。これは、属性を指定し、LOV動作を定義するリスト・バインディング要素を指し、Webページに表示するコンポーネント・タイプを指定します。

- <ViewAccessor>要素。これは、データソースの行セットから可能な値のリストを取得するために使用される手段です。

- <ListBinding>要素。これは、問合せ限度、リストの表示にブランク・エントリを含めるかどうかなど、LOVの動作を定義します。

7.8 Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト

アプリケーションのビューの設計を開始する前に、Oracle ADFモデル・テスターを使用して、EJBおよびBeanデータ・コントロールのモデルの様々な要素をテストできます。たとえば、モデルに検証ルールまたはUIヒントを追加した場合、それらのオブジェクトをページにバインドする前にテストできます。UIページを作成した後でも、問題が発生した場合、Oracle ADFモデル・テスターは問題を診断する補助となります。Oracle ADFモデル・テスターを使用して、問題がビジネス・サービス・レイヤーに存在するのかどうかを絞り込むことができます。

7.8.1 Oracle ADFモデル・テスターの実行方法

データ・コントロールに定義したメタデータをテストするには、「アプリケーション」ウィンドウからアクセスできるOracle ADFモデル・テスターを使用します。

始める前に:

Oracle ADFモデル・テスターの知識があると役立ちます。詳細は、「Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト」を参照してください。

次のタスクを完了する必要があります。

- 「EJBデータ・コントロールを作成する方法」、または「JPAベースのBeanデータ・コントロールを作成する方法」の説明に従って、EJBまたはBeanデータ・コントロールを作成します。

注意:

EJBデータ・コントロールの場合、テスターはローカル・セッションBeanインタフェースに対しては機能しません。ただし、セッションBeanと同じ永続性ユニットに基づくJavaサービス・ファサード・クラスを作成し、そのクラス用のデータ・コントロールを作成し、そのデータ・コントロールをテスター内で使用することによって、この制限を回避できます。このJavaサービス・ファサードはEJBセッションBeanと同じ永続性ユニットを使用するので、2つのデータ・コントロールはエンティティに対して同じデータ・コントロール構造ファイルを使用します。

Javaサービス・ファサード・クラスの作成の詳細は、「JPAベースのBeanデータ・コントロールのサービス・ファサードを作成する方法」を参照してください。

この方法を使用すると、統合WebLogic Serverインスタンスのオーバーヘッドを削減できるという利点もあります。インスタンスはテスター用のプロセスを実行する必要がありますが、セッションBean自体を実行する必要はありません。

アプリケーションのBeanメタデータをテストする手順:

1. 「アプリケーション」ウィンドウで、DataControls.dcxファイルをダブルクリックします。

2. 概要エディタで、テストするデータ・コントロールのノードを右クリックして、「実行」を選択します。

図7-6に示すように、Oracle ADFモデル・テスターが開きます。

図7-6 Oracle ADFモデル・テスター

3. コレクション・オブジェクトをダブルクリックして、そのオブジェクトのメタデータのテストを開始します。

7.8.2 Oracle ADFモデル・テスター使用時の処理

Oracle ADFモデル・テスターを起動すると、JDeveloperがテスターを別のプロセスで開始し、Oracle ADFモデル・テスター・ウィンドウが表示されます。ウィンドウの左側のツリーには、データ・モデルのすべてのコレクションが表示されます。データ・モデルにマスター/ディテールのビュー・インスタンス関係が定義されている場合、ツリーには親ノードと子コードとして関係が表示されます。目的のコレクションをダブルクリックすると、Oracle ADFモデル・テスターでデータ・ビュー・ページが表示され、問合せ結果をインスペクトできます。たとえば、図7-7では、customerFindAllコレクションがダブルクリックされ、右側のデータ・ビュー・ページにこのコレクションの最初のレコードが表示されているところが示されています。

図7-7 Oracle ADFモデル・テスターに表示されたcustomerFindAllコレクションの詳細

Oracle ADFモデル・テスターの一部の機能を次に示します。

- 「ラベル・テキスト」ヒントに基づいたUIヒント、およびフォーマット・マスクが正しく定義されているかどうかを検証できます。(UIヒントの設定方法は、「属性へのUIヒントの設定方法」を参照してください。)

- ツールバー・ボタンを使用してデータのスクロールもできます。

- Query-By-Example基準を入力して、検査対象のデータのある特定の行を検索できます。ツールバーの「ビュー基準の指定」ボタンをクリックすると、「ビュー基準」ダイアログに使用可能なQuery-by-Example基準のリストが表示されます。
たとえば、CustomerInfoCriteriaなどの名前付き基準を選択し、LastName属性にH%などの問合せ基準を入力して、「検索」をクリックすると、文字Hで始まる姓のユーザーのみに検索対象を絞り込むことができます。

表7-2は、Oracle ADFモデル・テスターのツールバー・ボタンが実行する操作の概要を示しています。

表7-2 Oracle ADFモデル・テスターのツールバー・ボタン

ボタン

操作

使用方法

別の行に移動

Oracle ADFモデル・テスターで表示される現在の行を変更します。最初、前、次、または最後の行に移動します。

新規行を挿入

新規の行を作成して挿入します。

現在の行を削除

現在の行を削除します。

データベースへの変更を保存

保留中のトランザクションに対してコミット操作を実行します。ただし、JPAベースのデータ・コントロールの場合、変更は実際にはデータベースにコミットされません。

このボタンは、トランザクション・メソッドがサービスに実装されている場合のみ使用できます。

前回の保存以降の変更をすべて取消し

保留中のトランザクションを取り消し、元の値をリストアします。

このボタンは、トランザクション・メソッドがサービスに実装されている場合のみ使用できます。

ビュー基準の指定

「ビュー基準」ダイアログが表示され、名前付き基準を作成し、結果セットに適用できます。

行の検証

データ・コントロール構造ファイルで定義されている検証ルールを適用することにより、現在の行を検証します。最低1つのフィールドが編集可能でないと、使用できません。

7.8.3 ビジネス・レイヤーの検証のテスト方法

定義した検証規則に応じて、無効な値を入力して検証例外のトリガーおよび検証を試行できます。

始める前に:

Oracle ADFモデル・テスターの知識があると役立ちます。詳細は、「Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト」を参照してください。

次のタスクを完了する必要があります。

- 「Oracle ADFモデル・テスターの実行方法」の手順に従ってテスターを起動します。

ビジネス・レイヤーの検証をテストする手順:

- テスターで、属性の値を入力して「行の検証」アイコンをクリックします。
たとえば、属性について範囲検証ルールを定義した場合、その範囲外の値を入力して「行の検証」アイコンをクリックします。次のようなエラーが表示されます。

(oracle.jbo.AttrSetValException) Valid product codes are between 100 and 999

7.8.4 行の作成およびデフォルト値の生成のテスト方法

Oracle ADFモデル・テスターを使用して、新規行の作成時に属性のデフォルト値が正しく生成されるかどうかを検証できます。

始める前に:

Oracle ADFモデル・テスターの知識があると役立ちます。詳細は、「Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト」を参照してください。

また、データ・コントロール構造ファイル内の属性を理解していると役立ちます。詳細は、「属性の操作」を参照してください。

次のタスクを完了する必要があります。

- 「Oracle ADFモデル・テスターの実行方法」の手順に従ってテスターを起動します。

行の作成およびデフォルト値の生成をテストする手順:

1. Oracle ADFモデル・テスターのツールバーで「新規行の挿入」ボタンをクリックし、空白行を作成します。

宣言的なデフォルト値があるフィールドの場合、その値が空白行に表示されます。

2. テスターで、すべての必要なフィールドに入力して「コミット」ボタンをクリックします。

7.8.5 Oracle ADFモデル・テスターを使用した名前付き基準のテスト方法

Oracle ADFモデル・テスターでは、既存の名前付き基準を使用し、非定型基準で問い合せてデータ・モデルをテストできます。

始める前に:

Oracle ADFモデル・テスターの知識があると役立ちます。詳細は、「Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト」を参照してください。

また、名前付き基準を理解していると役立ちます。詳細は、「名前付き基準を使用した結果セットのフィルタリング」を参照してください。

次のタスクを完了する必要があります。

- 「Oracle ADFモデル・テスターの実行方法」の手順に従ってテスターを起動します。

Oracle ADFモデル・テスターを使用して名前付き基準および非定型問合せ基準をテストする手順:

1. Oracle ADFモデル・テスターで、フィルタリングするコレクションをダブルクリックします。

2. 「ビュー基準の指定」ツールバー・ボタンをクリックして名前付き基準をテストします。

3. 「ビュー基準」ダイアログで、次のいずれかのタスクを実行します。

- プロジェクトのデータ・コントロール構造ファイルに追加した名前付き基準をテストするには、その基準を「選択済」リストに移動して「検索」をクリックします。「非定型基準」セクションに入力した追加の基準が、フィルタに追加されます。

- 単一の名前付き基準行から非定型基準属性をテストするには、名前付き基準に必要な値を入力し、「検索」をクリックします。
たとえば、図7-8は、信用格付けがPOORであるすべての顧客を返すフィルタを示しています。

図7-8 Oracle ADFモデル・テスターの「ビュー基準」ダイアログ

7.8.6 Oracle ADFモデル・テスターを更新してプロジェクトの変更を表示する方法

データ・コントロールをテストする際、データ・モデル・プロジェクト全体を再デプロイすることなく、データ・コントロールを繰り返し変更して再度テストできます。データ・コントロール構造ファイルへの変更を再ロードするには、単にOracle ADFモデル・テスターを閉じて再度開きます。

Javaコード、またはデータ・モデル・プロジェクトのJARファイルにパッケージ化した他のファイルを変更した場合は、そのJARファイルを再ビルドし、内部アプリケーション・サーバーに再デプロイする必要があります。

始める前に:

Oracle ADFモデル・テスターの知識があると役立ちます。詳細は、「Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト」を参照してください。

次のタスクを完了する必要があります。

- 「Oracle ADFモデル・テスターの実行方法」の手順に従ってテスターを起動します。

稼働中のOracle ADFモデル・テスターにデータ・モデルのメタデータを再ロードするには:

1. Oracle ADFモデル・テスターで、データ・モデルをテストして、必要な変更を判別します。

2. JDeveloperで、プロジェクトに必要な変更を加えます。

3. Javaクラス、またはセッションBeanのJARファイルの一部である他のアーティファクトを変更した場合、プロジェクトを再ビルドします。(たとえば、「アプリケーション」ウィンドウでデータ・モデル・プロジェクトを右クリックし、「ProjectFileNameの再ビルド」を選択します。その後、再ビルドされたJARファイルがサーバーにデプロイされます。)

データ・コントロール構造ファイルのみを変更した場合、プロジェクトを再ビルドする必要はありません。

4. Oracle ADFモデル・テスターを閉じます。

5. テスターを再び起動します。

7.8.7 代替言語のメッセージ・バンドルおよびUIヒントのテスト方法

アプリケーションにおいて、リソース・メッセージ・バンドル内に代替言語を定義する場合、これらの言語を認識するようにOracle ADFモデル・テスターを構成できます。Oracle ADFモデル・テスターで「ロケール」メニューを表示し、利用可能な言語の中から選択できます。

Oracle ADFモデル・テスターで言語メッセージ・バンドルをテストすることで、データ・コントロールのUIヒントの翻訳が正しく配置されているかどうかを検証できます。または、メッセージ・バンドルが特定の属性の日付書式を定義している場合は、ツールによって日付書式の変更(たとえば、04/12/2007から12/04/2007へ)を検証できます。

始める前に:

Oracle ADFモデル・テスターの知識があると役立ちます。詳細は、「Oracle ADFモデル・テスターを使用したデータ・オブジェクト・メタデータのテスト」を参照してください。

Oracle ADFモデル・テスターのデフォルト言語を指定するには:

1. 「ツール」メニューから、「プリファレンス」を選択します。

2. 選択パネルで「ADFビジネス・コンポーネント」を展開し、「テスター」を選択します。

3. Oracle ADFモデル・テスター・ページで、リソース・メッセージ・バンドルを作成したロケールを「選択済」リストに追加します。

4. 「Oracle ADFモデル・テスターの実行方法」の手順に従ってテスターを起動します。

5. テスターの「ロケール」メニューで、ロケールを選択します。

7.9 Groovy言語サポート

Groovyは、Javaプラットフォーム用のスクリプト言語で、Javaと同様の構文を持ちます。Groovyスクリプト言語では、ドット区切り表記法の採用により、コードの作成が簡素化されていますが、コレクション、文字列およびJavaBeansを操作する構文は引き続きサポートされています。Groovy言語式は実行時に動的にコンパイルされ、実行されます。ADFアプリケーションについて作成したGroovy式は、定義されたデータ・オブジェクトのデータ・コントロール構造ファイルに保存されます。

Oracle ADFでは、データ・コントロール・オブジェクトへのアクセスが有用な場合のGroovyスクリプト言語の使用をサポートしています。これには、属性バリデータ、属性のデフォルト値、一時属性値の計算、バインド変数のデフォルト値(名前付き基準のフィルタリングにおける)、およびエラー・メッセージのプレースホルダ(検証ルールにおける)が含まれます。さらに、Oracle ADFには、Groovy式で使用できる組込みキーワードの限定されたセットが用意されています。

特に、Oracle ADFでは、次のタスクの実行でGroovy言語式の使用をサポートしています。

- Script Expression Validator (「Groovy式を使用した検証」を参照)またはCompare Validator (「比較に基づいた検証」を参照)の定義。

- 検証エラーを処理するエラー・メッセージ・トークンの定義(「エラー・メッセージへのGroovy式の埋込み」を参照)。

- バリデータの条件付き実行の処理(「Groovyを使用した条件付きでのエラー・メッセージの呼出し」を参照)。

- データ・オブジェクト属性のデフォルト値およびオプションの再計算条件の定義(「Groovy式を使用したデフォルト値の定義方法」を参照)。

- データ・オブジェクトのデータ・コントロール構造ファイルにおける一時属性の値の判別(「データ・オブジェクトへの一時属性の追加」を参照)。

これらのタスクをJDeveloperで実行する場合、タスク固有の式エディタ・ダイアログを使用します。たとえば、一時属性のデフォルト値を作成する場合、属性の「式エディタの編集」ダイアログを使用して、属性の実行時の値を決定する式を入力します。また、同じダイアログで値をいつ計算するかも指定できます(再計算条件と呼ばれます)。式はデザインタイム時に検証できませんが、すべての式エディタで、式の構文を保存する前にテストできます。

Groovy言語の詳細は、次のWebサイトを参照してください。

- http://groovy.codehaus.org/

7.9.1 Groovy式でのADFオブジェクトの参照方法

フレームワークでGroovyスクリプトを使用できるオブジェクトにアクセス可能な、adfという名前のトップレベルのオブジェクトが用意されています。アクセス可能なOracle ADFオブジェクトの構成は次のとおりです。

- adf.context - ADFContextオブジェクトを参照します。

- adf.object.dataProvider - 式が適用されるデータ・オブジェクトを参照します。アクセス可能な他のメンバー名は、Groovyスクリプトが適用されたコンテキストに由来します。

- データ・オブジェクト属性およびメソッド: コンテキストはデータ・オブジェクトのデータ・コントロール構造ファイルです。このオブジェクトを介して、データ・コントロール構造ファイルで定義されているすべての属性、およびデータ・オブジェクトから継承されたすべての属性およびメソッドを参照できます。

- スクリプト検証ルール: コンテキストは、バリデータが適用されるデータ・オブジェクトにマージされるバリデータ・オブジェクト(JboValidatorContext)です。このコンテキストで使用できるキーワードの詳細は、「Groovy式でのADFメソッドおよび属性の参照方法」を参照してください。

- adf.error - 検証規則において、検証式で例外または警告を生成できるエラー・ハンドラにアクセスします。

次の式を使用して現在の日付(時間切捨て)または現在の日付と時間を参照できます。

- adf.currentDate

- adf.currentDateTime

データの行では、次の組込みの集計関数を使用できます。

- rowSetAttr.sum(GroovyExpr)

- rowSetAttr.count(GroovyExpr)

- rowSetAttr.avg(GroovyExpr)

- rowSetAttr.min(GroovyExpr)

- rowSetAttr.max(GroovyExpr)

これらの集計関数は、文字列値引数を使用し、これはGroovy式として解釈され、集計が計算される際に行セットの各行のコンテキストで評価されます。Groovy式は数値(または数字のドメイン)を返す必要があります。

7.9.2 Groovy式でのADFメソッドおよび属性の参照方法

データ・コントロールのメンバー(データ・オブジェクトおよびデータ・オブジェクトのデータ・コントロール構造ファイルが定義するメソッドおよび属性を含む)を参照する最も単純な例は、式を適用する属性と同じデータ・オブジェクトに存在する属性の参照です。

たとえば、従業員の月給を指定する属性Salを持つデータ・オブジェクトの一時属性AnnualSalaryの値を計算するGroovy式を定義できます。

Sal * 12

または、次のような構文を使用して単一のデータ・コントロール構造ファイルの属性を比較する単純な検証ルールをGroovyで作成できます。

PromotionDate > HireDate

Javaを使用すると、同じ比較は次のようになります。

((Date)getAttribute("PromotionDate")).compareTo((Date)getAttribute("HireDate")) > 0

現在のオブジェクトは、thisオブジェクトとしてスクリプトに渡されるため、属性名を使用するだけで現在のオブジェクトの属性を参照できます。たとえば、属性レベルまたはエンティティ・レベルのスクリプト式バリデータで、HireDateという名前の属性を参照するには、スクリプトでHireDateを参照するだけですみます。

属性の参照と同様に、式の一部としてメソッドを起動できます。たとえば、次のように、属性のデフォルト値を定義します。

adf.object.dataProvider.getDefaultSalaryForGrade()

メソッド参照は接頭辞adf.object.dataProviderを必要とします。これによって式が適用される属性を定義する同じオブジェクトを参照できます。

検証ルールでデータ・オブジェクトのメソッドを参照する場合は、objectのかわりにsourceを使用します。

adf.source.dataProvider.getDefaultSalaryForGrade()

objectキーワードは、メソッドが定義されているデータ・オブジェクトではなく、検証ルール・オブジェクトを指すため、バリデータではsource接頭辞を使用する必要があります。

バリデータ・オブジェクトのメンバーを参照できるようにするために(JboValidatorContext)、検証ルール式で次のキーワードを使用できます。

- newValue: 属性レベルのバリデータで、設定されている属性値にアクセスします。

- oldValue: 属性レベルのバリデータで、設定されている現在の属性値にアクセスします。

たとえば、次の式を使用して、販売員の給与の動的検証ルール・チェックを指定できます。

if (Job == "SALESMAN")
{
return newValue < adf.source.dataProvider.getMaxSalaryForGrade(Job)
}
else
return true

A データ・コントロールの機能比較

この付録では、データ・コントロールの種類ごとに、データ・アクセス機能の実装方法を簡単に比較します。

使用を選択したデータ・コントロールの種類は、データ・アクセス機能の実装方法を左右します。表A-1はデータ・コントロールの種類ごとに、一般に使用されるデータ・アクセス機能の実装方法を比較したものです。

表A-1 データ・コントロールにおける機能実装の比較

機能

ADFビジネス・コンポーネント・データ・コントロール

Beanデータ・コントロール

EJBデータ・コントロール

Webサービス・データ・コントロール

URLサービス・データ・コントロール

プレースホルダ・データ・コントロール

af:Query

宣言的

宣言的

宣言的

プログラム的に実装

使用不可

使用不可

af:quickQuery

宣言的

宣言的

宣言的

プログラム的に実装

使用不可

使用不可

af:inputComboListOfValues

宣言的

宣言的

宣言的

プログラム的に実装

使用不可

宣言的

af:Calendar

宣言的

プログラム的に実装

プログラム的に実装

プログラム的に実装

使用不可

使用不可

af:Media

宣言的

プログラム的に実装

プログラム的に実装

プログラム的に実装

使用不可

使用不可

表フィルタリング

宣言的

宣言的

宣言的

使用不可

使用不可

使用不可

範囲ページングおよびスクロール可能ページング

宣言的

宣言的

宣言的

使用不可

使用不可

使用不可

UIヒント

宣言的

宣言的

宣言的

宣言的

宣言的

宣言的

検証ルール

宣言的

宣言的

宣言的

宣言的

宣言的

使用不可

基準に基づくフェッチ

宣言的

宣言的

使用不可

使用不可

使用不可

暗黙的基準のみ使用可能

値リスト(LOV)コンポーネント

宣言的

宣言的

宣言的

宣言的

宣言的

宣言的

コミットおよびロールバックのサポート

宣言的

宣言的(実装による)

宣言的(実装による)

使用不可

使用不可

プログラム的に実装

フェイルオーバー・サポート

宣言的

宣言的(実装による)

宣言的(実装による)

使用不可

使用不可

使用不可

「宣言的(実装による)」として示されている機能は、基礎のビジネス・サービスが適切なコード・パターンを提供していれば使用可能です。この表に「プログラム的に実装」と示されているコンポーネントは、特定のデータエントリ・コンポーネントで使用されるビジネス・モデルの実装に必要なJavaクラスを使用して実装できます。詳細は、該当するクラスのJavadocを参照してください。