3 ADFビジネス・コンポーネントのスタート・ガイド

この章では、Oracle ADFアプリケーションのADFビジネス・コンポーネントの使用を開始するための手順を説明します。設計時ウィザード、概要エディタおよびADFモデル・テスターなどの主な機能を説明します。また、データ・モデル・プロジェクトでビジネス・コンポーネントを作成するときに従うプロセスの概要を示しています。

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

ADFビジネス・コンポーネントについて

ADFビジネス・コンポーネントは、JDeveloperでFusion Web アプリケーションのビジネス・サービス・レイヤーを最低限のコーディングで作成できるようにするフレームワークです。

Fusion Webアプリケーションでは、ビジネス・サービス・レイヤーがデータベースへの接続、データの取得、データベース・レコードのロックおよびトランザクションの管理を処理します。ビジネス・サービス・レイヤーの次の3つの単純な例について考えます。

  • 新規データの対応する画面への、再問合せなしの表示

    ユーザーは、カスタマ管理アプリケーションにログインし、顧客と既存の注文を表示します。次に新しい注文を作成する際に注文する製品の在庫を表示すると、データベースに再問合せする必要なく製品の在庫量が更新されます。

  • ビジネス・ドメイン・ロジックによる変更の自動反映

    バック・オフィス・アプリケーションによって、発注状況が更新されます。ビジネス・ドメイン・レイヤーのOrdersエンティティ・オブジェクトにカプセル化されたビジネス・ロジックには、発注状況の属性に変更があった場合は常に最新更新日を更新する簡単なルールが含まれています。ユーザー・インタフェースは、ビジネス・ドメイン・レイヤーのロジックが変更された最新更新日を自動的に反映するよう更新されます。

  • ADFモデル・レイヤーのバインディングによりビジネス・サービス・メソッドが起動されると、データの再問合せと現在行の設定が実行されます。

    ツリー表示で、エンド・ユーザーがツリー内のあるノードをクリックします。この操作により、アプリケーション・モジュール内のADFツリー・バインディングでビジネス・サービス・メソッドが宣言的に起動され、マスター/ディテール情報の再問合せが実行され、行セットの適切な行に現在行を設定します。画面は新規マスター/ディテール・データと現在行の表示を反映するよう更新されます。

JDeveloperでの設計時に一般的な開発タスクを全体的に宣言的にするため、開発者はADFビジネス・コンポーネントを使用してビジネス・サービスを構築する時間を節約できます。特に、JDeveloperではADFビジネス・コンポーネントによる宣言的開発をサポートし、次のタスクを行います。

  • 自動的にデータベースと統合するコンポーネント内のビジネス・ロジックの、記述およびテスト

  • 複数のアプリケーションタスクをサポートする、データの複数のSQLベースのビューを介したビジネス・ロジックの再使用

  • ブラウザ、デスクトップ、モバイル、Webサービス・クライアントからの、ビューへのアクセスおよび更新

  • 配布したアプリケーションの修正を必要としないレイヤー単位のアプリケーション機能のカスタマイズ

ADFビジネス・コンポーネントは、次のビジネス・コンポーネントと連携してビジネス・サービス・レイヤーをサポートします。

  • エンティティ・オブジェクト

    エンティティ・オブジェクトは、データベース表内の1行を表し、すべてのデータ操作言語(DML)操作を処理することでデータ変更を簡略化します。また、該当する行のビジネス・ロジックをカプセル化し、ビジネス・ルールが一貫して適用されることを保証します。エンティティ・オブジェクトを他のエンティティ・オブジェクトと関連付け、基盤となるデータベース・スキーマの関係を反映することで、複数のアプリケーションで再使用できるビジネス・ドメイン・オブジェクトのレイヤーを作成します。

  • ビュー・オブジェクト

    ビュー・オブジェクトは、SQL問合せを表します。使い慣れたSQL言語を十分に活用し、エンド・ユーザーのタスクが必要とする形に、データを正確に結合、フィルタ、ソートおよび集約します。これには、ビュー・オブジェクトを他のビュー・オブジェクトにリンクし、複雑度にかかわらずマスター/ディテール階層を作成する機能も含まれます。エンド・ユーザーがユーザー・インタフェースを使用してデータを変更すると、ビュー・オブジェクトはエンティティ・オブジェクトと連携し、変更内容が一貫して検証され、保存されます。

  • アプリケーション・モジュール

    アプリケーション・モジュールは、UIクライアントがアプリケーション・データの操作に使用するトランザクション・コンポーネントです。これによって、エンド・ユーザー・タスクに関連した作業論理ユニットに関連する、更新可能なデータ・モデルやトップレベルのプロシージャおよびファンクション(サービス・メソッド)を定義します。

図3-1は、ADFビジネス・コンポーネントのすべてのコンポーネントとそれらの関係を示しています。

図3-1 ADFビジネス・コンポーネントの概要

この図は周囲のテキストで説明しています

ADFビジネス・コンポーネントのユースケースと例

ADFビジネス・コンポーネントは、次の例で示される機能をビジネス・サービス・レイヤーによって活用できる、Javaクラスの基盤を提供します。

データ・アクセスの簡略化
  • 必要なデータのみをクライアントに表示するデータ・モデルの設計

  • データ・モデルの一部としての複雑なマスター/ディテール階層の組込み

  • コード記述を必要としない、エンド・ユーザーのQuery-By-Exampleデータ・フィルタの実装

  • ビジネス・サービス・レイヤーとのデータ・モデル変更の自動調整

  • データベースに対する変更の自動検証および保存

ビジネス・ドメインの検証およびビジネス・ロジックの実行
  • 必須フィールド、主キーの一意性、データの精度と規模および外部キー参照の宣言的な実行

  • マルチレベルでの検証サポートを含めた、プログラムまたは宣言による、簡単なビジネス・ルールと高度なビジネス・ルール両方の簡単な取得および実行

  • ビジネス・ドメイン・オブジェクト間の関係のナビゲートおよび複合コンポーネント関連の制約の実行

複数ページの作業ユニットとのユーザー・インタフェースのサポート
  • ビジネス・サービス・アプリケーション・ロジックによるユーザー・インタフェースにおける変更の自動反映

  • 関連する表からの参照情報の取得と、エンド・ユーザーによる外部キー値の変更時の自動保持

  • Web階層の自動的な状態管理による、複数ステップのWebベース・ビジネス・トランザクションの簡略化

  • コードを必要としない、イメージ、ビデオ、音声およびドキュメントの処理

  • データの複数ビューにおける、保留中のデータ変更の同期化

  • 複数アプリケーションにおける、プロンプト、ツールチップ、フォーマット・マスク、エラー・メッセージの一環した適用

  • メタデータ駆動型ユーザー・インタフェースまたはアプリケーション機能をサポートする、ビジネス・コンポーネントに対するカスタム・メタデータの定義

  • 行単位の状態管理を簡略化する動的属性の、実行時の追加

サービス指向アーキテクチャの実装
  • コードを記述せずにビジネス統合できる高機能Webサービス・インタフェースのサポート

  • ベスト・プラクティスであるインタフェース・ベースのプログラミング・スタイルの適用

  • 自動JAAS統合および監査メンテナンスによるアプリケーション・セキュリティの簡略化

  • 「一度記述すれば、どこでも実行可能」: プレーンなJavaクラスまたはWebサービスと同様のビジネス・サービスの使用

アプリケーションのカスタマイズのサポート
  • ソース・コードの変更を必要としない、提供後のコンポーネント機能の拡張

  • アプリケーションの修正を必要としない、提供済コンポーネントの拡張版へのグローバルな代替

  • カスタマイズが失われない、または下方カスタマイズの手動での再適用を必要としない、アプリケーション・アップグレードの提供

ADFビジネス・コンポーネントの追加機能

ADFビジネス・コンポーネントを使用する前に、関連するOracle ADF機能を理解しておくと役立つ場合があります。次に、関連する他の機能へのリンクを示します。

ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成

JDeveloperでは、ADFビュー・オブジェクトを使用してデータ・モデル・プロジェクトを作成してADFアプリケーション・モジュールにカプセル化することができます。

JDeveloperは、ADFビジネス・コンポーネントに対する包括的な設計時サポートを提供します。これらの機能では、ビジネス・コンポーネントの作成、編集、ダイアグラム表示、テストおよびリファクタを一括して実行できます。

ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法

JDeveloperは、Oracle ADFにデータバインドされたWebアプリケーションの作成に役立つアプリケーション・テンプレートを提供しています。ADF Fusion Webアプリケーション・テンプレートを使用する場合、アプリケーションはデータ・モデル用の1つのプロジェクト(ADFビジネス・コンポーネント)とビューおよびコントローラ・コンポーネント用の別のプロジェクト(ADF FacesおよびADFタスク・フロー)から構成されます。

始める前に:

Fusion Webアプリケーションを理解しておくと役立つ場合があります。「Oracle ADFを使用したFusion Webアプリケーションの構築の概要」を参照してください。

また、データ・モデル・プロジェクトでグローバルに指定できるADFビジネス・コンポーネント・プリファレンスを理解するうえで役立つこともあります。詳細は、「ADFビジネス・コンポーネント・プリファレンスのカスタマイズ方法」を参照してください。

また、アプリケーションを作成および管理するためにJDeveloperが提供するツールおよび機能について理解を深めるうえでも役立つことがあります。『Oracle JDeveloperによるアプリケーションの開発』Oracle JDeveloperによるアプリケーション開発のスタート・ガイドに関する項を参照してください。

ADF Fusion Webアプリケーション・テンプレートを使用してデータ・モデル・プロジェクトを作成するには:

  1. メイン・メニューで「ファイル」を選択し、次に「アプリケーション」→「新規」を選択します。
  2. 「新規ギャラリ」の「アイテム」リストで、「ADF Fusion Webアプリケーション」をダブルクリックします。
  3. ADF Fusion Webアプリケーションの作成ウィザードで、名前やディレクトリなどのアプリケーションの詳細を入力します。ウィザードに関するヘルプを表示するには、[F1]を押します。

    ウィザードのプロジェクト1名前ページに、データ・モデル・プロジェクトを完了するために必要な機能のリストが表示されます。プロジェクト機能「ADFビジネス・コンポーネント」がリストに表示されます。

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

ADF REST Webアプリケーションのデータ・モデル・プロジェクトの作成方法

JDeveloperは、Oracle ADFにデータバインドされたWebアプリケーションの作成に役立つアプリケーション・テンプレートを提供しています。ADF REST Webアプリケーション・テンプレートを使用する場合、アプリケーションはWebコンポーネント用の1つのプロジェクト(REST Webプロジェクト)とデータ・モデル用の別のプロジェクト(ADFビジネス・コンポーネント)から構成されます。

始める前に:

REST Webアプリケーションを理解しておくと役立つ場合があります。詳細は、「RESTful WebサービスおよびADFビジネス・コンポーネントについて」を参照してください。

また、データ・モデル・プロジェクトでグローバルに指定できるADFビジネス・コンポーネント・プリファレンスを理解するうえで役立つこともあります。詳細は、「ADFビジネス・コンポーネント・プリファレンスのカスタマイズ方法」を参照してください。

また、アプリケーションを作成および管理するためにJDeveloperが提供するツールおよび機能について理解を深めるうえでも役立つことがあります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』「Oracle JDeveloperによるアプリケーション開発のスタート・ガイド」を参照してください。

ADF REST Webアプリケーション・テンプレートを使用してデータ・モデル・プロジェクトを作成するには:

  1. メイン・メニューで「ファイル」を選択し、次に「アプリケーション」→「新規」を選択します。
  2. 「新規ギャラリ」の「アイテム」リストで、「ADF REST Webアプリケーション」をダブルクリックします。
  3. ADF REST Webアプリケーションの作成ウィザードで、名前やディレクトリなどのアプリケーションの詳細を入力します。ウィザードに関するヘルプを表示するには、[F1]を押します。
  4. ウィザードの「バージョン」ページには、アプリケーション作成プロセスで作成された新しいバージョン・リリース名と内部名が表示されます。「次へ」をクリックします。
  5. ウィザードの「プロジェクト名」ページに、データ・モデル・プロジェクトを完了するために必要な機能のリストが表示されます。プロジェクト機能「ADFビジネス・コンポーネント」がリストに表示されます。「次へ」をクリックします。
  6. プロジェクトのJava設定ページで、パッケージ名、プロジェクトのJavaソース・コードのディレクトリ、および出力クラス・ファイルが配置される出力ディレクトリを入力し、「終了」をクリックします。

    ノート:

    REST Webサービス・プロジェクトにはデフォルトでRESTWebServiceという名前が付けられ、web.xmlファイルが格納されます。新規アプリケーション設定時に、このプロジェクト名を編集することはできません。

  7. 表からのビジネス・コンポーネントの作成ウィザードを使用して、ADF RESTリソースの作成に進むことができます。詳細は、「表からのビジネス・コンポーネントの作成ウィザードを使用してADF RESTリソースを作成する方法」を参照してください。

既存のアプリケーションへのADFビジネス・コンポーネント・データ・モデル・プロジェクトの追加方法

事前定義されたテクノロジ・テンプレートを使用せずに作成するアプリケーションは、「新規ギャラリ」からプロジェクト・フォルダに追加することで作成できます。ADFビジネス・コンポーネントのプロジェクトを追加する場合は、「新規ギャラリ」のリストから「ADFモデル・プロジェクト」を選択します。これにより、ADFビジネス・コンポーネントに依存するADF Webアプリケーションのデータ・モデルを定義するプロジェクトが作成されます。

始める前に:

Fusion Webアプリケーションを理解しておくと役立つ場合があります。詳細は、「Oracle ADFを使用したFusion Webアプリケーションの構築の概要」を参照してください。

また、アプリケーションを作成および管理するためにJDeveloperが提供するツールおよび機能について理解を深めるうえでも役立つことがあります。『Oracle JDeveloperによるアプリケーションの開発』Oracle JDeveloperによるアプリケーション開発のスタート・ガイドに関する項を参照してください。

データ・モデル・プロジェクトをアプリケーションに追加するには:

  1. 「アプリケーション」ウィンドウで既存のプロジェクトを選択し、メインメニューで「ファイル」、次に「新規」→「プロジェクト」を選択します。
  2. 「新規ギャラリ」の「アイテム」リストで、「ADFモデル・プロジェクト」をダブルクリックします。
  3. ADFモデル・プロジェクトの作成ウィザードで、名前やディレクトリなどのプロジェクトの詳細を入力します。ウィザードに関するヘルプを表示するには、[F1]を押します。

    ウィザードのプロジェクト名ページに、モデル・プロジェクトを完了するために必要な機能のリストが表示されます。プロジェクト機能「ADFビジネス・コンポーネント」がリストに表示されます。

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

データベース接続を使用してデータ・モデル・プロジェクトを初期化する方法

