ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発
12c (12.1.2)
E48099-02
  目次へ移動
目次

前
 
次
 

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

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

この章には次の項が含まれます:

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

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

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

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

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

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

ADFビジネス・コンポーネントの概要

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

始める前に:

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

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

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

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

  1. メイン・メニューで「ファイル」を選択し、次に「アプリケーション」→「新規」を選択します。

  2. 「新規ギャラリ」の「アイテム」リストで、「ADF Fusion Webアプリケーション」をダブルクリックします。

  3. ADF Fusion Webアプリケーションの作成・ウィザードで、名前やディレクトリなどのアプリケーションの詳細を入力します。ウィザードに関するヘルプを表示するには、[F1]を押します。

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

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

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

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

始める前に:

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

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

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

  1. 「アプリケーション」ウィンドウで既存のプロジェクトを選択し、メインメニューで「ファイル」、次に「新規」→「プロジェクト」を選択します。

  2. 「新規ギャラリ」の「アイテム」リストで、「ADFモデル・プロジェクト」をダブルクリックします。

  3. ADFモデル・プロジェクトの作成ウィザードで、名前やディレクトリなどのプロジェクトの詳細を入力します。ウィザードに関するヘルプを表示するには、[F1]を押します。

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

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

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

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

図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以外のデータベースの両方に適用できるアプリケーションを構築できます。


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

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


    ヒント:

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


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

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

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

始める前に:

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

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

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

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

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

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

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

  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」をクリックします。

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

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

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

始める前に:

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

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

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

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

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

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

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

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

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

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

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

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

  1. 「アプリケーション」ウィンドウで、オフライン・データベースを作成するフォルダを右クリックし、「新規」→「ソース・データベースからのオフライン・データベース・オブジェクト」を選択します。

  2. データベース・オブジェクトのリバース・エンジニアリング・ウィザードの「データベース」ページで、オンライン・データベース接続が「ソース・データベース」として表示されていることを確認し、「次へ」をクリックします。

  3. 「オブジェクトの選択」ページで、「問合せ」をクリックして「使用可能」リストから目的のメソッドを1つ以上選択し、「追加」ボタンをクリックして、それらを「選択済」リストに移動します。

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

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

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

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

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

3.2.6 基本的なデータ型に関する必知事項

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

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

データ型 パッケージ 説明

DBSequence

oracle.jbo.domain

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

RowID

oracle.jbo.domain

OracleデータベースのROWID

BFileDomain

oracle.jbo.domain

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

BlobDomain

oracle.jbo.domain

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

ClobDomain

oracle.jbo.domain

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

OrdImageDomain

oracle.ord.im

Oracle Intermediaイメージ(ORDIMAGE)

OrdAudioDomain

oracle.ord.im

Oracle Intermediaオーディオ(ORDAUDIO)

OrdVideoDomain

oracle.ord.im

Oracle Intermediaビデオ(ORDVIDEO)

OrdDocDomain

oracle.ord.im

Oracle Intermediaドキュメント(ORDDOC)

Struct

oracle.jbo.domain

ユーザー定義オブジェクト・タイプ

Array

oracle.jbo.domain

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


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

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

データ型 パッケージ 説明

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のタイム・ゾーンにデフォルト設定されます。


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

「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コンポーネントのないアプリケーションは問題なく機能します。

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

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

始める前に:

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

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

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

3.2.1項「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。

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

  1. 「アプリケーション」ウィンドウで、共有アプリケーション・モジュールを作成するプロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。

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

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

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

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

始める前に:

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

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

3.2.1項「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。

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

  1. JDeveloperで、「ツール」→「プリファレンス」の順に選択します。

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

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

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

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

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

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

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

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

始める前に:

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

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

3.2.1項「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ビジネス・コンポーネントを含むデータ・モデル・プロジェクトを作成します。

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

  1. 「アプリケーション」ウィンドウで、エンティティ・オブジェクトを作成するプロジェクトを右クリックし、「新規」を選択します。

  2. 「新規ギャラリ」で、「ビジネス層」を展開し、「ADFビジネス・コンポーネント」を選択してから「表からのビジネス・コンポーネント」を選択し、「OK」をクリックします。

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

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

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

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

  5. 「問合せベースのビュー・オブジェクト」ページで、読取り専用のビュー・オブジェクト定義を作成するための使用可能なデータベース・オブジェクトを選択します。「次へ」をクリックします。

  6. 「アプリケーション・モジュール」ページで、デフォルト選択は未変更のままにし、「次へ」をクリックします。

  7. 「ダイアグラム」ページで、「ビジネス・コンポーネント・ダイアグラムに追加」を選択し、「次へ」をクリックします。

  8. 「サマリー」ページで、ウィザードによって作成されるビジネス・コンポーネントのリストを確認し、「終了」をクリックします。

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

「アプリケーション」ウィンドウにパッケージが存在していれば、図3-3に示すように、「アプリケーション」ウィンドウでパッケージを選択し、ポップアップ・メニューのオプションのいずれかを使用することで、任意のタイプの追加のビジネス・コンポーネントをすばやく作成できます。

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

