3 ADFビジネス・コンポーネントのスタート・ガイド
この章の内容は次のとおりです。
ADFビジネス・コンポーネントについて
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ビジネス・コンポーネントによって実装されるJava EEデザイン・パターンの詳細は、「ADFビジネス・コンポーネントJava EEデザイン・パターン・カタログ」を参照してください。
-
ADFビジネス・コンポーネントのインタフェースとクラスのメソッド・コールの詳細は、「ADFビジネス・コンポーネントのよく使用されるメソッド」を参照してください。
-
Oracle ADFで実装される一般的なOracle Formsタスクの詳細は、「Oracle ADFでの一般的なOracle Formsのタスクの実行」を参照してください。
-
oracle.jbo
パッケージに関連するAPIのドキュメントについては、次のJavadocリファレンス・ドキュメントを参照してください。
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アプリケーション・テンプレートを使用してデータ・モデル・プロジェクトを作成するには:
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アプリケーション・テンプレートを使用してデータ・モデル・プロジェクトを作成するには:
既存のアプリケーションへのADFビジネス・コンポーネント・データ・モデル・プロジェクトの追加方法
事前定義されたテクノロジ・テンプレートを使用せずに作成するアプリケーションは、「新規ギャラリ」からプロジェクト・フォルダに追加することで作成できます。ADFビジネス・コンポーネントのプロジェクトを追加する場合は、「新規ギャラリ」のリストから「ADFモデル・プロジェクト」を選択します。これにより、ADFビジネス・コンポーネントに依存するADF Webアプリケーションのデータ・モデルを定義するプロジェクトが作成されます。
始める前に:
Fusion Webアプリケーションを理解しておくと役立つ場合があります。詳細は、「Oracle ADFを使用したFusion Webアプリケーションの構築の概要」を参照してください。
また、アプリケーションを作成および管理するためにJDeveloperが提供するツールおよび機能について理解を深めるうえでも役立つことがあります。『Oracle JDeveloperによるアプリケーションの開発』のOracle JDeveloperによるアプリケーション開発のスタート・ガイドに関する項を参照してください。
データ・モデル・プロジェクトをアプリケーションに追加するには:
データベース接続を使用してデータ・モデル・プロジェクトを初期化する方法
初めてADFビジネス・コンポーネント・モデル・プロジェクトでビジネスコンポーネントを作成する場合は、図3-2に示すように、「ビジネス・コンポーネント・プロジェクトの初期化」ダイアログが表示されます。このダイアログでは、このデータ・モデル・プロジェクトのビジネス・コンポーネントで作業する際に使用する、設計時のアプリケーション・リソース接続を選択したり、既存のIDEレベルの接続をコピーして新規のアプリケーション・リソース接続を作成します。ビジネス・コンポーネントを作成するためにJDeveloperが使用するデータベースをオンラインにするかオフラインにするかを指定できます。ダイアログではデフォルトでオンライン・データベースに指定されています。オフライン・データベースでの作業の詳細は、「オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法」を参照してください。
このダイアログは最初のビジネス・コンポーネントを作成する前に表示されるため、これを使用して、ビュー・オブジェクトが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によるアプリケーションの開発』の「データベースへの接続と使用」を参照してください。
次のタスクを完了する必要があります。
-
「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
-
作成するビジネス・コンポーネントのデータ・ソースとして使用するデータベース用の接続の資格証明を取得します。
データ・モデル・プロジェクトを初期化するには:
オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法
ADFビジネス・コンポーネントはデータベース・オブジェクト・プロバイダとしてのオフライン・データベースの使用をサポートしています。データ・モデル・プロジェクトを初期化してデータベースを指定した後、オフライン・モードのデータベースでの作業に切り替えることができます。モデル・プロジェクトでビジネス・コンポーネントを作成するためのオフライン・データベースでの作業では、接続されていない状態で作業し、準備が整った時点でデータベースへの変更を取得します。また、ビジネス・オブジェクトを強制的に変更するスキーマの変更からプロジェクトを分離したままにします。
オフライン・データベースの作成時または既存のオフライン・データベースの選択時には、引き続きオンライン接続が必要で、これはテスト用に使用されます (Oracle ADFモデル・テスターを使用)およびデプロイメント用に使用されます。設計時は、オフライン・データベースが使用されます。ソース・データベースと同期化するためにオフライン・データベースを更新することもできます。データベース・オブジェクト比較機能によって、各相違を受容または拒否するために使用できるビジュアル・マッピングを取得できます。
始める前に:
JDeveloperのオフライン・データベースについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「データベースへの接続と使用」を参照してください。
次のタスクを完了する必要があります。
-
「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
-
「データベース接続を使用してデータ・モデル・プロジェクトを初期化する方法」の説明に従い、ビジネス・コンポーネントのテスト時に使用するデータベース接続を作成します。
オフライン・データベース・オブジェクトで作業するためにデータ・モデル・プロジェクトを変更するには:
-
「アプリケーション」ウィンドウで、オフライン・データベースを作成するデータ・モデル・プロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。
-
「プロジェクト・プロパティ」ダイアログで「ADFビジネス・コンポーネント」を選択します。
-
「ADFビジネス・コンポーネント」ページで、「オフライン・データベース」を選択し、新規オフライン・データベースの作成アイコンをクリックします。
-
「オフライン・データベースの作成」ダイアログで、データ・モデル・プロジェクトが表示するデータベースとスキーマの名前を入力し、その他のオプションを選択してダイアログを完成させ、「OK」をクリックします。
データ・モデル・プロジェクトは新しい「オフライン・データベース・ソース」フォルダで更新され、オフライン・データベースの名前の付いた空のフォルダが含まれます。
-
「接続」リストで、データ・モデル・プロジェクトのビジネス・コンポーネントをテストするときに接続するオンライン・データベースを選択します。
選択するオンライン・データベースとオフライン・データベースは、データベース・オブジェクト名を確保しテストを有効化するため、同じスキーマを保持している必要があります。ビジネス・コンポーネントのテストの詳細は、「Oracle ADFモデル・テスターの使用方法」を参照してください。
-
「OK」をクリックします。
データ・モデル・プロジェクトでオフライン・データベース定義を作成するには:
- 「アプリケーション」ウィンドウで、オフライン・データベースを作成するフォルダを右クリックし、「新規」→「ソース・データベースからのオフライン・データベース・オブジェクト」を選択します。
- データベース・オブジェクトのリバース・エンジニアリング・ウィザードの「データベース」ページで、オンライン・データベース接続が「ソース・データベース」として表示されていることを確認し、「次へ」をクリックします。
- 「オブジェクトの選択」ページで、「問合せ」をクリックして「使用可能」リストから目的のメソッドを1つ以上選択し、「追加」ボタンをクリックして、それらを「選択済」リストに移動します。
- 「終了」をクリックします。
アプリケーション・サーバーまたはデータベース依存性に関する必知事項
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パッケージでの基本データ型
データ型 | パッケージ | 説明 |
---|---|---|
|
|
データベース・トリガーにより割り当てられた、連続した整数 |
|
|
OracleデータベースのROWID |
|
|
バイナリ・ファイル(BFILE)オブジェクト |
|
|
バイナリ・ラージ・オブジェクト(Binary Large Object: BLOB) |
|
|
キャラクタ・ラージ・オブジェクト(CLOB) |
|
|
ユーザー定義オブジェクト型 |
|
|
ユーザー定義コレクション・タイプ(例: |
後方互換性のために、ADFビジネス・コンポーネントは引き続き、Javaの型が標準になる前に使用可能だったoracle.jbo.domain
パッケージの一連のデータ型を選択するためのオプションを提供しています。表3-2は、後方互換性が必要な場合に使用できる型を示しています。
表3-2 oracle.jbo.domainパッケージの後方互換可能なデータ型
データ型 | パッケージ | 説明 |
---|---|---|
|
|
すべての数値データ。「Numberは抽象クラスです」に関係するコンパイラ・エラーまたは実行時エラーが発生した場合は、 import oracle.jbo.domain.Number; |
|
|
日付および(オプションの)時間 |
|
|
タイムスタンプ値 |
|
|
タイムスタンプ値およびタイム・ゾーン情報 |
|
|
JavaVMまたはADF Context(アプリケーションの <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ビジネス・コンポーネント・プリファレンスのカスタマイズ方法」を参照してください。
次のタスクを完了する必要があります。
- 「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
データ・モデル・プロジェクト・プロパティをカスタマイズするには:
- 「アプリケーション」ウィンドウで、共有アプリケーション・モジュールを作成するプロジェクトを右クリックし、「プロジェクト・プロパティ」を選択します。
- 「プロジェクト・プロパティ」ダイアログで「ADFビジネス・コンポーネント」を開き、ツリー内で目的のノードを選択します。ダイアログのどのページでもヘルプを参照するには、[F1]を押します。
ADFビジネス・コンポーネント・プリファレンスのカスタマイズ方法
ADFビジネス・コンポーネント用に構成される設計時および実行時の多数のオプションがJDeveloperプリファレンス・レベルで指定されます。ADFビジネス・コンポーネントのこれらのプリファレンスについて理解を深めておくことをお薦めします。「プリファレンス」ダイアログで行った選択は、作成する各データ・モデル・プロジェクトに適用されます。
「ADFビジネス・コンポーネントのモデル・プロジェクト・プロパティのカスタマイズ方法」で説明されているとおり、グローバルに指定した特定のプリファレンスは個々のデータ・モデル・プロジェクトでオーバーライドできます。
始める前に:
また、個々のデータ・モデル・プロジェクトに指定できるプリファレンスを理解するうえで役立つこともあります。詳細は、「ADFビジネス・コンポーネントのモデル・プロジェクト・プロパティのカスタマイズ方法」を参照してください。
次のタスクを完了する必要があります。
- 「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ADFビジネス・コンポーネントのデータ・モデル・プロジェクトを作成します。
ADFビジネス・コンポーネント・プリファレンスをカスタマイズするには:
- JDeveloperで、「ツール」→「プリファレンス」の順に選択します。
- 「プリファレンス」ダイアログで「ADFビジネス・コンポーネント」を開き、ツリー内で目的のノードを選択します。ダイアログのどのページでもヘルプを参照するには、[F1]を押します。
ビジネス・コンポーネントの作成および編集
JDeveloperにはデータ・モデル・プロジェクトのビジネス・コンポーネントを作成およびカスタマイズするための包括的な設計時サポートが含まれています。これらの機能によって、専用ウィザードを使用したコンポーネントの作成、概要エディタでのプロパティの変更およびソース・エディタでの定義ファイルの表示を実行できます。
ウィザードを使用した新規コンポーネントの作成方法
「新規ギャラリ」の「ADFビジネス・コンポーネント」カテゴリでは、JDeveloperはそれぞれのビジネス・コンポーネントを作成するためのウィザードを提供しています。各ウィザードでは、新規コンポーネントのコンポーネント名を指定し、どのパッケージにコンポーネントを配置するかを選択できます。パッケージがまだ存在しない場合、新規コンポーネントがそのパッケージの最初のコンポーネントになります。
各ウィザードには、コンポーネント・タイプを作成するために必要な情報を収集する、一連のページが表示されます。「終了」をクリックすると、XMLドキュメント・ファイルが保存され、新規コンポーネントが作成されます。さらに、Javaクラス・ファイルを生成するために「プロジェクト・プロパティ」ダイアログの「ADFビジネス・コンポーネント」→「オプション」ページでデフォルトの「コード生成」オプションを変更すると、JDeveloperではXMLドキュメント・ファイルに加え初期カスタムJavaクラス・ファイルも作成できます。
表からのビジネス・コンポーネントの作成ウィザードは、様々なビジネス・コンポーネント・タイプの生成を単一のエンドツーエンドのプロセスに組み合せた唯一のウィザードであるため、JDeveloperで特に役立ちます。このウィザードを使用すると、多数のビジネス・コンポーネントを迅速かつ容易に作成できます。オンラインまたはオフラインのデータベースに基づいてエンティティ・オブジェクトを作成し、その後、エンティティ・ベースのビュー・オブジェクトまたは問合せベースのビュー・オブジェクトのいずれかとデータ・モデルのビュー・インスタンスを含むアプリケーション・モジュールを作成できます。最後に、ウィザードは連携しているビジネス・コンポーネント間の関係を表示するためのビジネス・コンポーネント・ダイアグラムを生成するオプションを提供します。
ウィザードを使用した後、作成するビジネス・コンポーネントを編集して、後で新規ビジネス・コンポーネントを追加できます。
始める前に:
様々なADFビジネス・コンポーネントを理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントについて」を参照してください。
次のタスクを完了する必要があります。
- 「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ビジネス・コンポーネントを含むデータ・モデル・プロジェクトを作成します。
連携するビジネス・コンポーネントを1回で作成するには:
ポップアップ・メニューを使用した新規コンポーネントの作成方法
「アプリケーション」ウィンドウにパッケージが存在していれば、「アプリケーション」ウィンドウに表示したコンテキスト・メニューからコンポーネントを選択することで、任意のタイプの追加のビジネス・コンポーネントをすばやく作成できます。コンポーネントを追加するには、コンポーネントを配置するデータ・モデル・プロジェクト内のパッケージを右クリックし、「新規」メニューからコンポーネントを選択します。「新規」メニューに表示されるコンポーネントは、選択したプロジェクトのタイプによって異なります。
図3-3に、データ・モデル・プロジェクトでパッケージを右クリックした後で、「アプリケーション」ウィンドウのコンテキスト・メニューに「新規」メニューがどのように表示されるかを示します。コンテキスト・メニューはADFビジネス・コンポーネント・データ・モデル・プロジェクトに表示されるため、使用可能なコンポーネントはADFビジネス・コンポーネントに限定されます。
図3-3 各種ビジネス・コンポーネント作成用のパッケージのポップアップ・メニュー・オプション
「アプリケーション」ウィンドウのポップアップ・メニューには、右クリックするとそのプロジェクトに適したオプションが表示されます。ポップアップ・メニューに「ADFビジネス・コンポーネント」オプションが表示されない場合は、右クリックしたプロジェクトがADFビジネス・コンポーネント・モデル・プロジェクトであることを確認してください。
始める前に:
様々なADFビジネス・コンポーネントを理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントについて」を参照してください。
次のタスクを完了する必要があります。
- 「ADFビジネス・コンポーネントのデータ・モデル・プロジェクトの作成方法」の説明に従い、ビジネス・コンポーネントを含むデータ・モデル・プロジェクトを作成します。
個々のビジネス・コンポーネントをデータ・モデル・プロジェクトに追加するには:
- 「アプリケーション」ウィンドウで、新規ビジネス・コンポーネントを作成するモデル・プロジェクト内のパッケージを右クリックし、「新規」→ビジネス・コンポーネント名を選択します。
- ビジネス・コンポーネントのウィザードで、ウィザードのページを完了し、「終了」をクリックします。ウィザードのどのページでもヘルプを参照するには、[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 コアSummit ADFサンプル・アプリケーションでのADFビジネス・コンポーネントの配置」の説明
自社アプリケーションでは、最適なパッケージ構成を選択できます。具体的には、同じタイプのコンポーネントを1つのパッケージにまとめる必要はありません。
パッケージに最適なコンポーネント数はありません。ただし、最適な構造は二極間(すべてのコンポーネントを1つのパッケージにまとめる構造と各コンポーネントを個々のパッケージに分ける構造)のどこかに収まります。
プロジェクトは、他のデータ・モデル・プロジェクトでの再使用のためにJDeveloperがサポートする最小レベルの単位であることを考慮に入れる必要があります。そのため、コンポーネントをどのように配置するかを考慮する場合もあります。詳細は、「ADFライブラリへの再利用可能なADFコンポーネントのパッケージ化」を参照してください。
コンポーネントの名前変更に関する必知事項
JDeveloperは、アプリケーションの発展につれ変更内容を統合するために役立つリファクタ・アクションを通じてコンポーネントのリファクタをサポートしています。JDeveloperを使用してデータ・モデル・プロジェクトのビジネス・コンポーネントをリファクタすると、コンポーネントの名前を変更したり、それらを別のパッケージに移動でき、さらにJDeveloperはリファクタされたコンポーネントへのすべての参照を検出し、更新します。可能な場合は常に、JDeveloperのリファクタ・アクションを使用してエラーを招き易いプロジェクトの手動での編集を回避できます。データ・モデル・プロジェクトのビジネス・コンポーネントのリファクタの用途と制限の詳細は、「Fusion Webアプリケーションのリファクタ」を参照してください。
コンポーネントの概要エディタを使用したコンポーネントの編集方法
ビジネス・コンポーネントが作成された後は、「アプリケーション」ウィンドウでコンポーネントをダブルクリックするか、コンポーネントを選択し、ポップアップ・メニューから「開く」オプションを選択することにより、対応する概要エディタを使用してそのプロパティを編集することができます。
概要エディタには、ウィザードに表示されるのと同じ編集オプションが表示されますが、表示項目の配置が異なる場合があります。概要エディタでは、コンポーネントのすべての特徴を変更できます。コンポーネントのエディタで変更を加えると、コンポーネントのXMLドキュメント・ファイルが更新され、関連するすべてのカスタムJavaファイルが必要に応じて更新されます。概要エディタは、モーダル・ダイアログではなくJDeveloperの編集ウィンドウであるため、必要な数のコンポーネントの概要エディタを開いて表示できます。
始める前に:
プロジェクトを管理するために使用できるツールについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Oracle JDeveloperの使用」を参照してください。
次のタスクを完了する必要があります。
- 「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
データ・モデル・プロジェクトのビジネス・コンポーネントのプロパティを編集するには:
ビジネス・コンポーネントのテスト、リファクタおよび視覚化
JDeveloperにはデータ・モデル・プロジェクトで作成するビジネス・コンポーネント数の急増を管理するための包括的な設計時サポートが含まれています。これらの機能では、ビジネス・コンポーネントのテスト、リファクタおよび視覚化を実行できます。
Oracle ADFモデル・テスターの使用方法 /
アプリケーション・モジュール・コンポーネントの作成後は、組込みのOracle ADFモデル・テスターを使用し、繰り返しテストできます。Oracle ADFモデル・テスターを起動するには、「アプリケーション」ウィンドウでアプリケーション・モジュールを選択するか、またはビジネス・コンポーネント・ダイアグラムでポップアップ・メニューから「実行」または「デバッグ」 を選択します。
図3-8に示すとおり、Oracle ADFモデル・テスターではアプリケーション・モジュールのデータ・モデルにビュー・オブジェクト・インスタンスを提供し、動的に生成されるユーザー・インタフェースを使用してユーザーとインスタンスとの対話を可能にします。このツールでは、アプリケーション・モジュールのクライアント・インタフェース・メソッドのリストも提供され、アプリケーション・モジュールのノードをダブルクリックすると、対話的にテストできます。このツールは、Webページのビュー・レイヤー作成の前後において、ビジネス・サービスのテストやデバッグに必要不可欠なものです。
始める前に:
データ・モデル・プロジェクトの実行時動作について理解しておくと役立つ場合があります。詳細は、「ビュー・インスタンスの問合せのテスト」を参照してください。
また、ADFビジネス・コンポーネントを含めOracle ADFアプリケーションをテストするために使用できる機能について理解しておくと役立つことがあります。詳細は、「ADFコンポーネントのテストとデバッグ」を参照してください。
次のタスクを完了する必要があります。
- 「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
アプリケーション・モジュール構成内のビュー・インスタンスをテストするには:
Oracle ADFソース・コードの取得に関する必知事項
ADFビジネス・コンポーネントはビジネス上非常に重要なアプリケーションにおいて使用されることが多いため、サポート契約を締結しているお客様は、ADFビジネス・コンポーネントを含めてOracle ADFの完全なソースをOracle Worldwide Supportから入手できます。「ADF宣言デバッガの使用」に説明されているように、Oracle ADFの完全なソース・コードは、問題の診断を支援するための重要なツールです。「拡張クラスによるフレームワークの動作のカスタマイズ」に説明されているように、Oracle ADFの完全なソース・コードを使用すると、必要に応じてベース・フレームワーク機能を適切に拡張する方法を理解するためにも役立ちます。
データ・モデル・プロジェクトでのビジネス・コンポーネントの使用方法を検索する方法
オフライン・データベースのデータベース・オブジェクトの名前またはADFビジネス・コンポーネントの名前を変更する前に、選択したアイテムを参照するすべてのオブジェクトを表示できます。「ログ」ウィンドウの「使用方法の検索」ページを使用して、選択したアイテムのデータ・モデル・プロジェクトの使用方法をすべて表示できます。
始める前に:
JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Javaコードの使用」を参照してください。
また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。詳細は、「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。
次のタスクを完了する必要があります。
- 「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
ADFビジネス・コンポーネントによって使用されているアイテムを検索するには:
データ・モデル・プロジェクトでビジネス・コンポーネントの依存性を探索する方法
依存性エクスプローラでは、展開できるダイアグラムを通じてデータ・モデル・プロジェクト内のアーティファクトの使用関係を視覚化できます。データ・モデル・プロジェクト内のビジネス・コンポーネントの数が増えると、ビジネス・コンポーネントとその他のプロジェクト・アーティファクト間の関係を探索することが必要になる場合があります。ダイアグラムを展開するときに、選択したコンポーネントを参照するアーティファクトと選択したコンポーネントで参照されるアーティファクトを表示できます。このように、依存性エクスプローラは、「使用方法の検索」ログ・ウィンドウで返された使用情報よりも包括的な関係情報を表示します。
ダイアグラムでデータ・モデル・プロジェクトに対して表示されるアーティファクトには、様々なビジネス・コンポーネントXML定義ファイル(ビュー・オブジェクト、エンティティ・オブジェクト、アプリケーション・モジュールなど)、プロジェクト構成ファイル(bc4j.xml
やModel.jpx
など)、リソース・バンドル・ファイル(ModelBundle.properties
など)、Java実装ファイル(SummitViewObjectImpl.java
やSummitEntityImpl.java
など)、ADFビジネス・コンポーネント・フレームワーク・ソース・ファイル(Oracle ADFビジネス・コンポーネントの型クラスなど)が含まれます。
図3-9に、ビュー・オブジェクト用のCountryVO.xml
ファイルにフォーカスを置いた依存性エクスプローラを示します。左側のノードにはCountryVO
を参照するアーティファクトが表示され、右側のノードはCountryVO
によって参照されているアーティファクトです。右クリック・メニューから「開く」を選択して、JDeveloperソース・エディタにこれらのアーティファクトのいずれかを開き、詳細な参照を表示できます。
始める前に:
JDeveloperで提供される共通開発ツールに関する知識が役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Oracle JDeveloperの使用」を参照してください。
次のタスクを完了する必要があります。
- 「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
ADFビジネス・コンポーネントとその他のプロジェクト・アーティファクト間の依存性を検証するには:
データ・モデル・プロジェクトでのビジネス・コンポーネントのリファクタ方法
「アプリケーション」ウィンドウででコンポーネントを選択し、ポップアップ・メニューから「リファクタ」→「名前の変更」を選択すると、いつでもコンポーネントの名前を変更できます。「構造」ウィンドウには、アプリケーション・モジュール・データ・モデルのビュー・オブジェクト属性やビュー・インスタンスなど「アプリケーション」ウィンドウには表示されないコンポーネントの詳細のための「名前の変更」ポップアップ・メニュー・オプションも表示されます。また、「アプリケーション」ウィンドウ内で[Ctrl]キーを押しながらクリックして1つ以上のコンポーネントを選択し、次にポップアップ・メニューから「リファクタ」→「移動」を選択すると、選択したコンポーネントを新規パッケージに移動できます。現在のデータ・モデル・プロジェクト内の古いコンポーネント名やパッケージへの参照は、自動的に修正されます。
始める前に:
JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Javaコードの使用」を参照してください。
また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。詳細は、「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。
次のタスクを完了する必要があります。
- 「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
データ・モデル・プロジェクトでビジネス・コンポーネントをリファクタするには:
オフライン・データベース・オブジェクトのリファクタおよびビジネス・コンポーネントの更新方法
データ・モデル・プロジェクトとともにオフライン・データベース・ソースを使用している場合、データベース、個々の表および個々の列の名前を変更できます。JDeveloperは、データ・モデル・プロジェクトのADFビジネス・コンポーネントおよびオフライン・データベース自体とともにこれらのデータベース・オブジェクトのリファクタをサポートしています。加えた変更は、データベース・オブジェクトを参照する定義を持つビジネス・コンポーネントに自動的に適用されます。たとえば、オフライン・データベースでデータベース表の名前を変更した場合、その表を参照するビュー・オブジェクト問合せは新しい名前を使用するように変更されます。
始める前に:
JDeveloperのリファクタのサポートについて理解しておくと役立つ場合があります。詳細は、『Oracle JDeveloperによるアプリケーションの開発』の「Javaコードの使用」を参照してください。
また、ADFビジネス・コンポーネントのリファクタの制限について理解しておくと役立つことがあります。「ADFビジネス・コンポーネント・オブジェクト属性のリファクタ」を参照してください。
次のタスクを完了する必要があります。
-
「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
-
「オフライン・データベース・オブジェクトで作業するためのデータ・モデル・プロジェクトの変更方法」の説明に従い、データ・モデル・プロジェクトでオフライン・データベースを作成します。
ADFビジネス・コンポーネントのオフライン・データベース表の名前をリファクタするには:
-
「アプリケーション」ウィンドウで、データ・モデル・プロジェクトを開き、編集したいデータベース・オブジェクトを選択します。
-
メイン・メニューから「リファクタ」→「名前の変更」を選択します。
また、データベース・オブジェクトを右クリックして「リファクタ」→「名前の変更」を選択することもできます。
-
「名前の変更」ダイアログで、新しい名前を入力して「 プレビュー」をクリックします。
-
「ログ」ウィンドウで、データベース・オブジェクト名を参照しているビジネス・コンポーネントを確認します。
「ログ」ウィンドウの「名前の変更」ページで名前付きアイテムがJDeveloper内のエディタにリンクされます。必要に応じて、リスト内のアイテムをクリックし、JDeveloper内でその詳細を表示します。
-
「リファクタ」をクリックし、「ログ」ウィンドウに表示された新しい名前を適用します。
ADFビジネス・コンポーネントのオフライン・データベース列の名前をリファクタするには:
ダイアグラム使用による関連ビジネス・コンポーネントの表示方法
プロジェクトが定義するビジネス・コンポーネントの数が増大すると、コンポーネントをリファクタして、最初に作成された関係を変更する場合があります。データ・モデル・プロジェクトにおける複数のコンポーネントの関係を把握するには、ビジネス・コンポーネントを概要エディタで開き、「ダイアグラム」タブをクリックします。エディタの関係ダイアグラムでは、編集するコンポーネントを太字で識別します。関連コンポーネントは、クリックするとリンクで識別されるコンポーネントを表示できるテキスト・リンクとして表示されます。
たとえば、図3-10は、ProductVO
ビュー・オブジェクトのエディタの「ダイアグラム」タブを示しています。ProductVO
がアクセスできるエンティティ・オブジェクト(たとえば、ProductEO
)、関連ビュー・オブジェクトに対するビュー・オブジェクトの関係を定義するビュー・リンク(たとえば、ProductVO
とItemVO
の間のリンクにマウス・ポインタを置くとItemProductIdFkLink
ビュー・リンクが表示される)およびビュー・リンクにより命名された関連ビュー・オブジェクト(この例では、ItemVO
)をダイアグラムにより識別します。これらの各関連コンポーネントは、クリックするとエディタの「ダイアグラム」タブでコンポーネントを開くことができるリンクとして表示されます。関連コンポーネントのリンクをクリックすると、ダイアグラムを使用して、プロジェクトで定義するコンポーネント関係にナビゲートできます。
図3-10 関係ダイアグラムにおけるメイン・オブジェクトとすべての関連コンポーネントの表示
始める前に:
JDeveloperにおけるUMLクラス・ダイアグラムによるアプリケーションのモデル化のサポートについて理解しておくと役立つ場合があります。『Oracle JDeveloperによるアプリケーションの開発』の「モデリングを使用するアプリケーション開発」を参照してください。
次のタスクを完了する必要があります。
- 「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
データ・モデル・プロジェクトのビジネス・コンポーネントの関係ダイアグラムを表示するには:
UMLダイアグラムの使用に関する必知事項
JDeveloperでは、ADFビジネス・コンポーネントに対する充実したUMLダイアグラム・サポートが提供されます。作成済の既存のコンポーネントは、ビジネス・コンポーネント・ダイアグラムに追加して視覚化できます。また、コンポーネントの作成および変更にダイアグラムを使用することもできます。ダイアグラムは、エディタでの変更と同期しています。
新しいビジネス・コンポーネント・ダイアグラムを作成するには、JDeveloperの「新規ギャラリ」の「ADFビジネス・コンポーネント」カテゴリから、「ビジネス・コンポーネント・ダイアグラム」アイテムを使用します。このカテゴリは、Business Tierの選択肢の一部です。
ビジネス・コンポーネントのカスタマイズ
コンポーネントのベース機能を拡張するため、またはイベントを処理するためにカスタム・コードを追加する必要がある場合、アプリケーション・モジュール、エンティティ・オブジェクト、ビュー・オブジェクトを含め作成するADFビジネス・コンポーネントのすべての主要タイプに対してカスタムJavaクラスを作成する必要があります。
たとえば、特定のビジネス・ロジックを実行する場合は、アプリケーション・モジュールのJavaクラスにカスタム・メソッドを追加できます。これには次のコードが考えられますが、これらのコードに限定されるものではありません。
-
表示するデータを正しく問い合せるためのビュー・オブジェクト・プロパティの構成
-
集計結果を取得するための、ビュー・オブジェクト行の反復処理
-
1つ以上のビュー・オブジェクトに対する、複数ステップのプロシージャによるロジックの実行
これらの実装の詳細をアプリケーション・モジュール内で一元管理することで、次の利点が得られます。
-
コードの目的が、クライアントにより明確に伝わります。
-
必要に応じて、複数のクライアント・ページから同じコードを簡単にコールできます。
-
ビジネス・サービス機能全体の回帰テストを簡略化できます。
-
クライアントに影響を与えることなく、実装を改善するオプションを使用可能にできます。
-
ページ内での論理的ビジネス機能の宣言的起動が可能になります。
ビジネス・コンポーネントJavaサブクラスの生成方法
エンティティ・オブジェクト、ビュー・オブジェクトおよびデータ・モデル・プロジェクトのアプリケーション・モジュールに会社レベルのサブクラスを指定できます。生成する新しいビジネス・コンポーネントがこれらのカスタム・クラスに基づくようにこのオプションを有効にするには、ADFビジネス・コンポーネント実装クラスを拡張するJavaソース・ファイルを作成する必要があり(oracle.jbo
パッケージ内)、このファイルが拡張された機能の最終的な追加先となる場合があります。これを実行すると、アプリケーション内のサブクラスによって選択可能なベース・フレームワーク・クラスへ後から柔軟に変更を加えることができます。その後、「プロジェクト・プロパティ」ダイアログで「ADFビジネス・コンポーネント」→「ベース・クラス」を選択しサブクラスの名前を指定します。
さらに、個々のコンポーネントのビジネス・コンポーネント用に生成するカスタム・クラスの生成を有効にできます。各概要エディタのJavaページでこのオプションを有効にすると、JDeveloperにより、構成可能なネーミングの標準に準拠した名前のコンポーネントに関連するカスタム・クラスのJavaソース・ファイルが作成されます。このクラスの名前は、コンポーネントのXMLドキュメントに記録され、コンポーネントでのみ必要とされるカスタムJavaコードは、このクラス内に記述できます。コンポーネントのカスタムJavaクラスを有効にしたら、「アプリケーション」ウィンドウでコンポーネントを開きJavaクラスをダブルクリックしてクラスを編集します。
または、JDeveloperが各コンポーネント・タイプのJavaクラスを生成する方法を制御するプロジェクトレベルの設定を変更できます。変更するには、「ツール」→「プリファレンス」を選択し、「ADFビジネス・コンポーネント」ページを開きます。選択した設定は、今後作成するすべてのビジネス・コンポーネントに適用されます。
ベスト・プラクティス:
ADFビジネス・コンポーネントを初めて使用する開発者には、ベース・フレームワーク・クラスをオーバーライドして、すべての生成されたカスタムJavaクラスがカスタマイズされた動作を選択できるようにすることをお薦めします。この方法は、個々のエンティティ・オブジェクトおよびビュー・オブジェクトのカスタム・クラスの作成より優先されます。カスタム・コンポーネントを生成するときは、「プロジェクト・プロパティ」ダイアログの「ADFビジネス・コンポーネント」→「ベース・クラス」ページで、フレームワーク・クラスをオーバーライドするように指定します。
始める前に:
ビジネス・コンポーネントのプログラム的操作について理解しておくと役立つ場合があります。詳細は、次の各項を参照してください。
次のタスクを完了する必要があります。
- 「ウィザードを使用した新規コンポーネントの作成方法」の説明に従って、データ・モデル・プロジェクトのビジネス・コンポーネントを作成します。
カスタム・クラスでフレームワーク・ビジネス・コンポーネント・クラスをオーバーライドするには:
ビジネス・コンポーネント・メソッドのクライアントへの公開方法
クライアントからコール可能にするカスタム・コードをADFビジネス・コンポーネントに追加する場合は、クライアントに表示されるコンポーネントすべてについて、その機能をクライアントに公開できます。JDeveloperでは、クライアント・インタフェース上で1つ以上のカスタム・メソッドをクライアントに公開している各コンポーネントに対して、関連するJavaインタフェース・ファイルが自動的に保持されます。そのため、SummitAppModule
などのアプリケーション・モジュールで作業していると仮定すると、次のようなカスタム・インタフェースを利用できます。
-
カスタム・アプリケーション・モジュール・インタフェース
SummitAppModule extends ApplicationModule
-
カスタム・ビュー・オブジェクト・インタフェース
OrderItemsInfo extends ViewObject
-
カスタム・ビュー行インタフェース
OrderItemsInfoRowClient extends Row
これにより、クライアント・コードでは、汎用クライアント・インタフェースをより詳細なインタフェースにキャストできます。詳細なインタフェースには、特定のコンポーネントに対して選択した、クライアントからアクセス可能な一連のメソッドが含まれます。
始める前に:
カスタム・コードでオーバーライドできるADFビジネス・コンポーネント・インタフェースのメソッドについて理解しておくと役立つ場合があります。詳細は、「ADFビジネス・コンポーネントのよく使用されるメソッド」を参照してください。
次のタスクを完了する必要があります。
- 「ビジネス・コンポーネントJavaサブクラスの生成方法」の説明に従い、アプリケーション・モジュールまたはビュー・オブジェクトの実装クラスを生成し、クライアントに公開するカスタム・メソッドを追加します。
コンポーネント実装クラスからクライアント・メソッドを公開するには:
- 「アプリケーション」ウィンドウで、カスタム・クラスを作成するコンポーネントをダブルクリックします。
- コンポーネントの概要エディタで、「Java」ナビゲーション・タブを選択します。
- 「Java」ページで、「クライアント・インタフェースの編集」アイコンをクリックします。
- 「クライアント・インタフェースの編集」ダイアログで、「使用可能」リストから目的のメソッドを1つ以上選択し、「追加」ボタンをクリックして、それらを「選択済」リストに移動します。
- 「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式による属性のデフォルト値の定義手順は、「式エディタの編集」ダイアログにGroovy式を入力する方法を説明するための例です。この理由から、同様に「式エディタの編集」ダイアログを使用して定義する「式値のリフレッシュ」に関する言及が含まれています。「式値のリフレッシュ」は属性のデフォルト値の定義に特有のものです。そのため、「式エディタの編集」ダイアログにGroovy式を入力する作業に、「式値のリフレッシュ」の定義に関連する作業が必ずしも含まれるとはかぎりません。- エンティティ・オブジェクトまたはビュー・オブジェクトのXMLエディタ・ビューを開きます。たとえば、Countryという名前のエンティティ・オブジェクトの場合は、
CountryEO.xml
をダブルクリックしてエンティティ・オブジェクトの概要エディタを開きます。 - 「属性」タブをクリックします。
- 「属性」タブの「詳細」ページにナビゲートし、「デフォルト値」セクションに移動します。
- 「式」ラジオ・ボタンを選択します。
- 横にあるアイコンをクリックし「式エディタの編集」ダイアログを開き、デフォルト値を算出するGroovy式を定義して、「OK」をクリックします。
- 必要であれば、前述のステップで説明したとおりデフォルト値式のすぐ下のフィールドで、「式値のリフレッシュ」を入力します。前述のステップと同じ方法で、「式値のリフレッシュ」を定義します。
式を入力したときの処理
エンティティ・オブジェクトやビュー・オブジェクトなどのビジネス・コンポーネントにGroovy式を入力してプロジェクトを保存すると、入力したGroovy式がコンポーネントに関連する.bcs
ファイルに移入されます。この処理が正しく実行されるようにするため、「Groovyプロジェクトの設定に関する必知事項」の説明のとおり、Groovyファイルの生成を制御する設定は無効にしないでください。エンティティ・オブジェクトまたはビュー・オブジェクトの様々なUIコンテキストでGroovy式を入力するメカニズムが用意されています。ビジネス・コンポーネントに関連する.bcs
ファイルに追加されたGroovy式を表示します。
-
属性のデフォルト値としてGroovy式を定義した後、または式値のリフレッシュを設定した後。
-
属性に、ラベル、ツールチップなどのUIヒントを定義した後。
図3-12は、ビュー・オブジェクトに追加されたGroovy式を示しており、ビュー・オブジェクトの属性のデフォルト値を設定しています。式はハイパーリンクとして表現されます。ハイパーリンクのリンクは.bcs
ファイル内の式スクリプトにリンクしています。このハイパーリンクをクリックすると、このビジネス・コンポーネントに関連する.bcs
ファイルが開きます。
図3-12 ハイパーリンクとして表示されたGroovy式
エンティティ・オブジェクトまたはビュー・オブジェクトに対して追加されたGroovy式はコンポーネントの「構造」ウィンドウにも表示されます。図3-13は、OrdEOコンポーネントのDateOrdered
属性に対して追加された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スクリプトからカスタム・クラスを呼び出すことができます。
クラス・ファイルで、次のことを行う必要があります。
-
oracle.adf.share.security.AllowUntrustedScriptAccess
をインポートします。 -
注釈
@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
他のビジネス・コンポーネントのメンバーの参照
エンティティ・オブジェクトおよびビュー・オブジェクトで定義されているメソッドおよび属性を式で参照し、別のエンティティ・オブジェクトの属性または検証規則に適用することもできます。そのためには、エンティティ・アソシエーションのアクセッサを参照します。
たとえば、エンティティにDept
とEmp
のマスター/ディテール・アソシエーションを定義する場合、デフォルトでエンティティ・アソシエーションのアクセッサにはDept
とEmp
という名前が付けられ、関連元と関連先のデータ・ソースが指定されます。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ソースにプロンプトが表示されなくなります。
.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スクリプト・メソッドを保持できます。
- 「ファイル」メニューから「新規」をクリックし、「ギャラリから」を選択して、「新規ギャラリ」ダイアログの「ビジネス層」セクションで「ADFビジネス・コンポーネント」を選択し、このダイアログの右ペインで「スクリプト・クラス」を選択します。
- 「スクリプト式クラスの作成」ダイアログの「クラス名」フィールドに、このスクリプト式クラスのクラス名を入力します。
- 「パッケージ名」フィールドに、このスクリプト式クラスを格納するパッケージを指定します。
- 必要に応じて、「拡張」に、このスクリプト式クラスによって拡張されるスクリプト式クラスを指定します。
- 「OK」をクリックします。