初めてADFビジネス・コンポーネント・モデル・プロジェクトでビジネスコンポーネントを作成する場合は、図3-2に示すように、「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログが表示されます。このダイアログでは、このデータ・モデル・プロジェクトのビジネス・コンポーネントで作業する際に使用する、設計時のアプリケーション・リソース接続を選択したり、既存のIDEレベルの接続をコピーして新規のアプリケーション・リソース接続を作成します。ビジネス・コンポーネントを作成するためにJDeveloperが使用するデータベースをオンラインにするかオフラインにするかを指定できます。ダイアログではデフォルトでオンライン・データベースに指定されています。オフライン・データベースでの作業の詳細は、「オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法」を参照してください。

図3-2 「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログ

図3-2の説明が続きます
「図3-2 「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログ」の説明

このダイアログは最初のビジネス・コンポーネントを作成する前に表示されるため、これを使用して、ビュー・オブジェクトがSQL文を策定するために使用するSQLプラットフォームをグローバルに制御します。選択できるSQLプラットフォームは次のとおりです。

  • Oracleデータベース接続用のOracle SQLプラットフォーム(デフォルト)

  • Oracle Liteデータベース用のOLite

  • Microsoft SQL Serverデータベース用のSQLServer

  • IBM DB2データベース用のDB2

  • その他のサポートされるSQL92準拠のデータベース用のSQL92

ノート:

OracleデータベースとOracle以外のデータベースの両方に対してアプリケーションを実行する予定がある場合、後ではなくアプリケーションを構築し始める際に、SQL92 SQLプラットフォームを選択する必要があります。これにより、Oracle SQLプラットフォームを使用する場合に特有の、Oracle固有の最適化機能の一部は使用できなくなりますが、OracleデータベースとOracle以外のデータベースの両方に適用できるアプリケーションを構築できます。また、設計時に選択した複数のSQLプラットフォームでのADFアプリケーションの実行のサポートは、ADFランタイムではサポートされないことを理解することが重要です。したがって、同じ管理対象サーバーにデプロイすることを計画しているADFアプリケーションすべてが、選択したSQLプラットフォームに単一値を使用することを確認する必要があります。OracleとOracle以外の両方のデータベースに対して実行するシナリオでは、すべてのアプリケーションに、SQLプラットフォームとして選択されたSQL92があることを確認する必要があります。この要件が満たされていない場合は、実行時にSQL検証エラーが発生することがあります。

このダイアログでは、データ・モデル・プロジェクトで使用するデータ型のセットも決定できます。JDeveloperはデータ型の選択を使用して、データ・モデル・プロジェクト内でエンティティ・オブジェクトおよびビュー・オブジェクトを作成する際に使用される属性のデータ型を定義します。したがって、「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログで設定を保存する前に適切な選択を行うことが重要です。このダイアログには、次のオプションがあります。

  • JDeveloperによりOracleデータベース・ドライバを使用していることが検出されると、「Oracle用拡張Java」型マップがデフォルトで選択されます。「Oracle用拡張Java」型マップでは、一般的なデータ型として、標準Java型およびoracle.jbo.domainパッケージに含まれる最適化されたデータ型を使用します。

    ヒント:

    新しいFusion Webアプリケーションでは、デフォルトの「Oracle用拡張Java」型を使用する必要があります。

  • 「Java」型マップは、Oracle以外のデータベース上で実行され、SQL92準拠を使用して作成するアプリケーションをサポートするために提供されています。この場合、基本のJavaデータ型のみをグローバルに使用するように、データ型マップを「Java」に設定します。

  • 「数値の表示に関する必知事項」で説明されているように、下位互換性を保つためや、ADF Facesをビュー・レイヤー・テクノロジとして使用していないADFアプリケーションのために、「Oracleドメイン」型マップが用意されています。JDeveloperリリース11.1.1.4.0以前で開発されたアプリケーションを移行する際、アプリケーションでは引き続き「Oracleドメイン」型マップが使用され、現在のデフォルト型マップの「Oracle用拡張Java」に変更されません。

「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログでプロジェクトの選択を保存すると、プロジェクトは初期化されたものとみなされます。初期化されたプロジェクトのデータ・タイプ・マップは変更できず、ビジネス・コンポーネントが作成された後にSQLプラットフォームを変更することはお薦めしません。

始める前に:

JDeveloperのリソースとしてのデータベース接続について理解しておくと役立つ場合があります。『Oracle JDeveloperによるアプリケーションの開発』「データベースへの接続と使用」を参照してください。

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

データ・モデル・プロジェクトを初期化するには:

  1. 「アプリケーション」ウィンドウで、ビジネス・コンポーネントを作成するモデル・プロジェクトを右クリックし、「新規」→「表からのビジネス・コンポーネント」を選択します。

    他のADFビジネス・コンポーネント・オプションを選択することもできますが、表からビジネス・コンポーネントを作成するオプションは、必要だと予測されるビジネス・コンポーネントの最初のパスを生成する際に特に役立ちます。ポップアップ・メニューにADFビジネス・コンポーネント・オプションが表示されない場合は、ADFビジネス・コンポーネント用に作成されたモデル・プロジェクトが「アプリケーション」ウィンドウで選択済として表示されているか確認します。

  2. 「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログで、「オンライン・データベース」は選択したままにし、ドロップダウン・リストから既存のデータベース・リソースを選択するか、「新規データベース接続を作成します。」アイコンをクリックします。

    データベース接続を作成する場合は、「データベース接続の作成」ダイアログに接続情報を入力します。このダイアログでヘルプを参照するには、[F1]を押します。「オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法」で説明されているとおり、いつでもオフライン・データベース・オブジェクトで作業を開始できます。

  3. ビジネス・コンポーネントが使用するSQLプラットフォームを選択します。

    データ・モデル・プロジェクトの初回初期化時のにこのダイアログでSQLプラットフォームを選択できます。プロジェクトを初期化したら、adf-config.xmlファイルに対する概要エディタの「ビジネス・コンポーネント」ページでSQLプラットフォームをオーバーライドできますが、これはプロジェクトにビジネス・コンポーネントを追加する前に行う必要があります。このファイルは、「アプリケーション・リソース」パネルで「ディスクリプタ」「ADF META-INF」ノードを開くと見つかります。adf-config.xmlファイルでデータ型を指定することにより、デプロイ済のFusion Webアプリケーションの実際のデータベース型を必要とするSQL文を実行時に生成することがサポートされます。

  4. ビジネス・コンポーネントが使用するデータ・タイプ・マップを選択します。ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを初期化した後はデータ・タイプ・マップを変更できない点に注意してください。

    Oracleデータベースに対して実行中のアプリケーションの場合は、通常、可能な場合は常に標準Javaタイプを使用し、番号や日付などの共通のデータ・タイプ用にカスタムOracleドメイン・タイプを提供するデフォルトの「Oracle用拡張Java」を受け入れることができます。その他のサポートされているデータ・タイプ・マップには「Oracleドメイン」(後方互換性用に提供される)と「Java」(Oracle以外のデータベース上で実行するSQL92互換のアプリケーションとともに使用する場合に選択)があります。

  5. 「OK」をクリックします。

オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法

ADFビジネス・コンポーネントはデータベース・オブジェクト・プロバイダとしてのオフライン・データベースの使用をサポートしています。データ・モデル・プロジェクトを初期化してデータベースを指定した後、オフライン・モードのデータベースでの作業に切り替えることができます。モデル・プロジェクトでビジネス・コンポーネントを作成するためのオフライン・データベースでの作業では、接続されていない状態で作業し、準備が整った時点でデータベースへの変更を取得します。また、ビジネス・オブジェクトを強制的に変更するスキーマの変更からプロジェクトを分離したままにします。

オフライン・データベースの作成時または既存のオフライン・データベースの選択時には、引き続きオンライン接続が必要で、これはテスト用に使用されます (Oracle ADFモデル・テスターを使用)およびデプロイメント用に使用されます。設計時は、オフライン・データベースが使用されます。ソース・データベースと同期化するためにオフライン・データベースを更新することもできます。データベース・オブジェクト比較機能によって、各相違を受容または拒否するために使用できるビジュアル・マッピングを取得できます。

始める前に:

JDeveloperのオフライン・データベースについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』「データベースへの接続と使用」を参照してください。

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

オフライン・データベース・オブジェクトで作業するためにデータ・モデル・プロジェクトを変更するには:

  1. 「アプリケーション」ウィンドウで、オフライン・データベースを作成するデータ・モデル・プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。

  2. 「プロジェクト・プロパティ」ダイアログで「ADFビジネス・コンポーネント」を選択します。

  3. 「ADFビジネス・コンポーネント」ページで、「オフライン・データベース」を選択し、新規オフライン・データベースの作成アイコンをクリックします。

  4. 「オフライン・データベースの作成」ダイアログで、データ・モデル・プロジェクトが表示するデータベースとスキーマの名前を入力し、その他のオプションを選択してダイアログを完成させ、「OK」をクリックします。

    データ・モデル・プロジェクトは新しい「オフライン・データベース・ソース」フォルダで更新され、オフライン・データベースの名前の付いた空のフォルダが含まれます。

  5. 「接続」リストで、データ・モデル・プロジェクトのビジネス・コンポーネントをテストするときに接続するオンライン・データベースを選択します。

    選択するオンライン・データベースとオフライン・データベースは、データベース・オブジェクト名を確保しテストを有効化するため、同じスキーマを保持している必要があります。ビジネス・コンポーネントのテストの詳細は、「Oracle ADFモデル・テスターの使用方法」を参照してください。

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

データ・モデル・プロジェクトでオフライン・データベース定義を作成するには:

  1. 「アプリケーション」ウィンドウで、オフライン・データベースを作成するフォルダを右クリックし、「新規」→「ソース・データベースからのオフライン・データベース・オブジェクト」を選択します。
  2. データベース・オブジェクトのリバース・エンジニアリング・ウィザードの「データベース」ページで、オンライン・データベース接続が「ソース・データベース」として表示されていることを確認し、「次へ」をクリックします。
  3. 「オブジェクトの選択」ページで、「問合せ」をクリックして「使用可能」リストから目的のメソッドを1つ以上選択し、「追加」ボタンをクリックして、それらを「選択済」リストに移動します。
  4. 「終了」をクリックします。

アプリケーション・サーバーまたはデータベース依存性に関する必知事項

ADFビジネス・コンポーネントを使用して構築されたアプリケーションは、OracleがADFアプリケーション対応として動作保証している任意のアプリケーション・サーバー(Oracle WebLogic ServerやGlassFishなど)にデプロイし、実行できます。ビジネス・コンポーネントは、プレーンなJavaクラスとXMLファイルを使用して実装されているため、Java仮装マシンが存在するすべての実行環境で使用可能です。つまり、ADFビジネス・コンポーネントを使用して構築されたサービスは、実行時にアプリケーションのコンテナと呼ばれるJava EEサーバーの内部と、サーバーの外部の両方で簡単に使用できます。ADFアプリケーションのデプロイとサポートされているアプリケーション・サーバーの詳細は、「Fusion Webアプリケーションのデプロイ」を参照してください。

顧客は、コマンド行のバッチ・プログラム、Webサービス、カスタム・サーブレット、JSPページなどの様々な構成でアプリケーション・モジュールを日常的に使用します。

「データベース接続を使用してデータ・モデル・プロジェクトを初期化する方法」で説明されているように、Oracle以外のデータベースと連携するアプリケーションを構築することもできます。ただし、Oracleデータベースを対象とするアプリケーションでは、ADF Business Componentsに対して様々な最適化が構築されています。

ノート:

同じサーバーで実行されているADFアプリケーションでの複数のSQLスタイルの使用のサポートは、ADFで実装もサポートもされていません。したがって、ADFアプリケーション開発者は、同じ管理対象サーバーで実行することを計画しているADFアプリケーションすべてが、SQLスタイルに単一値を使用することを確認する必要があります。設計時に、ビジネス・コンポーネントの初期化ダイアログを使用してプロジェクト・レベルで、またはadf-config.xmlファイルでグローバルにSQLスタイルを設定できます。SQLBuilderプロパティの設定に使用するアプローチに関係なく、実際には、値は同じ管理対象サーバーで実行されているすべてのADFアプリケーションに対して同じである必要があります。この要件を実装しないと、ADFが問合せ文の処理に使用するバインディング・スタイルでランタイム競合が発生し、アプリケーションのSQL検証エラーの原因となることがあります。また、ADFアプリケーションがOracleとOracle以外の両方のデータベースに対して実行されるシナリオでは、同じ管理対象サーバーのすべてのアプリケーションでSQLスタイルとしてSQL92が選択されている必要があることに注意してください。

ADFビジネス・コンポーネントのデータ型に関する必知事項

ADFビジネス・コンポーネントは、文字列、日付、数値データを含めJava言語が提供する組込みのデータ型と互換性があります。これらのJavaデータ型に加え、ADFビジネス・コンポーネントのoracle.jbo.domainパッケージはOracleデータベースに最適化された型を提供しています。表3-2はJava言語が提供する組込みの型以外に使用できるADFビジネス・コンポーネント固有の型を示しています。

表3-1 oracle.jbo.domainパッケージでの基本データ型

データ型 パッケージ 説明

DBSequence

oracle.jbo.domain

データベース・トリガーにより割り当てられた、連続した整数

RowID

oracle.jbo.domain

OracleデータベースのROWID

BFileDomain

oracle.jbo.domain

バイナリ・ファイル(BFILE)オブジェクト

BlobDomain

oracle.jbo.domain

バイナリ・ラージ・オブジェクト(Binary Large Object: BLOB)

ClobDomain

oracle.jbo.domain

キャラクタ・ラージ・オブジェクト(CLOB)

Struct

oracle.jbo.domain

ユーザー定義オブジェクト型

Array

oracle.jbo.domain

ユーザー定義コレクション・タイプ(例: VARRAY)

後方互換性のために、ADFビジネス・コンポーネントは引き続き、Javaの型が標準になる前に使用可能だったoracle.jbo.domainパッケージの一連のデータ型を選択するためのオプションを提供しています。表3-2は、後方互換性が必要な場合に使用できる型を示しています。

表3-2 oracle.jbo.domainパッケージの後方互換可能なデータ型

データ型 パッケージ 説明

Number(デフォルトで使用されません)

oracle.jbo.domain

すべての数値データ。「Numberは抽象クラスです」に関係するコンパイラ・エラーまたは実行時エラーが発生した場合は、oracle.jbo.domain.Numberではなくjava.lang.Numberを使用していることを示しています。クラスの先頭のpackage行の後に次の行を追加すると、この種類のエラーを防止できます。

import oracle.jbo.domain.Number;

Date

oracle.jbo.domain

日付および(オプションの)時間

Timestamp

oracle.jbo.domain

タイムスタンプ値

TimestampTZ

oracle.jbo.domain

タイムスタンプ値およびタイム・ゾーン情報

TimestampLTZ

oracle.jbo.domain