アプリケーション・ナビゲータのポップアップ・メニュー・オプション

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

始める前に:

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

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

3.2.1項「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ビジネス・コンポーネントを含むデータ・モデル・プロジェクトを作成します。

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

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

  2. ビジネス・コンポーネントのウィザードで、ウィザードのページを完了し、「終了」をクリックします。ウィザードのどのページでもヘルプを参照するには、[F1]を押します。

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

ADFビジネス・コンポーネントの各コンポーネントには、宣言的な設定によって制御される、組込みランタイム機能が付属しています。これらの設定は、コンポーネントと同じ名前のXMLドキュメント・ファイルに格納されています。図3-4は、「アプリケーション」ウィンドウにデータ・モデル・プロジェクトの各ビジネス・コンポーネントの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のみの方法でコンポーネントを使用できます。

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

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

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ビジネス・コンポーネントによるインタフェースと実装の分離

インタフェースと実装の分離

3.3.5 パッケージのネーミング規則に関する必知事項

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

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

具体的な例として、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ビジネス・コンポーネントの配置

アプリケーション・ナビゲータおよびモデル・レイヤー

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

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

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

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

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

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

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

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

始める前に:

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

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

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

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

  1. 「アプリケーション」ウィンドウで、編集するビジネス・コンポーネントを右クリックし、「開く」を選択します。

  2. ビジネス・コンポーネントの概要エディタで、ビューの左側にあるナビゲーション・タブをクリックし、関連するプロパティ・グループを編集します。概要エディタのどのページでもヘルプを参照するには、[F1]を押します。

  3. 概要エディタで、「ソース」タブをクリックしXML定義ソース内の変更を表示します。

  4. 概要エディタで、「履歴」タブをクリックしてリビジョン履歴を表示し、現在の概要エディタで表示されているXMLソースの内容と過去のリビジョンの内容を比較します。

    ファイルのバージョン管理の詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「ソース制御によるアプリケーションのバージョン管理」の章を参照してください。

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

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

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

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

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

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

ADFモデル・テスター

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

始める前に:

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

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

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

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

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

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

    または、デバッグを有効にしたOracle ADFモデル・テスターでアプリケーションを実行する場合は、「デバッグ」を選択します。

  2. Oracle ADFモデル・テスターでビュー・オブジェクトを実行するには、データ・モデル・ツリーを開き、目的のビュー・オブジェクト・ノードをダブルクリックします。

  3. データ・モデル・ツリー内のノードを右クリックして、そのノードのポップアップ・メニューを表示します。たとえば、ビュー・インスタンス・ノードでは、データ・モデル・ツリーからのビュー・インスタンスの削除およびその他のタスクの実行のため、必要に応じて問合せを再実行できます。

  4. タブのポップアップ・メニューを表示するには、開いているデータ・ビューアのタブを右クリックします。たとえば、データ・ビューアを閉じたり、別のウィンドウで開くことができます。

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

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

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

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

始める前に:

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

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

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

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

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

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

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

  2. メイン・メニューで、アイテムを右クリックして「使用方法の検索」を選択します。

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

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

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

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

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

始める前に:

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

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

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

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

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

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

  2. オブジェクトを削除するには、「削除」を選択します。

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

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

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

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

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

始める前に:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  2. 「構造」ウィンドウで、列名をダブルクリックします。

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

  3. オフライン・データベース表の概要エディタで、列名を編集し[Enter]を押します。

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

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

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

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

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

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

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

概要エディタの「ダイアグラム」タブ

始める前に:

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

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

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

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

  1. 「アプリケーション」ウィンドウで、表示するビジネス・コンポーネントを右クリックし、「開く」を選択します。

  2. 概要エディタで、「ダイアグラム」タブをクリックして関係ダイアグラムに編集中のコンポーネントとそれに関連するすべてのコンポーネントを表示します。

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

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

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

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

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

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

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

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

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

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

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

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


ベスト・プラクティス:

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


始める前に:

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

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

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

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

  1. 「アプリケーション」ウィンドウで、カスタム・クラスを作成するコンポーネントをダブルクリックします。

  2. コンポーネントの概要エディタで、「Java」ナビゲーション・タブを選択します。

  3. 「Java」ページで、「Javaオプションの編集」アイコンをクリックします。

  4. 「Javaオプションの選択」ダイアログで、目的の実装クラスを作成するためのJavaクラス生成オプションを選択します。

    • アプリケーション・モジュール・クラスの生成: 完全なビジネス・サービスの論理面となる機能をカプセル化するためのカスタム・メソッドを含めることができるアプリケーション・モジュール実装クラスを生成します。

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

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

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

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

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

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

  7. 「アプリケーション」ウィンドウでクラスを作成するビジネス・コンポーネントを開いて、componentNameImpl.javaファイルをダブルクリックします。

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


    ヒント:

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


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

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

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

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

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

    OrderItemsInfoRowClient extends Row
    

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

始める前に:

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

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