JavaVMまたはADF Context(アプリケーションのadf-config.xmlでEL式を使用して構成されている場合)から取得したタイムゾーン値およびローカルのタイム・ゾーン情報:

<user-time-zone-config xmlns=
  "http://xmlns.oracle.com/adf/usertimezone/config">
  <user-timezone expression= "EL exp" />
</user-time-zone-config>

このEL式が評価されて現在のエンド・ユーザーのタイム・ゾーンが決定されるか、この値はJavaVMのタイム・ゾーンにデフォルト設定されます。

数値の表示に関する必知事項

「Oracle用拡張Java」型マップと「Oracleドメイン」型マップとでは、数値データの処理が異なります。新しいアプリケーションを作成する際、デフォルト型マップの「Oracle用拡張Java」により数値データをjava.math.BigDecimalクラスにマップし、java.math.Numberから継承します。java.math.BigDecimalのデフォルト値は、Fusion Webアプリケーションのビュー・レイヤーの方法に一致し、ADF Facesコンポーネントで構成されますが、数値データ(WebページでADF Faces入力フィールドにより表示される数値など)の位置合せが維持されます。「Oracleドメイン」型マップでは数値データをoracle.jbo.domain.Numberクラスにマップしますが、ADF Facesコンポーネントで期待される位置合せでデータは表示されない場合があります。この位置合せ問題とは別にして、「Oracleドメイン」型マップは有効な選択肢であり、ADF Facesコンポーネントのないアプリケーションは問題なく機能します。

ADFビジネス・コンポーネントのモデル・プロジェクト・プロパティのカスタマイズ方法

ビジネス・コンポーネントの作成を開始する前に、ADFビジネス・コンポーネントを構成するために使用できる多数のプロジェクト・プロパティについて理解を深めておくことをお薦めします。「プロジェクト・プロパティ」ダイアログで行った選択は、編集中のデータ・モデル・プロジェクトに適用されます。データ・モデル・プロジェクト用に生成したビジネス・コンポーネントやサブパッケージの名前の接尾辞命名規則をはじめ様々なプロパティを指定できます。

始める前に:

JDeveloperのプロジェクトの管理について理解しておくと役立つ場合があります。『Oracle JDeveloperによるアプリケーションの開発』Oracle JDeveloperによるアプリケーション開発のスタート・ガイドに関する項を参照してください。

また、データ・モデル・プロジェクトでグローバルに指定できるプリファレンスを理解するうえで役立つこともあります。「ADFビジネス・コンポーネント・プリファレンスのカスタマイズ方法」を参照してください。

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

データ・モデル・プロジェクト・プロパティをカスタマイズするには:

  1. 「アプリケーション」ウィンドウで、共有アプリケーション・モジュールを作成するプロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。
  2. 「プロジェクト・プロパティ」ダイアログで「ADFビジネス・コンポーネント」を開き、ツリー内で目的のノードを選択します。ダイアログのどのページでもヘルプを参照するには、[F1]を押します。

ADFビジネス・コンポーネント・プリファレンスのカスタマイズ方法

ADFビジネス・コンポーネント用に構成される設計時および実行時の多数のオプションがJDeveloperプリファレンス・レベルで指定されます。ADFビジネス・コンポーネントのこれらのプリファレンスについて理解を深めておくことをお薦めします。「プリファレンス」ダイアログで行った選択は、作成する各データ・モデル・プロジェクトに適用されます。

「ADFビジネス・コンポーネントのモデル・プロジェクト・プロパティのカスタマイズ方法」で説明されているとおり、グローバルに指定した特定のプリファレンスは個々のデータ・モデル・プロジェクトでオーバーライドできます。

始める前に:

また、個々のデータ・モデル・プロジェクトに指定できるプリファレンスを理解するうえで役立つこともあります。詳細は、「ADFビジネス・コンポーネントのモデル・プロジェクト・プロパティのカスタマイズ方法」を参照してください。

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

ADFビジネス・コンポーネント・プリファレンスをカスタマイズするには:

  1. JDeveloperで、「ツール」→「プリファレンス」の順に選択します。
  2. 「プリファレンス」ダイアログで「ADFビジネス・コンポーネント」を開き、ツリー内で目的のノードを選択します。ダイアログのどのページでもヘルプを参照するには、[F1]を押します。

ビジネス・コンポーネントの作成および編集

JDeveloperのデザインタイムを使用してADFデータ・モデルを操作してデータバインドされたページを構築する他、専用のウィザードおよび概要エディタを使用してADFビジネス・コンポーネントを作成および編集します。

JDeveloperにはデータ・モデル・プロジェクトのビジネス・コンポーネントを作成およびカスタマイズするための包括的な設計時サポートが含まれています。これらの機能によって、専用ウィザードを使用したコンポーネントの作成、概要エディタでのプロパティの変更およびソース・エディタでの定義ファイルの表示を実行できます。

ウィザードを使用した新規コンポーネントの作成方法

「新規ギャラリ」の「ADFビジネス・コンポーネント」カテゴリでは、JDeveloperはそれぞれのビジネス・コンポーネントを作成するためのウィザードを提供しています。各ウィザードでは、新規コンポーネントのコンポーネント名を指定し、どのパッケージにコンポーネントを配置するかを選択できます。パッケージがまだ存在しない場合、新規コンポーネントがそのパッケージの最初のコンポーネントになります。

各ウィザードには、コンポーネント・タイプを作成するために必要な情報を収集する、一連のページが表示されます。「終了」をクリックすると、XMLドキュメント・ファイルが保存され、新規コンポーネントが作成されます。さらに、Javaクラス・ファイルを生成するために「プロジェクト・プロパティ」ダイアログの「ADFビジネス・コンポーネント」→「オプション」ページでデフォルトの「コード生成」オプションを変更すると、JDeveloperではXMLドキュメント・ファイルに加え初期カスタムJavaクラス・ファイルも作成できます。

表からのビジネス・コンポーネントの作成ウィザードは、様々なビジネス・コンポーネント・タイプの生成を単一のエンドツーエンドのプロセスに組み合せた唯一のウィザードであるため、JDeveloperで特に役立ちます。このウィザードを使用すると、多数のビジネス・コンポーネントを迅速かつ容易に作成できます。オンラインまたはオフラインのデータベースに基づいてエンティティ・オブジェクトを作成し、その後、エンティティ・ベースのビュー・オブジェクトまたは問合せベースのビュー・オブジェクトのいずれかとデータ・モデルのビュー・インスタンスを含むアプリケーション・モジュールを作成できます。最後に、ウィザードは連携しているビジネス・コンポーネント間の関係を表示するためのビジネス・コンポーネント・ダイアグラムを生成するオプションを提供します。

ウィザードを使用した後、作成するビジネス・コンポーネントを編集して、後で新規ビジネス・コンポーネントを追加できます。

始める前に:

様々なADFビジネス・コンポーネントを理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントについて」を参照してください。

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

連携するビジネス・コンポーネントを1回で作成するには:

  1. 「アプリケーション」ウィンドウで、エンティティ・オブジェクトを作成するプロジェクトを右クリックし、「新規」を選択します。
  2. 「新規ギャラリ」で、「ビジネス層」を展開し、「ADFビジネス・コンポーネント」を選択してから「表からのビジネス・コンポーネント」を選択し、「OK」をクリックします。

    これがプロジェクトで作成する最初のコンポーネントである場合、「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログが表示され、データベース接続を選択できます。「データベース接続を使用してデータ・モデル・プロジェクトを初期化する方法」の説明に従い、ダイアログを完了します。

  3. 表からのビジネス・コンポーネントの作成ウィザードの「エンティティ・オブジェクト」ページで、使用可能なデータベース・オブジェクトを表示するためのデータベース・スキーマをフィルタリングし、エンティティ・オブジェクトを作成するデータベース・オブジェクトを選択します。「次へ」をクリックします。

    デフォルトのパッケージ名を変更する場合は、パッケージ名にrestなどの予約語を使用しないでください。パッケージの命名の詳細は、「パッケージの命名規則に関する必知事項」を参照してください。

  4. 「エンティティ・ベースのビュー・オブジェクト」ページで、エンティティ・オブジェクト定義の更新可能なビュー・オブジェクト定義を作成するための使用可能なエンティティ・オブジェクトを選択します。「次へ」をクリックします。

    このウィザードで作成するビュー・オブジェクト定義には、エンティティ・オブジェクトの1回の使用が含まれ、そのオブジェクト内のすべての属性を公開する点に注意してください。

  5. 「問合せベースのビュー・オブジェクト」ページで、読取り専用のビュー・オブジェクト定義を作成するための使用可能なデータベース・オブジェクトを選択します。「次へ」をクリックします。
  6. 「アプリケーション・モジュール」ページで、デフォルト選択は未変更のままにし、「次へ」をクリックします。
  7. 「ダイアグラム」ページで、「ビジネス・コンポーネント・ダイアグラムに追加」を選択し、「次へ」をクリックします。
  8. 「サマリー」ページで、ウィザードによって作成されるビジネス・コンポーネントのリストを確認し、「終了」をクリックします。

ポップアップ・メニューを使用した新規コンポーネントの作成方法

「アプリケーション」ウィンドウにパッケージが存在していれば、「アプリケーション」ウィンドウに表示したコンテキスト・メニューからコンポーネントを選択することで、任意のタイプの追加のビジネス・コンポーネントをすばやく作成できます。コンポーネントを追加するには、コンポーネントを配置するデータ・モデル・プロジェクト内のパッケージを右クリックし、「新規」メニューからコンポーネントを選択します。「新規」メニューに表示されるコンポーネントは、選択したプロジェクトのタイプによって異なります。

図3-3に、データ・モデル・プロジェクトでパッケージを右クリックした後で、「アプリケーション」ウィンドウのコンテキスト・メニューに「新規」メニューがどのように表示されるかを示します。コンテキスト・メニューはADFビジネス・コンポーネント・データ・モデル・プロジェクトに表示されるため、使用可能なコンポーネントはADFビジネス・コンポーネントに限定されます。

図3-3 各種ビジネス・コンポーネント作成用のパッケージのポップアップ・メニュー・オプション

この図は周囲のテキストで説明しています

「アプリケーション」ウィンドウのポップアップ・メニューには、右クリックするとそのプロジェクトに適したオプションが表示されます。ポップアップ・メニューに「ADFビジネス・コンポーネント」オプションが表示されない場合は、右クリックしたプロジェクトがADFビジネス・コンポーネント・モデル・プロジェクトであることを確認してください。

始める前に:

様々なADFビジネス・コンポーネントを理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントについて」を参照してください。

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

個々のビジネス・コンポーネントをデータ・モデル・プロジェクトに追加するには:

  1. 「アプリケーション」ウィンドウで、新規ビジネス・コンポーネントを作成するモデル・プロジェクト内のパッケージを右クリックし、「新規」ビジネス・コンポーネント名を選択します。
  2. ビジネス・コンポーネントのウィザードで、ウィザードのページを完了し、「終了」をクリックします。ウィザードのどのページでもヘルプを参照するには、[F1]を押します。

ビジネス・コンポーネント作成時の処理

ADFビジネス・コンポーネントの各コンポーネントには、宣言的な設定によって制御される、組込みランタイム機能が付属しています。これらの設定は、コンポーネントと同じ名前のXMLドキュメント・ファイルに格納されています。

図3-4は、「アプリケーション」ウィンドウにデータ・モデル・プロジェクトの各ビジネス・コンポーネントのXMLドキュメント・ファイルがどのように表示されるかを示しています。「アプリケーション」ウィンドウにXMLドキュメント・ファイルを表示するには、JDeveloperでビジネス・コンポーネントを作成したときに割り当てられた名前のノードを展開します。たとえば、ビュー・オブジェクト・ノードSDeptViewを展開して、関連付けられたXMLドキュメント・ファイルSDeptView.xmlを表示できます。コンポーネントの概要エディタを表示するには、XMLドキュメント・ファイルまたはそのコンポーネント・ノードをダブルクリックします。

図3-4 コンポーネントXMLファイルを表示している「アプリケーション」ウィンドウ

この図は周囲のテキストで説明しています

図3-5は、com.yourcompany.yourappパッケージ内で作成した、アプリケーション・モジュールYourServiceなどのアプリケーション固有のコンポーネントに対するXMLドキュメント・ファイルを示しています。対応するXMLドキュメントは、データ・モデル・プロジェクトのソース・パスのルート・ディレクトリ内のサブディレクトリ./com/yourcompany/yourappに保存されます。そのXMLファイルには、実行時にアプリケーション・モジュール実装を提供するJavaクラスの名前が記録されます。この場合、XMLにはOracle ADFが提供するoracle.jbo.server.ApplicationModuleImplベース・クラスの名前が記録されます。

図3-5 アプリケーション・モジュールのXMLドキュメント・ファイル

この図は周囲のテキストで説明しています

カスタマイズを行わずに使用した場合、コンポーネントは、XMLドキュメントで完全に定義されており、コンポーネントのカスタムJavaコードやJavaクラス・ファイルをまったく必要とせず、十分な機能を備えています。ADFビジネス・コンポーネントのコンポーネントの組込み機能を拡張する必要がない場合、また、組込みイベントを処理するカスタム・コードを記述する必要がない場合、このXMLのみの方法でコンポーネントを使用できます。

「ビジネス・コンポーネントJavaサブクラスの生成方法」に説明されているとおり、コンポーネントの動作を拡張するなど、コンポーネントのカスタム・コードを記述する必要がある場合、該当するコンポーネントに対するオプションのカスタムJavaクラスを有効にできます。

モデル・プロジェクト組織に関する必知事項

ADFビジネス・コンポーネントはJavaで実装されているため、クラスおよびインタフェースはパッケージ化されています。Javaパッケージは、ピリオドで区切った名前で識別され、開発者は階層型のネーミング構造でコードを整理できます。

ADFビジネス・コンポーネントにより提供されたソース・コードを構成するクラスおよびインタフェースは、oracle.jboパッケージおよび多数のサブパッケージに含まれます。ただし、ADFビジネス・コンポーネントを使用した日常作業においては、主に次の2つの主要パッケージに含まれるクラスやインタフェースを使用します。

  • ビジネス・サービス・クライアントの連携のために設計されたすべてのインタフェースが含まれる、oracle.jboパッケージ

  • これらのインタフェースを実装するクラスが含まれるoracle.jbo.serverパッケージ

ノート:

ここでのクライアントという用語は、ビジネス・サービスとしてアプリケーション・モジュール・コンポーネントにアクセスするモデル・レイヤー、ビュー・レイヤーまたはコントローラ・レイヤー内のコードを意味します。

図3-6に、アプリケーション・モジュール・コンポーネントの具体的な例を示します。アプリケーション・モジュールのためのクライアント・インタフェースは、oracle.jboパッケージの中のApplicationModuleインタフェースです。このインタフェースは、クライアントがアプリケーション・モジュールとの連携に利用可能なメソッドの名前やシグネチャを定義しますが、その機能の実装の仕様は含まれていません。アプリケーション・モジュール・コンポーネントのベースとなる機能を実装するクラスは、oracle.jbo.serverパッケージに含まれているApplicationModuleImplというクラスです。

図3-6 ADFビジネス・コンポーネントによるインタフェースと実装の分離

この図は周囲のテキストで説明しています

パッケージの命名規則に関する必知事項

ADFビジネス・コンポーネントはJavaで実装されているため、クラス、インタフェース、およびメタデータ・ファイルなどアプリケーションのコンポーネントもパッケージ化されます。

コンポーネントが他の組織の再使用可能なコンポーネントと競合しないように、パッケージ名の先頭に組織名またはWebドメイン名を付けます。たとえば、Apacheでは、Tomcat Webサーバーと関連付けるためにパッケージ名としてorg.apache.tomcatを指定しており、Oracleでは、XML Parserのパッケージ名としてoracle.xml.parserを指定しています。自社アプリケーション用に作成したコンポーネントは、com.yourcompany.yourappなどの名前でパッケージおよびそのサブパッケージに配置されます。

指定するパッケージ名では、すでにADFビジネス・コンポーネント・プロジェクト内に存在するか、特定のテクノロジの名前を含んでいるオブジェクトの名前(restなど)を参照することはできません。ADFビジネス・コンポーネント・ウィザードでデフォルト・パッケージ名を変更して、予約語を使用しようとしても、アラート・ダイアログが表示され、実行できません。たとえば、restは予約語なので、JDeveloperでパッケージにadf.sample.adfbc.restのような名前を付けることは規則違反です。

具体的な例として、Oracle ADFのSummitサンプル・アプリケーションの主要なビジネス・サービスを構成するビジネス・コンポーネントは、oracle.summit.modelパッケージおよびサブパッケージに配置されています。図3-7に示すように、これらのコンポーネントはSummitADFワークスペースのModelプロジェクトにあり、次のように配置されています。

  • oracle.summit.model.diagramにはビジネス・コンポーネント・ダイアグラムが含まれています。

  • oracle.summit.model.entitiesには、エンティティ・オブジェクトが含まれています。

  • oracle.summit.model.servicesには、SummitAppModuleアプリケーション・モジュールが含まれています。

  • oracle.summit.model.viewsには、ビュー・オブジェクトが含まれています。

図3-7 コアSummit ADFサンプル・アプリケーションでのADFビジネス・コンポーネントの配置

図3-7の説明が続きます
「図3-7 コアSummit ADFサンプル・アプリケーションでのADFビジネス・コンポーネントの配置」の説明

自社アプリケーションでは、最適なパッケージ構成を選択できます。具体的には、同じタイプのコンポーネントを1つのパッケージにまとめる必要はありません。

パッケージに最適なコンポーネント数はありません。ただし、最適な構造は二極間(すべてのコンポーネントを1つのパッケージにまとめる構造と各コンポーネントを個々のパッケージに分ける構造)のどこかに収まります。

プロジェクトは、他のデータ・モデル・プロジェクトでの再使用のためにJDeveloperがサポートする最小レベルの単位であることを考慮に入れる必要があります。そのため、コンポーネントをどのように配置するかを考慮する場合もあります。詳細は、「ADFライブラリへの再利用可能なADFコンポーネントのパッケージ化」を参照してください。

コンポーネントの名前変更に関する必知事項

JDeveloperは、アプリケーションの発展につれ変更内容を統合するために役立つリファクタ・アクションを通じてコンポーネントのリファクタをサポートしています。JDeveloperを使用してデータ・モデル・プロジェクトのビジネス・コンポーネントをリファクタすると、コンポーネントの名前を変更したり、それらを別のパッケージに移動でき、さらにJDeveloperはリファクタされたコンポーネントへのすべての参照を検出し、更新します。可能な場合は常に、JDeveloperのリファクタ・アクションを使用してエラーを招き易いプロジェクトの手動での編集を回避できます。データ・モデル・プロジェクトのビジネス・コンポーネントのリファクタの用途と制限の詳細は、「Fusion Webアプリケーションのリファクタ」を参照してください。

コンポーネントの概要エディタを使用したコンポーネントの編集方法

ビジネス・コンポーネントが作成された後は、「アプリケーション」ウィンドウでコンポーネントをダブルクリックするか、コンポーネントを選択し、ポップアップ・メニューから「開く」オプションを選択することにより、対応する概要エディタを使用してそのプロパティを編集することができます。

概要エディタには、ウィザードに表示されるのと同じ編集オプションが表示されますが、表示項目の配置が異なる場合があります。概要エディタでは、コンポーネントのすべての特徴を変更できます。コンポーネントのエディタで変更を加えると、コンポーネントのXMLドキュメント・ファイルが更新され、関連するすべてのカスタムJavaファイルが必要に応じて更新されます。概要エディタは、モーダル・ダイアログではなくJDeveloperの編集ウィンドウであるため、必要な数のコンポーネントの概要エディタを開いて表示できます。

始める前に:

プロジェクトを管理するために使用できるツールについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』「Oracle JDeveloperの使用」を参照してください。

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

データ・モデル・プロジェクトのビジネス・コンポーネントのプロパティを編集するには:

  1. 「アプリケーション」ウィンドウで、編集するビジネス・コンポーネントを右クリックし、「開く」を選択します。
  2. ビジネス・コンポーネントの概要エディタで、ビューの左側にあるナビゲーション・タブをクリックし、関連するプロパティ・グループを編集します。概要エディタのどのページでもヘルプを参照するには、[F1]を押します。
  3. 概要エディタで、「ソース」タブをクリックしXML定義ソース内の変更を表示します。
  4. 概要エディタで、「履歴」タブをクリックしてリビジョン履歴を表示し、現在の概要エディタで表示されているXMLソースの内容と過去のリビジョンの内容を比較します。

    ファイルのバージョン管理の詳細は、『Oracle JDeveloperによるアプリケーションの開発』「ソース・コントロールを使用したアプリケーションのバージョニング」を参照してください。

  5. JDeveloperで、「ファイル」→「保存」を選択し、プロパティの変更をビジネス・コンポーネントのXML定義ファイルに保存します。

ビジネス・コンポーネントのテスト、リファクタおよび視覚化

JDeveloperのデザインタイムを使用して、ADFビジネス・コンポーネントをテスト、リファクタおよび視覚化します。

JDeveloperにはデータ・モデル・プロジェクトで作成するビジネス・コンポーネント数の急増を管理するための包括的な設計時サポートが含まれています。これらの機能では、ビジネス・コンポーネントのテスト、リファクタおよび視覚化を実行できます。

Oracle ADFモデル・テスターの使用方法 /

アプリケーション・モジュール・コンポーネントの作成後は、組込みのOracle ADFモデル・テスターを使用し、繰り返しテストできます。Oracle ADFモデル・テスターを起動するには、「アプリケーション」ウィンドウでアプリケーション・モジュールを選択するか、またはビジネス・コンポーネント・ダイアグラムでポップアップ・メニューから「実行」または「デバッグ」 を選択します。

図3-8 Oracle ADFモデル・テスター

図3-8の説明が続きます
「図3-8 Oracle ADFモデル・テスター」の説明

図3-8に示すとおり、Oracle ADFモデル・テスターではアプリケーション・モジュールのデータ・モデルにビュー・オブジェクト・インスタンスを提供し、動的に生成されるユーザー・インタフェースを使用してユーザーとインスタンスとの対話を可能にします。このツールでは、アプリケーション・モジュールのクライアント・インタフェース・メソッドのリストも提供され、アプリケーション・モジュールのノードをダブルクリックすると、対話的にテストできます。このツールは、Webページのビュー・レイヤー作成の前後において、ビジネス・サービスのテストやデバッグに必要不可欠なものです。

始める前に:

データ・モデル・プロジェクトの実行時動作について理解しておくと役立つ場合があります。詳細は、「ビュー・インスタンスの問合せのテスト」を参照してください。

また、ADFビジネス・コンポーネントを含めOracle ADFアプリケーションをテストするために使用できる機能について理解しておくと役立つことがあります。詳細は、「ADFコンポーネントのテストとデバッグ」を参照してください。

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

アプリケーション・モジュール構成内のビュー・インスタンスをテストするには:

  1. 「アプリケーション」ウィンドウで、テストするアプリケーション・モジュールを右クリックし、「実行」を選択します。

    または、デバッグを有効にしたOracle ADFモデル・テスターでアプリケーションを実行する場合は、「デバッグ」を選択します。このオプションの詳細は、「テストとデバッグのためのOracle ADFモデル・テスターの使用」を参照してください。

  2. Oracle ADFモデル・テスターでビュー・オブジェクトを実行するには、データ・モデル・ツリーを開き、目的のビュー・オブジェクト・ノードをダブルクリックします。
  3. データ・モデル・ツリー内のノードを右クリックして、そのノードのポップアップ・メニューを表示します。たとえば、ビュー・インスタンス・ノードでは、問合せを必要に応じて再実行し、データ・モデル・ツリーからのビュー・インスタンスの削除およびその他のタスクを実行できます。
  4. タブのポップアップ・メニューを表示するには、開いているデータ・ビューアのタブを右クリックします。たとえば、データ・ビューアを閉じたり、別のウィンドウで開くことができます。
  5. Oracle ADFモデル・テスターのヘルプを表示するには、[F1]を押します。

Oracle ADFソース・コードの取得に関する必知事項

ADFビジネス・コンポーネントはビジネス上非常に重要なアプリケーションにおいて使用されることが多いため、サポート契約を締結しているお客様は、ADFビジネス・コンポーネントを含めてOracle ADFの完全なソースをOracle Worldwide Supportから入手できます。「ADF宣言デバッガの使用」に説明されているように、Oracle ADFの完全なソース・コードは、問題の診断を支援するための重要なツールです。「拡張クラスによるフレームワークの動作のカスタマイズ」に説明されているように、Oracle ADFの完全なソース・コードを使用すると、必要に応じてベース・フレームワーク機能を適切に拡張する方法を理解するためにも役立ちます。

データ・モデル・プロジェクトでのビジネス・コンポーネントの使用方法を検索する方法

オフライン・データベースのデータベース・オブジェクトの名前またはADFビジネス・コンポーネントの名前を変更する前に、選択したアイテムを参照するすべてのオブジェクトを表示できます。「ログ」ウィンドウの「使用方法の検索」ページを使用して、選択したアイテムのデータ・モデル・プロジェクトの使用方法をすべて表示できます。

始める前に:

JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』「Javaコードの使用」を参照してください。

また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。詳細は、「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。

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

ADFビジネス・コンポーネントによって使用されているアイテムを検索するには:

  1. 「アプリケーション」ウィンドウのデータ・モデル・プロジェクト内で、データ・モデル・プロジェクトを開き、使用方法を検索するアイテムを選択します。

    データベース・オブジェクトの使用方法を検索するには、「オフライン・データベース・ソース」フォルダを開き、目的のデータベース・オブジェクトを選択します。

  2. 項目を右クリックして「使用方法の検索」を選択します。

    データベース列の使用方法を検索するには、「構造」ウィンドウを表示し、「構造」ウィンドウ内の列を右クリックします。

  3. 「ログ」ウィンドウで、選択したアイテムを参照しているビジネス・コンポーネントを確認します。

    「ログ」ウィンドウの「使用方法の検索」ページでは、名前付きアイテムがJDeveloper内のエディタにリンクされます。必要に応じて、リスト内のアイテムをクリックし、JDeveloper内でその詳細を表示します。

データ・モデル・プロジェクトでビジネス・コンポーネントの依存性を探索する方法

依存性エクスプローラでは、展開できるダイアグラムを通じてデータ・モデル・プロジェクト内のアーティファクトの使用関係を視覚化できます。データ・モデル・プロジェクト内のビジネス・コンポーネントの数が増えると、ビジネス・コンポーネントとその他のプロジェクト・アーティファクト間の関係を探索することが必要になる場合があります。ダイアグラムを展開するときに、選択したコンポーネントを参照するアーティファクトと選択したコンポーネントで参照されるアーティファクトを表示できます。このように、依存性エクスプローラは、「使用方法の検索」ログ・ウィンドウで返された使用情報よりも包括的な関係情報を表示します。

ダイアグラムでデータ・モデル・プロジェクトに対して表示されるアーティファクトには、様々なビジネス・コンポーネントXML定義ファイル(ビュー・オブジェクト、エンティティ・オブジェクト、アプリケーション・モジュールなど)、プロジェクト構成ファイル(bc4j.xmlModel.jpxなど)、リソース・バンドル・ファイル(ModelBundle.propertiesなど)、Java実装ファイル(SummitViewObjectImpl.javaSummitEntityImpl.javaなど)、ADFビジネス・コンポーネント・フレームワーク・ソース・ファイル(Oracle ADFビジネス・コンポーネントの型クラスなど)が含まれます。

図3-9に、ビュー・オブジェクト用のCountryVO.xmlファイルにフォーカスを置いた依存性エクスプローラを示します。左側のノードにはCountryVOを参照するアーティファクトが表示され、右側のノードはCountryVOによって参照されているアーティファクトです。右クリック・メニューから「開く」を選択して、JDeveloperソース・エディタにこれらのアーティファクトのいずれかを開き、詳細な参照を表示できます。

図3-9 ADFビジネス・コンポーネント・アーティファクトを表示している依存性エクスプローラ

図3-9の説明が続きます
「図3-9 ADFビジネス・コンポーネント・アーティファクトを表示している依存性エクスプローラ」の説明

始める前に:

JDeveloperで提供される共通開発ツールに関する知識が役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』「Oracle JDeveloperの使用」を参照してください。

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

ADFビジネス・コンポーネントとその他のプロジェクト・アーティファクト間の依存性を検証するには:

  1. 「アプリケーション」ウィンドウのデータ・モデル・プロジェクト内で、データ・モデル・プロジェクトを展開し、依存性を検証するビジネス・コンポーネントを選択します。
  2. 項目を右クリックして「依存性の参照」を選択します。
  3. 依存性エクスプローラで、ダイアグラム・ノードのプラス・アイコンをクリックして、ダイアグラムを展開します。ダイアグラムの左側を展開して、選択したコンポーネントを参照するアーティファクトを表示するか、右側を展開して、コンポーネントにより参照されるアーティファクトを表示します。

    選択したコンポーネントの左側のノードを展開すると、アプリケーションでアーティファクトが使用されている場所を確認できます。これらは、コンポーネントで「使用方法の検索」を選択したときに「ログ」ウィンドウの「使用方法の検索」ページに表示されるのと同じ項目です。

  4. ダイアグラム・ノードの横のリンク付きの数字をクリックして、参照の詳細リストを表示し、参照をクリックして参照を含むファイルを開きます。

    依存性エクスプローラの詳細は、[F1]をクリックします。