3.5.1項「ビジネス・コンポーネントJavaサブクラスの生成方法」の説明に従い、アプリケーション・モジュールまたはビュー・オブジェクトの実装クラスを生成し、クライアントに公開するカスタム・メソッドを追加します。

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

  1. 「アプリケーション」ウィンドウで、カスタム・クラスを作成するコンポーネントをダブルクリックします。

  2. コンポーネントの概要エディタで、「Java」ナビゲーション・タブを選択します。

  3. 「Java」ページで、「クライアント・インタフェースの編集」アイコンをクリックします。

  4. 「クライアント・インタフェースの編集」ダイアログで、「使用可能」リストから目的のメソッドを1つ以上選択し、「追加」ボタンをクリックして、それらを「選択済」リストに移動します。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.5.5 汎用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クラスを生成して、強く型付けされた作業スタイルを有効化する方法について説明します。

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

Groovyは、Javaプラットフォーム用のスクリプト言語で、Javaと同様の構文を持ちます。ADFビジネス・コンポーネントのGroovy言語式は、ビジネス・コンポーネントのカスタムJavaクラスで使用するJavaコードとは異なります。Groovyスクリプト言語では、ドット区切り表記法の採用により、コードの作成が簡素化されていますが、コレクション、文字列およびJavaBeansを操作する構文は引き続きサポートされています。Groovy式では型チェックは実行時に行われますが、Javaでは型チェックはコンパイル時に実行されます。また、Groovy式は動的にコンパイルされるため、式を使用するビジネス・コンポーネントのXML定義ファイル内に保存されます。

ADFビジネス・コンポーネントは、エンティティ・オブジェクトの属性やビュー・オブジェクトの属性へのアクセスが有用な場所でGroovyスクリプト言語の使用をサポートしており、これには属性バリデータ(エンティティ・オブジェクトの場合)、属性のデフォルト値(エンティティ・オブジェクトまたはビュー・オブジェクトの場合)、一時属性値の計算(エンティティ・オブジェクトまたはビュー・オブジェクトの場合)、バインド変数のデフォルト値(ビュー・オブジェクトの問合せ文およびビュー基準フィルタの場合)、およびエラー・メッセージのプレースホルダ(エンティティ・オブジェクトの検証ルールの場合)などが含まれます。さらに、ADFビジネス・コンポーネントには、Groovy式で使用できる組込みキーワードの限定されたセットが用意されています。

特にADFビジネス・コンポーネント・フレームワークでは、次のタスクを実行するためのGroovy言語式の使用に関するサポートが提供されています。

これらのタスクをJDeveloperで実行する場合、タスク固有の式エディタ・ダイアログを使用します。たとえば、一時ビュー・オブジェクト属性のデフォルト値を作成する場合、属性の「式エディタの編集」ダイアログを使用して、属性の実行時の値を決定する式を入力します。また、図3-11に示すように、同じダイアログで値をいつ計算するかも指定できます(再計算条件と呼ばれます)。

図3-11 デフォルト属性値の式エディタのダイアログ

属性値の式エディタ

さらに、エンティティ・オブジェクトとビュー・オブジェクトを編集するために使用する概要エディタでは、「ビジネス・ルール」ページが表示され、単一のビジネス・コンポーネントで使用される式すべての表示と編集ができます。たとえば、ビュー・オブジェクト用に表示する「ビジネス・ルール」ページにより、ビュー・オブジェクトがそのビュー・アクセッサ、バインド変数および属性で使用する式すべてを表示できます。図3-12に示すように、表示をフィルタして、定義されたGroovy式でこれらの項目のみを表示できます。式はデザインタイム時に検証できませんが、すべての式エディタで、式の構文を保存する前にテストできます。

図3-12 概要エディタの「ビジネス・ルール」ページにおいてビジネス・コンポーネントで使用されるすべての式の表示

ビュー・オブジェクトの「ビジネス・ルール」ページ

始める前に:

Groovy言語について理解しておくと役立つ場合があります。詳細は、次のWebサイトを参照してください。

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

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

ビジネス・コンポーネントのGroovy式を表示するには:

  1. 「アプリケーション」ウィンドウで、目的のエンティティ・オブジェクトまたはビュー・オブジェクトをダブルクリックします。

  2. 概要エディタで「ビジネス・ルール」ナビゲーション・タブをクリックし、「ルール・フィルタ」アイコンから「すべてのGroovy式の表示」を選択します。

3.5.7 Groovy式でのビジネス・コンポーネントのリファクタに関する必知事項

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

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

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

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

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

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

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

    • ビュー・オブジェクト問合せ文のバインド変数: コンテキストはビュー行ではなく変数オブジェクト自体です。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

3.5.8 Groovy式でのカスタム・ビジネス・コンポーネント・メソッドと属性の参照に関する必知事項

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

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

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

たとえば、従業員の月給を指定する属性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

3.5.8.2 他のビジネス・コンポーネントのメンバーの参照

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

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

adf.object.getDefaultSalaryForGrade(Dept.Loc)

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

3.5.9 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)")