データ・モデル・プロジェクトでのビジネス・コンポーネントのリファクタ方法

「アプリケーション」ウィンドウででコンポーネントを選択し、ポップアップ・メニューから「リファクタ」→「名前の変更」を選択すると、いつでもコンポーネントの名前を変更できます。「構造」ウィンドウには、アプリケーション・モジュール・データ・モデルのビュー・オブジェクト属性やビュー・インスタンスなど「アプリケーション」ウィンドウには表示されないコンポーネントの詳細のための「名前の変更」ポップアップ・メニュー・オプションも表示されます。また、「アプリケーション」ウィンドウ内で[Ctrl]キーを押しながらクリックして1つ以上のコンポーネントを選択し、次にポップアップ・メニューから「リファクタ」→「移動」を選択すると、選択したコンポーネントを新規パッケージに移動できます。現在のデータ・モデル・プロジェクト内の古いコンポーネント名やパッケージへの参照は、自動的に修正されます。

始める前に:

JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』「Javaコードの使用」を参照してください。

また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。詳細は、「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。

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

データ・モデル・プロジェクトでビジネス・コンポーネントをリファクタするには:

  1. 「アプリケーション」ウィンドウで、ビジネス・コンポーネントを右クリックして、「リファクタ」→「名前の変更」または「リファクタ」→「移動」を選択します。
  2. オブジェクトを削除するには、「削除」を選択します。

    オブジェクトがアプリケーションの他の箇所で使用される場合、ダイアログに次のオプションが表示されます。

    • 無視: 解決されていない慣用名は、未定義参照としてコードに残ります。

    • 使用方法の表示: コンパイラ・ログに、要素の慣用名のプレビューが表示されます。ログを使用して、残りの慣用名を調査および解決することができます。

オフライン・データベース・オブジェクトのリファクタおよびビジネス・コンポーネントの更新方法

データ・モデル・プロジェクトとともにオフライン・データベース・ソースを使用している場合、データベース、個々の表および個々の列の名前を変更できます。JDeveloperは、データ・モデル・プロジェクトのADFビジネス・コンポーネントおよびオフライン・データベース自体とともにこれらのデータベース・オブジェクトのリファクタをサポートしています。加えた変更は、データベース・オブジェクトを参照する定義を持つビジネス・コンポーネントに自動的に適用されます。たとえば、オフライン・データベースでデータベース表の名前を変更した場合、その表を参照するビュー・オブジェクト問合せは新しい名前を使用するように変更されます。

始める前に:

JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』「Javaコードの使用」を参照してください。

また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。

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

  1. 「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。

  2. 「オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法」の説明に従い、データ・モデル・プロジェクトでオフライン・データベースを作成します。

ADFビジネス・コンポーネントのオフライン・データベース表の名前をリファクタするには:

  1. 「アプリケーション」ウィンドウで、データ・モデル・プロジェクトを開き、編集したいデータベース・オブジェクトを選択します。

  2. メイン・メニューから「リファクタ」「名前の変更」を選択します。

    また、データベース・オブジェクトを右クリックして「リファクタ」「名前の変更」を選択することもできます。

  3. 「名前の変更」ダイアログで、新しい名前を入力して「 プレビュー」をクリックします。

  4. 「ログ」ウィンドウで、データベース・オブジェクト名を参照しているビジネス・コンポーネントを確認します。

    「ログ」ウィンドウの「名前の変更」ページで名前付きアイテムがJDeveloper内のエディタにリンクされます。必要に応じて、リスト内のアイテムをクリックし、JDeveloper内でその詳細を表示します。

  5. 「リファクタ」をクリックし、「ログ」ウィンドウに表示された新しい名前を適用します。

ADFビジネス・コンポーネントのオフライン・データベース列の名前をリファクタするには:

  1. 「アプリケーション」ウィンドウのデータ・モデル・プロジェクト内で「オフライン・データベース・ソース」フォルダを開き、編集する列を含むデータベース表を選択します。
  2. 「構造」ウィンドウで、列名をダブルクリックします。

    また、データベース・オブジェクトを右クリックして「宣言に移動」を選択することもできます。

  3. オフライン・データベース表の概要エディタで、列名を編集し、[Enter]を押します。
  4. 「ログ」ウィンドウで、列名を参照しているビジネス・コンポーネントを確認します。

    「ログ」ウィンドウの「名前の変更」ページで名前付きアイテムがJDeveloper内のエディタにリンクされます。必要に応じて、リスト内のアイテムをクリックし、JDeveloper内でその詳細を表示します。

  5. 「リファクタ」をクリックし、「ログ」ウィンドウに表示された名前の変更を適用します。

ダイアグラム使用による関連ビジネス・コンポーネントの表示方法

プロジェクトが定義するビジネス・コンポーネントの数が増大すると、コンポーネントをリファクタして、最初に作成された関係を変更する場合があります。データ・モデル・プロジェクトにおける複数のコンポーネントの関係を把握するには、ビジネス・コンポーネントを概要エディタで開き、「ダイアグラム」タブをクリックします。エディタの関係ダイアグラムでは、編集するコンポーネントを太字で識別します。関連コンポーネントは、クリックするとリンクで識別されるコンポーネントを表示できるテキスト・リンクとして表示されます。

たとえば、図3-10は、ProductVOビュー・オブジェクトのエディタの「ダイアグラム」タブを示しています。ProductVOがアクセスできるエンティティ・オブジェクト(たとえば、ProductEO)、関連ビュー・オブジェクトに対するビュー・オブジェクトの関係を定義するビュー・リンク(たとえば、ProductVOItemVOの間のリンクにマウス・ポインタを置くとItemProductIdFkLinkビュー・リンクが表示される)およびビュー・リンクにより命名された関連ビュー・オブジェクト(この例では、ItemVO)をダイアグラムにより識別します。これらの各関連コンポーネントは、クリックするとエディタの「ダイアグラム」タブでコンポーネントを開くことができるリンクとして表示されます。関連コンポーネントのリンクをクリックすると、ダイアグラムを使用して、プロジェクトで定義するコンポーネント関係にナビゲートできます。

図3-10 関係ダイアグラムにおけるメイン・オブジェクトとすべての関連コンポーネントの表示

この図は周囲のテキストで説明しています

始める前に:

JDeveloperにおけるUMLクラス・ダイアグラムによるアプリケーションのモデル化のサポートについて理解しておくと役立つ場合があります。『Oracle JDeveloperによるアプリケーションの開発』「モデリングを使用するアプリケーション開発」を参照してください。

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

データ・モデル・プロジェクトのビジネス・コンポーネントの関係ダイアグラムを表示するには:

  1. 「アプリケーション」ウィンドウで、表示するビジネス・コンポーネントを右クリックし、「開く」を選択します。
  2. 概要エディタで、「ダイアグラム」タブをクリックして関係ダイアグラムに編集中のコンポーネントとそれに関連するすべてのコンポーネントを表示します。

    関係ダイアグラムでは、編集中のコンポーネントは太字で識別されます。関連コンポーネントは、クリックするとリンクで識別されるコンポーネントを表示できるテキスト・リンクとして表示されます。関連コンポーネントのリンクをクリックすると、ダイアグラムを使用して、プロジェクトで定義するコンポーネント関係にナビゲートできます。

UMLダイアグラムの使用に関する必知事項

JDeveloperでは、ADFビジネス・コンポーネントに対する充実したUMLダイアグラム・サポートが提供されます。作成済の既存のコンポーネントは、ビジネス・コンポーネント・ダイアグラムに追加して視覚化できます。また、コンポーネントの作成および変更にダイアグラムを使用することもできます。ダイアグラムは、エディタでの変更と同期しています。

新しいビジネス・コンポーネント・ダイアグラムを作成するには、JDeveloperの「新規ギャラリ」の「ADFビジネス・コンポーネント」カテゴリから、「ビジネス・コンポーネント・ダイアグラム」アイテムを使用します。このカテゴリは、Business Tierの選択肢の一部です。

ビジネス・コンポーネントのカスタマイズ

JDeveloperでは、カスタムJavaクラスを作成してADFビジネス・コンポーネントの機能を拡張またはカスタマイズできます。

コンポーネントのベース機能を拡張するため、またはイベントを処理するためにカスタム・コードを追加する必要がある場合、アプリケーション・モジュール、エンティティ・オブジェクト、ビュー・オブジェクトを含め作成するADFビジネス・コンポーネントのすべての主要タイプに対してカスタムJavaクラスを作成する必要があります。

たとえば、特定のビジネス・ロジックを実行する場合は、アプリケーション・モジュールのJavaクラスにカスタム・メソッドを追加できます。これには次のコードが考えられますが、これらのコードに限定されるものではありません。

  • 表示するデータを正しく問い合せるためのビュー・オブジェクト・プロパティの構成

  • 集計結果を取得するための、ビュー・オブジェクト行の反復処理

  • 1つ以上のビュー・オブジェクトに対する、複数ステップのプロシージャによるロジックの実行

これらの実装の詳細をアプリケーション・モジュール内で一元管理することで、次の利点が得られます。

  • コードの目的が、クライアントにより明確に伝わります。

  • 必要に応じて、複数のクライアント・ページから同じコードを簡単にコールできます。

  • ビジネス・サービス機能全体の回帰テストを簡略化できます。

  • クライアントに影響を与えることなく、実装を改善するオプションを使用可能にできます。

  • ページ内での論理的ビジネス機能の宣言的起動が可能になります。

ビジネス・コンポーネントJavaサブクラスの生成方法

エンティティ・オブジェクト、ビュー・オブジェクトおよびデータ・モデル・プロジェクトのアプリケーション・モジュールに会社レベルのサブクラスを指定できます。生成する新しいビジネス・コンポーネントがこれらのカスタム・クラスに基づくようにこのオプションを有効にするには、ADFビジネス・コンポーネント実装クラスを拡張するJavaソース・ファイルを作成する必要があり(oracle.jboパッケージ内)、このファイルが拡張された機能の最終的な追加先となる場合があります。これを実行すると、アプリケーション内のサブクラスによって選択可能なベース・フレームワーク・クラスへ後から柔軟に変更を加えることができます。その後、「プロジェクト・プロパティ」ダイアログで「ADFビジネス・コンポーネント」→「ベース・クラス」を選択しサブクラスの名前を指定します。

さらに、個々のコンポーネントのビジネス・コンポーネント用に生成するカスタム・クラスの生成を有効にできます。各概要エディタのJavaページでこのオプションを有効にすると、JDeveloperにより、構成可能なネーミングの標準に準拠した名前のコンポーネントに関連するカスタム・クラスのJavaソース・ファイルが作成されます。このクラスの名前は、コンポーネントのXMLドキュメントに記録され、コンポーネントでのみ必要とされるカスタムJavaコードは、このクラス内に記述できます。コンポーネントのカスタムJavaクラスを有効にしたら、「アプリケーション」ウィンドウでコンポーネントを開きJavaクラスをダブルクリックしてクラスを編集します。

または、JDeveloperが各コンポーネント・タイプのJavaクラスを生成する方法を制御するプロジェクトレベルの設定を変更できます。変更するには、「ツール」→「プリファレンス」を選択し、「ADFビジネス・コンポーネント」ページを開きます。選択した設定は、今後作成するすべてのビジネス・コンポーネントに適用されます。

ベスト・プラクティス:

ADFビジネス・コンポーネントを初めて使用する開発者には、ベース・フレームワーク・クラスをオーバーライドして、すべての生成されたカスタムJavaクラスがカスタマイズされた動作を選択できるようにすることをお薦めします。この方法は、個々のエンティティ・オブジェクトおよびビュー・オブジェクトのカスタム・クラスの作成より優先されます。カスタム・コンポーネントを生成するときは、「プロジェクト・プロパティ」ダイアログの「ADFビジネス・コンポーネント」→「ベース・クラス」ページで、フレームワーク・クラスをオーバーライドするように指定します。

始める前に:

ビジネス・コンポーネントのプログラム的操作について理解しておくと役立つ場合があります。詳細は、次の各項を参照してください。

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

カスタム・クラスでフレームワーク・ビジネス・コンポーネント・クラスをオーバーライドするには:

  1. 「アプリケーション」ウィンドウで、カスタム・クラスを作成するコンポーネントをダブルクリックします。
  2. コンポーネントの概要エディタで、「Java」ナビゲーション・タブを選択します。
  3. 「Java」ページで、「Javaオプションの編集」アイコンをクリックします。
  4. 「Javaオプションの選択」ダイアログで、目的の実装クラスを作成するためのJavaクラス生成オプションを選択します。
    • アプリケーション・モジュール・クラスの生成: 完全なビジネス・サービスの論理面となる機能をカプセル化するためのカスタム・メソッドを含めることができるアプリケーション・モジュール実装クラスを生成します。

    • エンティティ・オブジェクト・クラスの生成: 基礎となるデータベース表の各行の表示を処理するためのカスタム・メソッドを含めることができるエンティティ・オブジェクト実装クラスを生成します。

    • ビュー・オブジェクト・クラスの生成: アプリケーション・モジュール定義内の特定のビュー・オブジェクト定義を処理するためのカスタム・メソッドを含めることができるビュー・オブジェクト実装クラスを生成します。

    • ビュー行クラスの生成: ビュー・オブジェクトによって返される単一行の表示を処理するためのカスタム・メソッドを含めることができるビュー行実装クラスを生成します。

  5. カスタム・コードをサポートするメソッドを生成するためのオプションを選択します。

    「Javaオプションの選択」ダイアログで、クラスを作成し「アクセッサを含める」を選択した場合、JDeveloperはビジネス・コンポーネントによって定義されたすべての属性に対してアクセッサを生成します。JDeveloperはアクセッサ・メソッド名に属性名を使用するため、これらの属性名はリファクタが困難となり、カスタム・コードが使用しないメソッドを削除するには生成されたクラス・ファイルを編集する必要があります。

  6. 「OK」をクリックします。
  7. 「アプリケーション」ウィンドウでクラスを作成するビジネス・コンポーネントを開いて、componentNameImpl.javaファイルをダブルクリックします。
  8. エンティティ・オブジェクト・クラスまたはビュー行クラスを作成した場合は、ファイルを編集してビジネス・ユースケース向けに公開する必要のない属性に対して生成されたアクセッサ・メソッドを削除します。

    ヒント:

    生成されたクラス・ファイルを編集して、カスタム・ロジックによって使用されていない生成されたコードを削除し、全体的なパフォーマンスを改善します。

ビジネス・コンポーネント・メソッドのクライアントへの公開方法

クライアントからコール可能にするカスタム・コードをADFビジネス・コンポーネントに追加する場合は、クライアントに表示されるコンポーネントすべてについて、その機能をクライアントに公開できます。JDeveloperでは、クライアント・インタフェース上で1つ以上のカスタム・メソッドをクライアントに公開している各コンポーネントに対して、関連するJavaインタフェース・ファイルが自動的に保持されます。そのため、SummitAppModuleなどのアプリケーション・モジュールで作業していると仮定すると、次のようなカスタム・インタフェースを利用できます。

  • カスタム・アプリケーション・モジュール・インタフェース

    SummitAppModule extends ApplicationModule
    
  • カスタム・ビュー・オブジェクト・インタフェース

    OrderItemsInfo extends ViewObject
    
  • カスタム・ビュー行インタフェース

    OrderItemsInfoRowClient extends Row
    

これにより、クライアント・コードでは、汎用クライアント・インタフェースをより詳細なインタフェースにキャストできます。詳細なインタフェースには、特定のコンポーネントに対して選択した、クライアントからアクセス可能な一連のメソッドが含まれます。

始める前に:

カスタム・コードでオーバーライドできるADFビジネス・コンポーネント・インタフェースのメソッドについて理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントのよく使用されるメソッド」を参照してください。

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

コンポーネント実装クラスからクライアント・メソッドを公開するには:

  1. 「アプリケーション」ウィンドウで、カスタム・クラスを作成するコンポーネントをダブルクリックします。
  2. コンポーネントの概要エディタで、「Java」ナビゲーション・タブを選択します。
  3. 「Java」ページで、「クライアント・インタフェースの編集」アイコンをクリックします。
  4. 「クライアント・インタフェースの編集」ダイアログで、「使用可能」リストから目的のメソッドを1つ以上選択し、「追加」ボタンをクリックして、それらを「選択済」リストに移動します。
  5. 「OK」をクリックします。

カスタム・クラス生成時の処理

生成するカスタムJavaクラスを1つ以上選択すると、指定したJavaファイルが作成されます。たとえば、oracle.summit.model.service.SummitAppModuleという名前のアプリケーション・モジュールの場合、そのカスタムJavaファイルのデフォルト名は、アプリケーション・モジュール・クラスに対してはSummitAppModuleImpl.java、アプリケーション・モジュール定義クラスに対してはSummitAppModuleDefImpl.javaになります。どちらのファイルも、コンポーネントのXMLドキュメント・ファイルと同じ./oracle/summit/model/servicesディレクトリに作成されます。

ノート:

このガイドの例では、生成済のカスタム・コンポーネント・クラスやインタフェースの名前には、デフォルトの設定を使用しています。自社アプリケーションでこれらのデフォルトを変更するには、JDeveloperの「プリファレンス」ダイアログの「ADFビジネス・コンポーネント: クラス・ネーミング」ページを使用してください。ここでの変更は、新しく作成したコンポーネントにのみ反映されます。

ビジネス・コンポーネントのJava生成オプションは、概要エディタの「Java」ページに後でアクセスしてもそのまま反映されています。XML定義ファイルの場合と同様、このエディタでどのような変更を行っても、カスタムJavaクラスで生成されたコードは最新の状態に保たれます。後でカスタムJavaファイルが必要なくなった場合は、「Java」ページで関連するオプションを無効にすると対応するカスタムJavaファイルを削除できます。

図3-11は、YourServiceアプリケーション・モジュールに対してカスタムJavaクラスを有効にするとどうなるかを示しています。YourServiceImpl.javaソース・コード・ファイルが、コンポーネントのXMLドキュメント・ファイルと同じソース・パス・ディレクトリに作成されます。YourServiceImpl.xmlファイルでは、ApplicationModuleImplクラスではなく、com.yourcompany.yourapp.YourServiceImplベース・クラスを実行時に使用するよう、変更が反映されます。

図3-11 カスタムJavaクラスのあるコンポーネント

この図は周囲のテキストで説明しています

カスタム・インタフェースのサポートに関する必知事項

oracle.jboパッケージのJavaインタフェースによって、クライアントがアクセス可能なビジネス・サービスに対するAPIが提供されます。クライアント・コードが次のようにインタフェースと連携します。

  • ApplicationModule: アプリケーション・モジュールを処理します。

  • ViewObject: ビュー・オブジェクトを処理します。

  • Row: ビュー行を処理します。

ビジネス・サービスの次のコンポーネントのみがクライアントに表示されます。

  • アプリケーション・モジュール: サービス自体を表します。

  • ビュー・オブジェクト: 問合せコンポーネントを表します。

  • ビュー行: 指定された問合せコンポーネントの結果の各行を表します。

このパッケージには、Entityインタフェース、またはクライアントがエンティティ・オブジェクトを直接操作できるようにするメソッドは含まれていません。ビジネス・サービス実装におけるエンティティ・オブジェクトは、クライアントから直接参照されるように設計されていません。かわりに、クライアントは、アプリケーション・モジュールのデータ・モデルの一部として、ビュー・オブジェクトによる問合せデータを処理します。実際には、ビュー・オブジェクトはビジネス・サービス・レイヤー内のエンティティ・オブジェクトと自動的に連携し、エンド・ユーザーが変更したデータの検証と保存を調整します。この実行時の対話処理の詳細は、「実行時のビュー・オブジェクトとエンティティ・オブジェクトの連携処理」を参照してください。

汎用APIと強く型付けされたAPIの相違に関する必知事項

アプリケーション・モジュール、ビュー・オブジェクトやエンティティ・オブジェクトで作業を行う際、汎用APIを使用するか、そのコンポーネントに強く型付けされたAPIを有効にするために、JDeveloperでコードをカスタムJavaクラスに生成できます。たとえば、ビュー・オブジェクトでの作業中、次のような汎用APIを使用し、結果のすべての行の属性値にアクセスできます。

Row row = ordersVO.getCurrentRow();
Date shippedDate = (Date)row.getAttribute("OrderShippedDate");

汎用APIを使用した場合、パラメータの文字列名をアクセッサに渡し、戻り値の型をこの例のDateのように予想される型にキャストする必要があります。

一方、強く型付けされた作業スタイルを有効にした場合、次のようにコードを記述できます。

OrdersRow row = (OrdersRow)ordersVO.getCurrentRow();
Date shippedDate = row.getOrderShippedDate();

この場合、文字列名を渡して結果をキャストするのではなく、戻り型がコンパイル時に判明する生成済メソッド名を使用します。コンパイル時の安全性を犠牲にせずに、ビジネス・ロジック・コードからメソッドを起動する必要がある場合は、通常、強く型付けされたアクセッサを使用する必要があります。この方法は、setterメソッド内でカスタム検証ロジックを記述する場合にも役立ちますが、この場合は、ビジネス・コンポーネントでエンティティおよびビュー行実装クラスを生成するかわりに、Groovy式の使用を検討する必要が生じる場合もあります。後続の章では、Javaを使用した実装を選択するビジネス・ロジックのJavaクラスを生成して、強く型付けされた作業スタイルを有効化する方法について説明します。

ビジネス・コンポーネントでのGroovyスクリプト言語の使用

Groovyは、Javaプラットフォーム用のスクリプト言語で、Javaと同様の構文を持ちます。Groovyスクリプト言語では、ドット区切り表記法の採用により、コードの作成が簡素化されていますが、コレクション、文字列およびJavaBeansを操作する構文は引き続きサポートされています。

現在Groovy式は、エンティティ・オブジェクトとビュー・オブジェクトのビジネス・コンポーネントでサポートされています。ユーザーはADFビジネス・コンポーネント内のGroovy式を利用して、ビュー基準やバインド変数、エンティティまたはビュー・オブジェクト属性のデフォルト値、ビジネス・ルール、トリガーについて、実行時にそれらの値を指定できます。さらに、ADFビジネス・コンポーネントには、Groovy式で使用できる組込みキーワードの限定されたセットが用意されています。Groovyスクリプト言語の使用用途の詳細は、モデル・プロジェクト内の「Groovy式を使用できる場所に関する必知事項」を参照してください。

ビジネス・コンポーネント・スクリプト(.bcs)ファイルの生成

エンティティ・オブジェクトまたはビュー・オブジェクトにGroovy式を入力すると、それらのGroovy式はすべてビジネス・コンポーネントの.bcs (ビジネス・コンポーネント・スクリプト)ファイルに移入されます。ビジネス・コンポーネントの.bcsファイルは、特定のエンティティ・オブジェクトまたはビュー・オブジェクトに属するアーティファクト(Javaクラス、XMLファイル、Operations XMLファイルなど)のリストに含まれる項目の1つと考えられます。コンテキストや目的に応じて、JDeveloperの様々なUIコンテキストでGroovy式を入力する方法は、「ビジネス・コンポーネントにGroovy式を入力する方法」を参照してください。.bcsファイルにはデバッグ機能があり、通常のJavaエディタのように機能します。ブレークポイントの設定や注釈パッケージのインポート、Groovy構文のコンパイル、「ログ」ウィンドウに表示されたエラーの修正が可能です。

Groovy式のタイプ・チェックのサポート

JDeveloperはGroovy式のタイプ・チェックをサポートしています。タイプ・チェックは設計時に作成されたGroovy式の構文を精査し、エラーを検出してJDeveloperの「ログ」ウィンドウに表示します。これらのGroovy式が実行時にエラーなしで実行されるように、ADFモデル・プロジェクト内のこれらのエラーは修正してください。デフォルトで、タイプ・チェックは有効になっています。タイプ・チェックは無効化できます。タイプ・チェックを無効にした場合、実行時にのみタイプ・チェックが実行されます。Groovy式のタイプ・チェックは実行前に済ませておくことをお薦めします。Groovyのタイプ・チェックは、作成したすべてのプロジェクトまたは特定のプロジェクトを対象に有効化または無効化できます。Groovyタイプ・チェックのアプリケーション全体およびプロジェクト固有の設定の詳細は、「Groovyプロジェクトの設定に関する必知事項」を参照してください。

ノート:

groovyスクリプト・エンジンの実行オーバーヘッドを最小限に抑えるために、ADFでは、文字列リテラルまたはブール型リテラルを直接返す単純なスクリプトの最適化された実行パスを使用するか、単一の属性値を直接返すパスを使用できます。この機能を利用するために、開発者の介入は不要です。ただし、スクリプト開発者は可能なかぎりスクリプトを単純化する必要があります。

スクリプト・クラス・ファイルのサポート

アプリケーションでは、カスタム・スクリプト・クラス・ファイルを作成できます。スクリプト・クラスを使用して、他のスクリプト・クラスで使用できるクラスを定義します。スクリプト・クラス・ファイルを使用すると、任意のビジネス・コンポーネント・クラス内からコールできる、共通のGroovyスクリプト・メソッドを保持できます。これは、通常の.bcsファイルとは異なります(.bcsファイルでは、このファイルが関連付けられているコンポーネントのみがコールできるGroovyスクリプトも保持しています)。詳細は、「スクリプト式クラス・ファイルの作成方法」を参照してください。

ビジネス・コンポーネントにGroovy式を入力する方法

JDeveloperでは、エンティティ・オブジェクト、ビュー・オブジェクトおよびビュー・オブジェクト慣用名(アプリケーション・モジュール上)に対してGroovy式を定義できます。「式エディタの編集」ダイアログにGroovy式を入力します。このエディタはアプリケーションの様々なUIコンテキストで呼び出します。ADFビジネス・コンポーネントは、エンティティ・オブジェクトの属性やビュー・オブジェクトの属性へのアクセスが有用な場所でGroovyスクリプト言語の使用をサポートしており、これには属性バリデータ(エンティティ・オブジェクトの場合)、属性のデフォルト値(エンティティ・オブジェクトまたはビュー・オブジェクトの場合)、一時属性値の計算(エンティティ・オブジェクトまたはビュー・オブジェクトの場合)、バインド変数のデフォルト値(ビュー・オブジェクトの問合せ文およびビュー基準フィルタの場合)、およびエラー・メッセージのプレースホルダ(エンティティ・オブジェクトの検証ルールの場合)などが含まれます。

ADFビジネス・コンポーネントでは、次のタスクを実行するGroovy言語式に対してのサポートが特に強化されています。

ノート:

次に示すGroovy式による属性のデフォルト値の定義手順は、「式エディタの編集」ダイアログにGroovy式を入力する方法を説明するための例です。この理由から、同様に「式エディタの編集」ダイアログを使用して定義する「式値のリフレッシュ」に関する言及が含まれています。「式値のリフレッシュ」は属性のデフォルト値の定義に特有のものです。そのため、「式エディタの編集」ダイアログにGroovy式を入力する作業に、「式値のリフレッシュ」の定義に関連する作業が必ずしも含まれるとはかぎりません。
Groovy式を使用して属性のデフォルト値を定義するには:
  1. エンティティ・オブジェクトまたはビュー・オブジェクトのXMLエディタ・ビューを開きます。たとえば、Countryという名前のエンティティ・オブジェクトの場合は、CountryEO.xmlをダブルクリックしてエンティティ・オブジェクトの概要エディタを開きます。
  2. 「属性」タブをクリックします。
  3. 「属性」タブの「詳細」ページにナビゲートし、「デフォルト値」セクションに移動します。
  4. 「式」ラジオ・ボタンを選択します。
  5. 横にあるアイコンをクリックし「式エディタの編集」ダイアログを開き、デフォルト値を算出するGroovy式を定義して、「OK」をクリックします。
  6. 必要であれば、前述のステップで説明したとおりデフォルト値式のすぐ下のフィールドで、「式値のリフレッシュ」を入力します。前述のステップと同じ方法で、「式値のリフレッシュ」を定義します。

式を入力したときの処理

エンティティ・オブジェクトやビュー・オブジェクトなどのビジネス・コンポーネントにGroovy式を入力してプロジェクトを保存すると、入力したGroovy式がコンポーネントに関連する.bcsファイルに移入されます。この処理が正しく実行されるようにするため、「Groovyプロジェクトの設定に関する必知事項」の説明のとおり、Groovyファイルの生成を制御する設定は無効にしないでください。エンティティ・オブジェクトまたはビュー・オブジェクトの様々なUIコンテキストでGroovy式を入力するメカニズムが用意されています。ビジネス・コンポーネントに関連する.bcsファイルに追加されたGroovy式を表示します。

次のUIコンテキストでビジネス・コンポーネントにGroovy式を追加したときに、Groovy式がハイパーリンクとして表現されます。
  • 属性のデフォルト値としてGroovy式を定義した後、または式値のリフレッシュを設定した後。

  • 属性に、ラベル、ツールチップなどのUIヒントを定義した後。

図3-12は、ビュー・オブジェクトに追加されたGroovy式を示しており、ビュー・オブジェクトの属性のデフォルト値を設定しています。式はハイパーリンクとして表現されます。ハイパーリンクのリンクは.bcsファイル内の式スクリプトにリンクしています。このハイパーリンクをクリックすると、このビジネス・コンポーネントに関連する.bcsファイルが開きます。

図3-12 ハイパーリンクとして表示されたGroovy式


この図は周囲のテキストで説明しています

エンティティ・オブジェクトまたはビュー・オブジェクトに対して追加されたGroovy式はコンポーネントの「構造」ウィンドウにも表示されます。図3-13は、OrdEOコンポーネントのDateOrdered属性に対して追加されたGroovy式が、画面左下の「構造」ウィンドウに表示されているところを示しています。

図3-13 コンポーネントの「構造」ウィンドウに表示されたGroovy式


図3-13の説明が続きます
「図3-13 コンポーネントの「構造」ウィンドウに表示されたGroovy式」の説明

JDeveloperでは、エンティティ・オブジェクトおよびビュー・オブジェクトのXMLソース(ビジネス・コンポーネントの概要エディタの「ソース」タブで表示)と、そのコンポーネントの.bcsファイル内で、Groovy式が表現されます。ビジネス・コンポーネントのXMLソース・ビューではXML構造によってGroovy式への参照が定義され、ビジネス・コンポーネントの.bcsファイルではそのGroovy式はスクリプトとして表現されます。.bcsファイル内の注釈は、Groovy式が定義されているビジネス・コンポーネントや属性名など、スクリプトに関する情報を提供します。そのため、Groovy式のXML定義の一部として含まれている情報の一部は注釈で利用されます。Groovy式のXML定義では、Groovy式がスクリプトとして含まれている.bcsファイルを示すために、CodeSourceName値を使用します。CodeSourceName値にはoperations.xmlファイルの値が割り当てられます。operations.xmlファイルはビジネス・コンポーネントに関連付けられるさらに別のXMLファイルで、ここに.bcsファイルのURIが含まれています。

次のサンプルはOrdEOエンティティ・オブジェクトのDateOrdered属性の結果のXMLソースです。Groovy式を参照するXML定義を示しています。

<Attribute
  Name="DateOrdered"
  ColumnName="DATE_ORDERED"
  SQLType="TIMESTAMP"
  Type="java.sql.Date"
  ColumnType="DATE"
  TableName="S_ORD">
  <DesignTime>
    <Attr Name="_DisplaySize" Value="7"/>
  </DesignTime>
  <TransientExpression
    Name="ExpressionScript"
    CodeSourceName="OrdEORow"/>
</Attribute>

また、次のサンプルはDateOrdered属性のGroovyスクリプト定義を表示する.bcsファイルを示しています。

@TransientValueExpression(attributeName="DateOrdered")
def DateOrdered_ExpressionScript_Expression()
{
  adf.currentDate
}

XMLソースと.bcsファイルのサンプルからわかるように、XMLソースのname="DateOrderedは、.bcsファイルの注釈内のメソッド名DateOrdered_ExpressionScript_Expression()に対応しています。これらの値は、このDateOrdered属性のGroovy式を定義している式スクリプト・メソッド名を示しています。XMLソース内のCodeSourceName="OrdEORow"operations.xmlファイルを示しており、OrdEOエンティティ・オブジェクトの場合はOrdEOOperations.xmlです。operations.xmlファイルには、.bcsファイルを指し示すURIが含まれています。

Groovyプロジェクトの設定に関する必知事項

Groovyタイプ・チェックを有効にすると、.bcsファイルに含まれているGroovy式のタイプ・チェックが実行されます。Groovyファイル生成を有効にすると、コンポーネントのすべてのGroovy式が関連する.bcsファイルに移入されます。Groovyタイプ・チェックとGroovyファイル生成は、特定のモデル・プロジェクトまたはすべてのプロジェクトに対して有効化または無効化できます。

Groovy式タイプの検証

JDeveloperのメイン・メニューから、「アプリケーション」「プロジェクト・プロパティ」にナビゲートし、「プロジェクト・プロパティ」ダイアログから「ADFビジネス・コンポーネント」を選択し、プラス記号のアイコンをクリックして展開し、「オプション」を選択します。「オプション」ページで「Groovy式タイプの検証」チェック・ボックスを選択し、JDeveloperでこの特定のモデル・プロジェクトに対してGroovy式タイプ検証が実行されるようにします。このプロパティをアプリケーションのすべてのプロジェクトに対して設定するには、「ツール」「プリファレンス」にナビゲートし、「プリファレンス」ダイアログ・ボックスから「ADFビジネス・コンポーネント」を選択します。プラス記号のアイコンをクリックして展開し「一般」を選択します。「一般」ページで「Groovy式タイプの検証」チェック・ボックスを選択します。プロジェクトをコンパイルすると、エンティティ・オブジェクトおよびビュー・オブジェクト固有のビジネス・コンポーネント・スクリプト(.bcs)ファイルに含まれるGroovy式がコンパイルされ、JDeveloperの「ログ」ウィンドウにエラーが表示されます。.bcsファイル内に定義されているGroovy式スクリプトのタイプ・チェックを実行しない場合は、このオプションの選択を解除します。これ以降作成する新しいプロジェクトに対してタイプ・チェックが実行されなくなります。既存のプロジェクトについては引き続きタイプ・チェックが実行されます。コンポーネントの.bcsファイルに含まれるGroovy式スクリプトのデバッグをサポートするため、このオプションは有効(デフォルト)にしておくことをお薦めします。タイプ・チェックを無効にすることでGroovy式のデバッグが無効になるわけではありませんが、タイプ・チェックを有効にしておくと問題を実行時ではなくコンパイルの時点で検出できるため、Groovyスクリプトのデバッグが容易になります。

ノート:

.bcsファイルの注釈を使用して、タイプ検証をスクリプト・レベルで無効にすることもできます。.bcsファイルで、Groovy式の前に注釈@TypeChecked(TypeCheckingMode.SKIP)を入力します。.bcsファイルのヘッダー・セクション内のimport groovy.transform.TypeCheckingModeおよびimport groovy.transform.TypeCheckedというimport文によって、指定した注釈に従った処理が実行されます。.bcsファイル内のGroovy式をコンパイルするときに、この注釈が付与された式のタイプ・チェックはスキップまたは省略されます。

Groovyファイル生成の有効化

JDeveloperのメイン・メニューから、「アプリケーション」「プロジェクト・プロパティ」にナビゲートし、「プロジェクト・プロパティ」ダイアログから「ADFビジネス・コンポーネント」を選択し、プラス記号のアイコンをクリックして展開し、「オプション」を選択します。「オプション」ページで「Groovyファイル生成の有効化」チェック・ボックスを選択し、Groovy式を含むエンティティ・オブジェクトおよびビュー・オブジェクトのビジネス・コンポーネント・スクリプト(.bcs)ファイルが、このモデル・プロジェクト内に生成されるようにします。コンポーネントの概要エディタでGroovy式を定義すると(エンティティ・オブジェクトの属性にデフォルト値式を入力する、検証ルール式を入力するなど)、コンポーネントに.bcsファイルが作成されます。Groovy式が.bcsファイルに集積されないようにするには、このオプションの選択を解除します。

このチェック・ボックスを選択した状態でGroovy式を入力し、その後にチェック・ボックスの選択を解除した場合、生成された.bcsファイルには以前に追加されたGroovy式が残りますが、後から定義したGroovy式は.bcsファイルに移入されず、コンポーネントのXML定義ファイル(.xml)に保存されます。すべての式がエンティティ・オブジェクトおよびビュー・オブジェクト固有の.bcsファイルに集積されるように、このオプションは有効(デフォルト)にしておくことをお薦めします。このファイルで、Groovy式スクリプトを編集したり、コンパイルしてエラーがないかをチェックできます。また、式をビジネス・コンポーネント・スクリプト・ファイルに集積しておくことで、実行時のパフォーマンスを極限まで高めることができます。

ノート:

ADFアプリケーションをJDeveloperリリース12.2.1以降に移行するときに、このチェック・ボックスをクリアすると、モデル・プロジェクト・コンポーネントの.xmlファイル内の式を維持できます。ただ、このチェック・ボックスは選択しておき、JDeveloperの移行機能を活用してすべてのGroovy式を.bcsファイルに移動することをお薦めします。Javaソース・エディタでのスクリプト編集とコンパイルのパフォーマンスを向上できるためです。

Groovy式を使用できる場所に関する必知事項

表3-3 ADFビジネス・コンポーネントでのGroovy式の使用

式の使用 コンポーネント使用 XML要素/親XML要素 説明
一時属性値 エンティティ・オブジェクト/ビュー・オブジェクト TransientExpression/Attribute 行レベルで一時属性値を計算します。スクリプトは行レベルで定義されます。
属性のデフォルト値 エンティティ・オブジェクト/ビュー・オブジェクト TransientExpression/Attribute 属性のデフォルト値を計算します。スクリプトは行レベルで定義されます。
属性デフォルト値の再計算 エンティティ・オブジェクト/ビュー・オブジェクト RecalcCondition/Attribute 値がtrueの場合、デフォルト値が再計算されます。スクリプトは行レベルで定義されます。
変数のデフォルト値 エンティティ・オブジェクト/ビュー・オブジェクト TransientExpression/Variable 変数のデフォルト値を計算します。スクリプトはオブジェクト・レベルで定義されます。
式バリデータ エンティティ・オブジェクト/ビュー・オブジェクト TransientExpression/ExpressionValidationBean (Attribute、ViewAttributeまたはEntity) この式を実行して、個々の属性またはエンティティ全体の現在の内容を検証します。スクリプトは行レベルで定義されます。
比較バリデータ  エンティティ・オブジェクト/ビュー・オブジェクト TransientExpression/CompareValidationBean (Attribute、ViewAttribute、Entityの下) 新しい属性値と比較する値を計算します。スクリプトは行レベルで定義されます。
バリデータOnCondition エンティティ・オブジェクト/ビュー・オブジェクト OnCondition/ExpressionValidationBean、CompareValidationBeanなど(Attribute、ViewAttribute、Entityの下) 新しい属性値と比較する値を計算します。スクリプトは行レベルで定義されます。
バリデータ・メッセージ・パラメータ エンティティ・オブジェクト/ビュー・オブジェクト Expression/ResExpressions (すべての検証タイプの下) バリデータ内に、バリデータがエラーを検出したときのエラー・メッセージのテキスト・リソースを含めることができます。テキスト・リソース文字列内で、中カッコ{}を使用して変数名を指定できます。この変数はテキスト・リソースに埋め込まれる値を計算するGroovy式を参照します。スクリプトは行レベルで定義されます。
UIヒント エンティティ・オブジェクト/ビュー・オブジェクト TransientExpression/LABEL 各属性には多数のSchemaBasedPropertiesが含まれており、その属性のUIをどのように表示する必要があるかのヒントをUI開発者に提供しています。LABELのようなテキスト・リソースの場合もあれば、DISPLAYWIDTHのように値だけの場合もあります。これらのUIヒントにGroovy式を使用して、UIヒントの値を計算させることができます。スクリプトは行レベルで定義されます。
エンティティ・トリガー エンティティ・オブジェクト TransientExpression/ExpressionValidationBean (Triggerの下) trigger要素の下にあるnameプロパティはこのトリガーのタイプを示しています。この式はトリガー・イベントが発生したときに発動されます。スクリプトは行レベルで定義されます。
ビュー・アクセッサのパラメータ エンティティ・オブジェクト/ビュー・オブジェクト TransientExpression/PIMap (ViewAccessorの下にあるParaeterMapの下) ビュー・アクセッサでビュー基準が使用されていて、ビュー基準内のアイテムがバインド変数を使用している場合、この式によってバインド変数の値が提供されます。スクリプトはオブジェクト・レベルで定義されます。
ビュー慣用名のパラメータ アプリケーション・モジュール TransientExpression/PIMap (ViewUsageの下のParaeterMapの下) ビュー慣用名でビュー基準が使用されていて、ビュー基準内のアイテムがバインド変数を使用している場合、この式によってバインド変数の値が提供されます。スクリプトはオブジェクト・レベルで定義されます。
RowFinderパラメータ ビュー・オブジェクト TransientExpression/ PIMap (ViewUsageの下のParaeterMapの下) rowfinderでビュー基準が使用されていて、ビュー基準内のアイテムがバインド変数を使用している場合、この式によってバインド変数の値が提供されます。スクリプトはオブジェクト・レベルで定義されます。
ビュー基準のCompOper  ビュー・オブジェクト TransientExpression/CompOper  ビュー基準にカスタム演算子が実装されている場合、この式を使用してカスタム演算子を実行します。スクリプトはオブジェクト・レベルで定義されます。

Groovy式の構文に関する必知事項

次の項では、ADFモデル・プロジェクト内でのGroovy式言語の構文に関する重要な内容を説明します。Groovy式はADFビジネス・コンポーネントとの対話型の連携により、様々なタスクの実行を可能にします。Groovyスクリプトを使用して行えることは数多くあります。たとえば、Groovy式のadf.contextを使用したADFContextオブジェクトの参照、カスタムまたはADFビジネス・コンポーネントJava APIの呼出し、組込み集計関数を使用したビジネス・コンポーネント属性値の操作などです。

Groovy式でのビジネス・コンポーネントの参照に関する必知事項

フレームワークでGroovyスクリプトを使用できるオブジェクトにアクセス可能な、adfという名前のトップレベルのオブジェクトが用意されています。Oracle ADFオブジェクトをGroovyスクリプト言語で参照する際、Oracle ADFランタイムではクラスの実際の具体的な型に対応しないラッパー・オブジェクトを戻します。これらのラッパー・オブジェクトでは、ラップされるオブジェクトのメソッドとフィールド型のすべてがサポートされています。あたかも実際のオブジェクトのように、式ではラッパー・オブジェクトを使用できます。ただし、ラッパー・オブジェクトを具体的な型にキャストしようとすると、ClassCastExceptionで失敗します。一般的に、Groovy言語で作業する際、明示的なキャストを使用する必要はなく、これらのラップされたADFビジネス・コンポーネント・オブジェクトの場合、これを行うと例外が発生します。

アクセス可能なOracle ADFオブジェクトの構成は次のとおりです。

  • adf.context - ADFContextオブジェクトを参照します。

  • adf.object - 式が適用されているオブジェクトを参照します(接頭辞adfを使用せずにキーワードobjectを使用して参照可能)。アクセス可能な他のメンバー名は、Groovyスクリプトが適用されたコンテキストに由来します。

    • エンティティ・オブジェクト属性: コンテキストはエンティティ実装クラスのインスタンスです。このオブジェクトを介して、カスタム・エンティティ実装クラスのカスタム・メソッドと、JavadocのEntityImplに指定されたベース実装クラスで定義されているすべてのメソッドを参照できるほか、エンティティ・インスタンスの属性を参照できます。

    • エンティティ・オブジェクト・スクリプト検証規則: コンテキストは、バリデータが適用されるエンティティにマージされるバリデータ・オブジェクト(JboValidatorContext)です。このコンテキストで使用できるキーワードの詳細は、「同一のビジネス・コンポーネントのメンバーの参照」を参照してください。

    • ビュー・オブジェクト属性: コンテキストはビュー行実装クラスのインスタンスです。このオブジェクトを介して、カスタム・ビュー行実装クラスのカスタム・メソッドとJavadocのViewRowImplに指定されたベース実装クラスで定義されているすべてのメソッドを参照できるほか、問合せ行セットで定義されているビュー行インスタンスの属性を参照できます。 

    • ビュー・オブジェクト問合せ文のバインド変数: コンテキストはビュー行ではなく変数オブジェクト自体です。structureDefプロパティを参照すると他の情報にアクセスでき、viewObjectプロパティを参照するとバインド変数を適用したビュー・オブジェクトにアクセスできます。viewObjectプロパティを介したビュー・オブジェクト属性へのアクセスはサポートされていない点に注意してください。

    • ビュー基準のバインド変数: コンテキストは現在のビュー基準行です。バインド変数が定義されているビュー基準は、バインド変数が検索基準値のリストを提供できる問合せ検索フォーム・コンポーネントを作成するために使用できます。ビュー基準行にアクセスするにはstructureDefプロパティを参照している必要があり、その後、findAttributeDef()メソッドを参照して指定した属性から値を派生させることができます。viewObjectプロパティを使用して、ビュー基準が定義されているビュー・オブジェクトにアクセスすることはできません。

    • ビュー・アクセッサのバインド変数: コンテキストは現在のビュー行です。バインド変数を使用するビュー・アクセッサは、カスケード値リスト(LOV)の作成に使用されます。ビュー・アクセッサは、有効な選択肢リストを編成するために使用されるビュー・アクセッサ・ビュー・オブジェクトの現在のビュー行からGroovyドリブン値を導出できます。ビュー行にアクセスするにはstructureDefプロパティを参照している必要があり、その後、findAttributeDef()メソッドを参照して指定した属性から値を派生させることができます。viewObjectプロパティを使用して、ビュー・アクセッサが定義されているビュー・オブジェクトにアクセスすることはできません。

    • 一時属性: コンテキストは現在のエンティティまたはビュー行です。属性が表示されるエンティティまたはビュー行の名前で属性を参照できるだけでなく、そのエンティティまたはビュー行のpublicメソッドも参照できます。現在のオブジェクトのメソッドにアクセスするには、objectキーワードを使用して現在のオブジェクトを参照する必要があります(例: object.methodName( ))。objectキーワードは、Javaのthisキーワードと同じです。一時式でこのキーワードを使用しないと、動的にコンパイルされたGroovyスクリプト・オブジェクト自体にメソッドが存在すると判断されます。

  • adf.error - 検証規則において、検証式で例外または警告を生成できるエラー・ハンドラにアクセスします。

  • adf.userSession - ADFビジネス・コンポーネント・ユーザー・セッションへの参照を返します(セッションの一部であるuserDataハッシュマップの値の参照に使用できます)。

次の式を使用して現在の日付(時間を切捨て)または現在の日付と時間を参照することもできます。

  • adf.currentDate

  • adf.currentDateTime

信頼できないGroovy式に関する必知事項

ADF Groovyエンジンによって、Groovyによる汎用Java APIへのアクセスは制限されます。これは不正/安全でないメソッド呼出しやプロパティ・アクセスを阻止することで行われます。アプリケーション開発者は、アプリケーションJava APIで定義したカスタム・メソッドを@AllowUntrustedScriptAccessを使用して含め、セキュリティ・ポリシーを強化できます。

カスタムJavaを使用して、ADFスクリプトではサポートされないJavaライブラリにアクセスできます。たとえば、ファイルから読み取る場合、そのケースをサポートするには、カスタムJavaクラスを作成し、@AllowUntrustedScriptAccess注釈でマークを付け、ADFスクリプトからカスタム・クラスを呼び出すことができます。

クラス・ファイルで、次のことを行う必要があります。

  1. oracle.adf.share.security.AllowUntrustedScriptAccessをインポートします。

  2. 注釈@AllowUntrustedScriptAccess(methodNames={”xyz”, “abc”})をビュー・オブジェクト実装クラスの一番上に追加します。

    次に例を示します。

    import oracle.adf.share.security.AllowUntrustedScriptAccess;
    @AllowUntrustedScriptAccess(methodNames = {"testAccessObject"})
    
    public class ActivityVOImpl extends CRMViewObjectImpl implements ActivityVO
    {
        ......
    
        public boolean testAccessObject(String objectType, Long objectKey)
        {
          // your logic here
          return true;
        }

クラス・ファイルを更新した後で、ソース・コードの場合と同様に、Groovyスクリプト内のVOImplクラスからJavaメソッドに直接アクセスできます。たとえば、testAccessObject()メソッドにアクセスするには、次の例に示すように、作成するオブジェクトに対してメソッドを呼び出す必要があります。

def voActivity = newView('Activity')
def objectType = 'OPPTY'
def objectKey = 100010025532672
voActivity.testAccessObject(objectType, objectKey)
println('Done test');
Groovy式でのカスタム・ビジネス・コンポーネント・メソッドと属性の参照に関する必知事項

Groovyスクリプト言語により、エンティティ・オブジェクトとビュー・オブジェクトのメソッドと属性へのアクセスのために記述するコードを容易に作成できます。

同一のビジネス・コンポーネントのメンバーの参照

ビジネス・コンポーネントのメンバー(エンティティ・オブジェクトとビュー・オブジェクトで定義されるメソッドと属性を含む)の参照の最も単純な例は、式を適用する属性と同一のエンティティ・オブジェクトまたはビュー・オブジェクト内に存在する属性の参照です。

たとえば、従業員の月給を指定する属性Salを持つエンティティ・オブジェクトの一時属性AnnualSalaryの値を計算するGroovy式を定義できます。

Sal * 12

または、次のような構文を使用して、単一のビュー・オブジェクトの属性を比較する単純な検証規則をGroovyで作成できます。

PromotionDate > HireDate

Javaを使用すると、同じ比較は次のようになります。

((Date)getAttribute("PromotionDate")).compareTo((Date)getAttribute("HireDate")) > 0

現在のオブジェクトは、thisオブジェクトとしてスクリプトに渡されるため、属性名を使用するだけで現在のオブジェクトの属性を参照できます。たとえば、属性レベルまたはエンティティ・レベルのスクリプト式バリデータで、HireDateという名前の属性を参照するには、スクリプトでHireDateを参照するだけですみます。

属性の参照と同様に、エンティティ実装クラスでカスタム・メソッドを定義する場合は、式の一部としてこれらのメソッドを起動できます。たとえば、次のように、属性のデフォルト値を定義します。

adf.object.getDefaultSalaryForGrade()

メソッド参照は接頭辞adf.objectを必要とし、これによって式が適用される属性を定義する同じエンティティを参照できます。これと同じ接頭辞を使用して、カスタム実装クラスが拡張するエンティティ実装クラス(EntityImpl.java)のベース・クラスのメソッドも参照できます。

検証規則でエンティティ実装クラスのメソッドを参照する場合は、接頭辞sourceを使用します。

source.getDefaultSalaryForGrade()

objectキーワードは、(メソッドが定義されている)エンティティ・オブジェクトではなく、検証規則オブジェクトを指すため、バリデータではsource接頭辞を使用する必要があります。

バリデータ・オブジェクトのメンバーを参照できるようにするために(JboValidatorContext)、検証ルール式で次のキーワードを使用できます。

  • newValue: 属性レベルのバリデータで、設定されている属性値にアクセスします。

  • oldValue: 属性レベルのバリデータで、設定されている現在の属性値にアクセスします。

たとえば、次の式を使用して、販売員の給与の動的検証ルール・チェックを指定できます。

if (Job == "SALESMAN")
{
  return newValue < source.getMaxSalaryForGrade(Job)
}
else
return true
他のビジネス・コンポーネントのメンバーの参照

エンティティ・オブジェクトおよびビュー・オブジェクトで定義されているメソッドおよび属性を式で参照し、別のエンティティ・オブジェクトの属性または検証規則に適用することもできます。そのためには、エンティティ・アソシエーションのアクセッサを参照します。

たとえば、エンティティにDeptEmpのマスター/ディテール・アソシエーションを定義する場合、デフォルトでエンティティ・アソシエーションのアクセッサにはDeptEmpという名前が付けられ、関連元と関連先のデータ・ソースが指定されます。Groovy式でこのアクセッサを使用し、部門の場所に基づいて新しい従業員の給与のデフォルト値を設定します。

adf.object.getDefaultSalaryForGrade(Dept.Loc)

この式では、アソシエーションのアクセッサと同じ名前(Dept)であっても、エンティティを参照しません。そのかわりに、部門と従業員のマスター/ディテール関係を前提としてアクセッサを参照するため、従業員エンティティ・オブジェクトに対するGroovy式はマスターの部門エンティティを参照し、そのマスターからLoc値を渡します。

Groovy式でのビジネス・コンポーネント属性値の操作に関する必知事項

Oracle Business Components RowSetオブジェクトでは、次の組込みの集計関数を使用できます。

  • rowSetAttr.sum(GroovyExpr)

  • rowSetAttr.count(GroovyExpr)

  • rowSetAttr.avg(GroovyExpr)

  • rowSetAttr.min(GroovyExpr)

  • rowSetAttr.max(GroovyExpr)

これらの集計関数は、文字列値引数を使用し、これはGroovy式として解釈され、集計が計算される際に行セットの各行のコンテキストで評価されます。Groovy式は数値(または数字のドメイン)を返す必要があります。

たとえば、Deptエンティティ・オブジェクトには、次の式によって計算されるすべての従業員の給与の合計を表示する一時属性を追加できます。

EmployeesInDept.sum("Sal")

特定の部門の従業員を参照するために、式ではマスター/ディテール・アソシエーションの関連先Empエンティティのアクセッサ名を指定します。この場合、アクセッサはEmployeesInDeptで、給与はEmpエンティティ・オブジェクトのレコードごとに解釈されます。

または、各従業員の職務によって異なる福利厚生を含めて、特定の部門の給与合計を計算する場合には、次のようにします。

EmployeesInDept.sum("Sal + adf.object.getBenefitsValue(Job)")

Groovyスニペットの移行に関する必知事項

以前のリリースからJDeveloper 12.2.1に移行するときに、Groovyスニペットを.bcsファイルに移行できます。JDeveloper 12.2.1より前のリリースでは、エンティティ・オブジェクトやビュー・オブジェクトなどのビジネス・コンポーネントで定義されたGroovy式は、そのビジネス・コンポーネントのXMLソースに含まれていました。12.2.1以降では、Groovyファイルの生成が有効化されている場合、ビジネス・コンポーネントで定義されたGroovy式はそのビジネス・コンポーネントに関連付けられた.bcsファイルに集積されます。現在のプロジェクトまたはすべてのプロジェクトに対してタイプ・チェックが有効になっている場合、コンパイル時に.bcsファイル内でタイプ・チェックが実行されます。Groovyのタイプ・チェックおよびGroovyファイル生成を有効または無効にする方法の詳細は、「Groovyプロジェクトの設定に関する必知事項」を参照してください。

JDeveloper 12.2.1以降、.bcsファイルへのGroovyファイル生成と.bcsファイル内のGroovy式のタイプ・チェックを有効にする設定は、デフォルトで有効になっています。そのためADFアプリケーションを以前のリリースからJDeveloper 12.2.1に移行する際、ビジネス・コンポーネントのXMLソースの左余白にプロンプトが表示されます。プロンプトをクリックすると、Groovy式を.bcsファイルに移動するオプションが表示されます。図3-14は、XMLソース内のGroovyスニペットに対してJDeveloperが表示したプロンプトを示しています(ビジネス・コンポーネントの概要エディタの「ソース」タブに表示されます)。

図3-14 コード・アシストがGroovyスニペットの移行を実行

この図は周囲のテキストで説明しています
  • 「外部コードソースへの移動」を選択すると、このプロンプトが表示されているGroovyスニペットが、このビジネス・コンポーネントの.bcsファイルに移動します。

  • 「タイプ・チェックをオフにした、外部コードソースへの移動」を選択すると、このプロンプトが表示されているGroovyスニペットが、タイプ・チェックをオフにした状態で、このビジネス・コンポーネントの.bcsファイルに移動します。

  • これらのプロンプトをオフにするには、「GroovyコードソースをJDeveloper名(処理の指示の抑制)によって抑制」を選択します。オフにすると、Groovy式を含む移行対象のいずれのビジネス・コンポーネントでも、XMLソースにプロンプトが表示されなくなります。

GroovyスニペットがXMLソースから.bcsファイルに移行されると、XMLソースのXML定義に、Groovyスニペットの移行先である.bcsファイルへの参照が表示されます。移行されたGroovy式は(その他のGroovy式と同じように)XMLソースのXML定義内で、.bcsファイル内の注釈に含まれる情報と部分的に一致する共通の情報を持つことになります。この共通の情報は、XMLソースと.bcsファイル間でのGroovy式の特定に役立ちます。XMLソースと.bcsファイルのコンテキストにわたるGroovy式の共通情報に関する詳細は、「式を入力したときの処理」を参照してください。

ノート:

JDeveloperにはアプリケーションを開いたときに実行される監査ルールがあり、これが移行機能を促進します。監査ルールは、監査ルールの集合である監査プロファイルの一部です。事前に有効にしたGroovy固有の監査ルールが移行を成功に導きます。これらのフラグを表示するには、JDeveloperのメイン・メニューから「ツール」にナビゲートし、「プリファレンス」を選択します。「プリファレンス」ダイアログで「監査」を選択します。監査プロファイルのリストを表示するには、「プロファイルの管理」をクリックします。このリストから「Application Development Framework (ADF)」監査プロファイルを選択して展開し、サブルールのリストを表示します。「ADFbc監査ルール」を選択して展開し、このルール内のサブルールのリストを表示します。「共通」を選択して展開し、事前に有効にされているGroovy固有の監査ルールを表示します。これによりGroovyスニペットの移行が促進されます。『Oracle JDeveloperによるアプリケーションの開発』監査ルールの理解に関する項 を参照してください。

スクリプト式クラス・ファイルの作成方法

ADFビジネス・コンポーネントを使用すると、スクリプト式クラス・ファイルを作成し、そのファイルを使用してアプリケーション内のどこからでもコールできる共通のGroovyスクリプト・メソッドを保持できます。

スクリプト式クラス・ファイルを作成するには:
  1. 「ファイル」メニューから「新規」をクリックし、「ギャラリから」を選択して、「新規ギャラリ」ダイアログの「ビジネス層」セクションで「ADFビジネス・コンポーネント」を選択し、このダイアログの右ペインで「スクリプト・クラス」を選択します。
  2. 「スクリプト式クラスの作成」ダイアログの「クラス名」フィールドに、このスクリプト式クラスのクラス名を入力します。
  3. 「パッケージ名」フィールドに、このスクリプト式クラスを格納するパッケージを指定します。
  4. 必要に応じて、「拡張」に、このスクリプト式クラスによって拡張されるスクリプト式クラスを指定します。
  5. 「OK」をクリックします。
スクリプト式クラス・ファイルが作成され、格納されているパッケージからJDeveloperで開くことができます。