Oracle® Fusion Middleware Oracle Application Development FrameworkによるFusion Webアプリケーションの開発 12c (12.2.1.3.0) E90376-03 |
|
前 |
次 |
この付録の内容は次のとおりです。
ADFのベース・ビジネス・コンポーネント・クラスを拡張するカスタム・フレームワーク・クラスや独自のビジネス・コンポーネント定義で使用したり拡張するカスタム・フレームワーク・クラスを作成できます。これは、アプリケーション・モジュールにも当てはまります。
アプリケーションに固有なビジネス・コンポーネントの開発を開始する前に、この付録で解説されているADFビジネス・コンポーネント・フレームワーク実装のベース・クラスをすべて拡張するクラスから構成される層を独自に作成してください。アプリケーション・モジュール・コンポーネントのカスタムのフレームワーク・ベース・クラスの例を、次に示します。
package com.yourcompany.adfextensions; import oracle.jbo.server.ApplicationModuleImpl; public class CustomApplicationModuleImpl extends ApplicationModuleImpl { /* * We might not yet have any custom code to put here yet, but * the first time we need to add a generic feature that all of * our company's application modules need, we will be very happy * that we thought ahead to leave ourselves a convenient place * in our class hierarchy to add it so that all of the application * modules we have created will instantly benefit by that new feature, * behavior change, or even perhaps, bug workaround. */ }
ユーザーが選択したパッケージ名(com.yourcompany.adfextensions
など)の、カスタマイズされたフレームワーク・ベース・クラスの共通セット(それぞれがoracle.jbo.server.*
パッケージをインポート)は、次のクラスで構成されます。
public class CustomEntityImpl extends EntityImpl
public class CustomEntityDefImpl extends EntityDefImpl
public class CustomViewObjectImpl extends ViewObjectImpl
public class CustomViewRowImpl extends ViewRowImpl
public class CustomApplicationModuleImpl extends ApplicationModuleImpl
public class CustomDBTransactionImpl extends DBTransactionImpl2
public class CustomDatabaseTransactionFactory extends DatabaseTransactionFactory
完全を期すために、次のクラスにカスタマイズされたフレームワーク・クラスを作成することもできます。
public class CustomViewDefImpl extends ViewDefImpl
public class CustomEntityCache extends EntityCache
public class CustomApplicationModuleDefImpl extends ApplicationModuleDefImpl
これらのクラスでのオーバーライドは、かなりまれな要件です。
クライアント層には、クライアント上で実行され、ADFユーザーが操作するコードが格納されます。クライアント層には、主要なADFビジネス・コンポーネント用のインタフェース・メソッドがいくつか存在します。
この項で説明するインタフェースはすべて、クライアント層で使用するためにメソッドを公開できるように設計されています。これらのインタフェース・メソッドは、oracle.jbo.*
パッケージの一部です。
この項では、ADFビジネス・コンポーネントの主要なインタフェースでコール、記述およびオーバーライドの対象としてよく使用されるメソッドのサマリーを示します。
注意:
これらのoracle.jbo.*
インタフェースに対応する実装クラスは、クライアント・コードによって直接アクセスされないように、意図的に設計されています。「ビジネス・サービス層で使用されるメソッド」では、該当する実装クラスはoracle.jbo.server.*
パッケージの中に存在し、クライアント層コードで使用しないようユーザーの注意を喚起するため、一般にImpl
という接尾辞が名前に付いていることが示されています。
アプリケーション・モジュールはビジネス・サービス・コンポーネントの1つで、その他のADFコンポーネントのトランザクション・コンテナとして機能し、これらと密接に連携して、ビジネス・アプリケーション開発者にとって重要な多数のJava EE設計パターンを実装します。それらのデザイン・パターンの実装により、クライアント・コードは、クライアントに必要なデータのみを取得してクライアントが望む方法で表示するFast Lane ReaderのSQL問合せに基づいて、更新可能な一連の値オブジェクトと簡単に連携できます。それらの値オブジェクトに行われた変更は、ビジネス・サービス層内の永続的なビジネス・ドメイン・オブジェクトと自動的に協調して、ビジネス・ルールを首尾一貫して施行し、データベースに変更を保存します。表D-1は、ApplicationModule
インタフェースを使用して、アプリケーション・モジュールで実行できる操作を説明しています。
注意:
ADFビジネス・コンポーネントによって実装されるデザイン・パターンの完全なリストは、「ADFビジネス・コンポーネントJava EEデザイン・パターン・カタログ」を参照してください。
表D-1 ApplicationModuleインタフェース
実行する処理 | コールするApplicationModuleインタフェースのメソッド |
---|---|
割当て済インスタンス名( |
|
既存の定義を使用して新しいビュー・オブジェクト・インスタンスを作成 |
|
SQL文を使用して新しいビュー・オブジェクト・インスタンスを作成 |
注意: 動的問合せの |
ネストしたアプリケーション・モジュール・インスタンスに名前でアクセス |
|
既存の定義を使用して、ネストした新しいアプリケーション・モジュール・インスタンスを作成 |
|
ドット表記法の名前( |
注意: このメソッドを使用して1つのメソッド・コールで、ネストしたアプリケーション・モジュールに属するビュー・オブジェクトのインスタンスを検索できます。これにより、まず、 |
現在のトランザクション・オブジェクトにアクセス |
|
アプリケーション・モジュールによる汎用的なアクセスに加えて、JDeveloperでは、クライアントに公開することを選択したサービスレベルのカスタム・メソッドが含まれるカスタムなYourApplicationModuleName
インタフェースも生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「アプリケーション・モジュールの編集」ダイアログの「クライアント・インタフェース」ページを使用します。
Transaction
インタフェースでは、現在のトランザクション内で保留中の変更をクライアントが管理できるようなメソッドを公開しています。表D-2は、Transaction
インタフェースを使用して、トランザクションで実行できる操作を説明しています。
表D-2 Transactionインタフェース
実行する処理 | コールするTransactionインタフェースのメソッド |
---|---|
保留中の変更をコミット |
|
保留中の変更のロールバック |
|
1回かぎりのデータベース・コマンドまたはPL/SQLブロックを実行 |
注意:
|
トランザクション内のすべての保留中の無効な変更を検証 |
|
デフォルトのロック・モードを変更 |
注意: 構成内のロック・モードは、プロパティ |
バンドルされている例外レポート・モードを使用するかどうかを決定 |
注意: ADFコントローラ・レイヤー・サポートでは、Fusion Webアプリケーションの場合、このパラメータは自動的に |
トランザクションのコミットに成功した場合にエンティティ・キャッシュを消去するかどうかを決定 |
注意: デフォルトは |
トランザクションのロールバック時にエンティティ・キャッシュを消去するかどうかを決定 |
注意: デフォルトは |
特定のエンティティ・オブジェクトのエンティティ・キャッシュを消去 |
|
ビュー・オブジェクトは、データベース問合せをカプセル化し、この問合せから得られる結果の行セットを使った作業を簡略化するコンポーネントです。ビュー・オブジェクトは、SQLを使用して1つ以上の表からビジネス・データを投影、フィルタ、結合、またはソートして、ユーザーがページやパネルに表示できる形式にデータをキャストするために使用します。ビュー・リンクを使用して、複数のビュー・オブジェクトを接続し、任意の深さや複雑さの「マスター/ディテール」階層を作成できます。ビュー・オブジェクトからは、読取り専用の問合せ結果が得られます。また、設計時に1つ以上のエンティティ・オブジェクトと関連付けられている場合、ビュー・オブジェクトは完全に更新可能です。更新可能なビュー・オブジェクトは、適切なビジネス・ドメインへの自動委譲を使用して、結果コレクションでの行の挿入、変更および削除をサポートできます。
ビュー・オブジェクトの問合せ結果の行セットは1つだけというケースがユースケースの90パーセントを占めますが、このようなケースを単純化するために、ビュー・オブジェクトには必ず「デフォルト行セット」が含まれています。ビュー・オブジェクトは、すべてのメソッドをこのデフォルトRowSet
に委譲することにより、RowSet
インタフェースに実装します。つまり、どのビュー・オブジェクトでも、任意のRowSet
メソッドを呼び出すことができます。
すべてのビュー・オブジェクトは、StructureDef
インタフェースを実装し、行セット内の各行の属性の数とタイプに関する情報を提供します。したがって、どのビュー・オブジェクトでも、StructureDef
メソッドを直接コールできます。
表D-3は、ViewObject
インタフェースを使用して、ビュー・オブジェクトで実行できる操作を説明しています。
表D-3 ViewObjectインタフェース
実行する処理 | コールするViewObjectインタフェースのメソッド |
---|---|
行セット上で追加のランタイム |
注意: この |
動的な |
|
Query-by-Example基準コレクションを作成 |
注意: その後、作成した |
Query-by-Example基準コレクションを適用 |
|
問合せオプティマイザ・ヒントを設定 |
|
ビュー・オブジェクト内のキー属性の属性定義にアクセス |
|
該当するビュー・オブジェクトの行セット内の行に動的属性を追加 |
|
ビュー・オブジェクトによって作成された行セットをすべて消去 |
|
ビュー・オブジェクト・インスタンスとそのリソースを削除 |
|
ビュー・オブジェクトがデータベースからフェッチしようとする行数に上限を設定 |
注意: デフォルト値は-1です。この場合、データベースから取得する行数(すべて反復処理する場合)に制限はありません。デフォルトでは、それらの行は、ユーザーが反復処理を実行するのに伴って遅延フェッチされます。 |
ViewObject
による汎用的なアクセスのみでなく、JDeveloperでは、ユーザーがクライアントに公開することを選択したビュー・オブジェクトレベルのカスタム・メソッドが含まれるカスタムなYourViewObjectName
インタフェースも生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「ビュー・オブジェクトの編集」ダイアログの「クライアント・インタフェース」ページを使用します。
行セットは、通常はビュー・オブジェクトの問合せに実行によって作成される一連の行を含むオブジェクトです。
行セットに対して必要なイテレータは1つのみというケースがユースケースの90パーセントを占めますが、このようなケースを単純化するために、RowSet
により必ず「デフォルトの行セット・イテレータ」が集計されます。RowSet
オブジェクトは、すべてのメソッドをこのデフォルトRowSetIterator
に委譲することにより、RowSetIterator
インタフェースに実装します。つまり、どのRowSet
オブジェクト(または、ビュー・オブジェクト。ビュー・オブジェクトはデフォルトのRowSet
に対してもRowSet
を実装するため)でも、任意のRowSetIterator
メソッドを呼び出すことができます。
表D-4は、RowSet
インタフェースを使用して、行セットで実行できる操作を説明しています。
表D-4 RowSetインタフェース
実行する処理 | コールするRowSetインタフェースのメソッド |
---|---|
|
注意: バインド変数の序数位置はゼロ・ベースです。 |
データが一度しか読み取られない場合はビュー・オブジェクト行のキャッシングを回避 |
|
強制的に行セットの問合せを実行(排他的ビュー・オブジェクト・インスタンスの場合)、または実行する可能性がある(共有ビュー・オブジェクト・インスタンスの場合) |
注意: このメソッドの動作は、ビュー・オブジェクトが共有アプリケーション・モジュールに属しているかどうかによって異なります。共有モジュールのインスタンスではなく、排他的ビュー・オブジェクトに対する問合せを再度実行すると、新しい問合せコレクションが作成されます。共有ビュー・オブジェクト・インスタンスの問合せを実行する前に、結果セットがすでに存在しないかどうかを判断するためのチェックが行われます。この共有ビュー・オブジェクト・インスタンスについて、すでにキャッシュされている結果があれば、問合せを再実行するのではなく、この結果が再使用されます。共有ビュー・オブジェクト・インスタンスの結果を確実にリフレッシュする必要がある場合は、 |
ビュー・オブジェクトの問合せ結果の行数を推定 |
|
ビュー・オブジェクト行セット内の行に対してXML文書を作成 |
|
受信XML文書内の全行を処理 |
|
他の行セットによって作成された同じエンティティ・オブジェクトに基づいて、行セットが新規行を自動的に確認するかどうかを設定 |
|
プログラムによる反復で使用するセカンダリ・イテレータを作成 |
注意: 後で名前を使用してセカンダリ・イテレータを検出し、使用する場合は、文字列名を引数として渡します。そうでない場合は、 |
行セット・イテレータは、行セット内の行を反復処理するイテレータです。デフォルトでは、行の反復処理を順方向にも逆方向にも実行できます。表D-5は、RowSetIterator
インタフェースを使用して、行セットで実行できる操作を説明しています。
表D-5 RowSetIteratorインタフェース
実行する処理 | コールするRowSetIteratorインタフェースのメソッド |
---|---|
イテレータの行セットの先頭行を取得 |
|
反復処理の対象となる行がまだ存在しているかどうかをテスト |
|
イテレータの行セットの次の行を取得 |
|
指定したキー値を持つ行をこのイテレータの行セット内で検索 |
注意:
|
挿入目的で移入する新しい行を作成 |
注意: 該当する新しい行は、エンティティ・オブジェクトまたはビュー・オブジェクトのレベルで提供されている静的なデフォルト値を持つ属性の場合、または基礎となるエンティティ・オブジェクトのオーバーライドされた |
外部キーまたは識別子(あるいはその両方)の属性値の初期セットを使用してビュー行を作成 |
注意: このメソッドは、エンティティ・オブジェクトの一連のサブタイプから構成されるファミリの1つを返すことができるビュー・オブジェクトを使用する場合に使用します。行を作成するためのコールで正確な識別子属性値を渡すことにより、フレームワークは合致するエンティティ・オブジェクトの正しいサブタイプを下に作成することができます。 |
イテレータの行セットに新しい行を1行挿入 |
注意: 新しく作成した行を、常に行セットにただちに挿入するようにしてください。それにより、行を作成したものの、行セットに挿入し忘れるという間違いをなくすことができます。 |
イテレータの行セットの最終行を取得 |
|
イテレータの行セットの直前の行を取得 |
|
現在の行ポインタを先頭行の前のスロットにリセット |
|
反復処理の実行時にイテレータを終了 |
|
指定した行を現在の行に設定 |
|
現在の行を削除 |
|
現在の行を後で同一イテレータ内の別の場所に挿入するために削除 |
|
現在の行を現在のコレクションから削除(ただし、トランザクションからは削除しない) |
|
範囲(ユーザーが表示できるページ)当たりの行数を設定/変更 |
|
スクロールしてnページ(先頭は1)目の行を表示 |
|
スクロールして、行番号nから始まる行範囲を表示 |
|
範囲内の行番号nを現在の行に設定 |
|
範囲内の全行をRow配列として取得 |
|
Rowは、汎用的な値オブジェクトです。それに含まれる属性は、関連先ビュー・オブジェクトの名前およびJavaタイプに適しています。表D-6は、Row
インタフェースを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。
表D-6 Rowインタフェース
実行する処理 | コールするRowインタフェースのメソッド |
---|---|
名前を使用して属性の値を取得 |
|
名前を使用して属性の値を設定 |
|
単一行のXML文書を作成 |
|
行の検証を積極的に実行 |
|
XMLからの行の属性値の読取り |
|
行を削除 |
|
新しく作成した行への一時的としてのフラグ付け(再度更新されるまで) |
|
行の属性構造の定義情報を取得 |
|
行の |
|
Row
による汎用的なアクセスのみでなく、JDeveloperでは、型保証属性のgetterメソッドおよびsetterメソッドに加えて、ユーザーがクライアントに公開することを選択した望ましい行レベルのカスタム・メソッドも含まれるカスタムのYourViewObjectName
Row
インタフェースも生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「ビュー・オブジェクトの編集」ダイアログの「カスタム行インタフェース」ページを使用します。
StructureDef
は、Row
オブジェクトの構造に関する実行時メタデータにアクセスするためのインタフェースです。
また便宜上、各ビュー・オブジェクトは、StructureDef
インタフェースも実装しており、一連の属性に関するメタデータへのアクセスを、問合せによって生成されるビュー行によって提供します。
表D-7は、StructureDef
インタフェースを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。
表D-7 StructureDefインタフェース
実行する処理 | コールするStructureDefインタフェースのメソッド |
---|---|
ビュー・オブジェクト行内の全属性の属性定義にアクセス |
|
名前を使用して属性定義を検出 |
|
索引を使用して属性定義を取得 |
|
1行内の属性数を取得 |
|
AttributeDef
インタフェースが提供する属性定義情報は、属性名、Javaタイプ、SQLタイプのような、ビュー・オブジェクト行またはエンティティ・オブジェクト・インスタンス用属性のためのものです。また、ユーザーが記述する汎用コードによってインスペクトできるカスタム属性固有のメタデータ・プロパティや、属性およびその値を適切なユーザー・インタフェースに表示する際に役立つUIヒントへのアクセスも提供されます。表D-8は、AttributeDef
インタフェースを使用して、属性で実行できる操作を説明しています。
表D-8 AttributeDefインタフェース
実行する処理 | コールするAttributeDefインタフェースのメソッド |
---|---|
属性のJavaタイプを取得 |
|
属性のSQLタイプを取得 |
注意:
|
属性の種類を特定 |
注意: 簡単な属性とは、定数 |
|
|
|
|
属性の名前を取得 |
|
属性の索引位置を取得 |
|
数値属性の精度または文字列属性の最大値を取得 |
|
数値属性のスケールを取得 |
|
属性に対応する基礎となる列名を取得 |
|
属性に固有なカスタム・プロパティ値を取得 |
|
属性のUI |
|
属性が必須かどうかをテスト |
|
属性が問合せ可能かどうかをテスト |
|
属性が行の主キーの一部であるかどうかをテスト |
|
AttributeHints
インタフェースは、属性とその値を適切なユーザー・インタフェースに表示する際に使用できるUIヒント情報を公開します。表D-9は、AttributeHints
インタフェースを使用して、属性で実行できる操作を説明しています。
表D-9 AttributeHintsインタフェース
実行する処理 | コールするAttributeHintsインタフェースのメソッド |
---|---|
属性のUIラベルを取得 |
|
属性のツールチップを取得します |
|
与えられたフォーマット・マスクを使用して、属性のフォーマット化された値を取得 |
|
属性の表示ヒントを取得 |
注意: 表示されるヒントは、 |
属性の優先されるコントロールのタイプを取得 |
|
属性で提供されるフォーマット・マスクを使用して、フォーマット化された文字列値を解析 |
|
ビジネス・サービス層には、ビジネス・ロジックが格納されます。ビジネス・サービス層には、主要なADFビジネス・コンポーネント用のメソッドがいくつか存在します。
これらのoracle.jbo.*
インタフェースに対応する実装クラスは、「クライアント層で使用されるメソッド」で説明されているとおり、クライアント・コードによって直接アクセスされないように、意図的に設計されています。該当する実装クラスはoracle.jbo.server.*
という別のパッケージの中に存在し、クライアント層コードで使用しないようユーザーに喚起するため、Impl
という接尾辞が名前に付いています。
ビジネス・サービス層の実装コードでは、クライアントから利用できるのと同じメソッドを使用できますが、次の処理も実行できます。
oracle.jbo.*
インタフェースをそのoracle.jbo.server.*
パッケージ実装クラスに安全にキャストして、該当するImpl
クラス上のメソッドも使用する。
super.
methodName
()
をコールして、そのデフォルト機能の拡張または変更を実行する前または後で、基本フレームワークの実装クラスのpublic
またはprotected
メソッドをオーバーライドし、コンポーネントのサブクラス内にカスタム・コードを記述する。
この項では、ADFビジネス・コンポーネントの主要なクラスでコール、記述およびオーバーライドの対象としてよく使用されるメソッドのサマリーを示します。
個々のクラスの仕様を調べる前に、コンポーネントで使用するカスタムJavaファイルの制御方法を理解することが重要です。カスタマイズされたサブクラスがコンポーネントで不要な場合は、基本フレームワーク・クラスで実装を実行時に処理するだけですみます。
ユーザーが作成する各ビジネス・コンポーネントは、単一のXMLコンポーネント・ディスクリプタと、関連するカスタムJava実装ファイル(ゼロ個以上)から構成されます。Javaのカスタマイズをサポートする各コンポーネントでは、JDeveloper IDEのコンポーネントの概要エディタにJavaページが表示されます。様々なJavaクラスを選択、または選択解除して、コンポーネント用に作成するクラスを制御します。クラスを1つも指定しなかった場合、コンポーネントはXMLのみのコンポーネントになり、そのJava実装として基本フレームワーク・クラスのみが使用されます。そうでない場合は、現在のコンポーネントでカスタマイズする必要がある関連するJavaクラスのチェック・ボックスを選択します。JDeveloperは、フレームワーク・ベース・クラスのカスタム・サブクラスを作成します。ユーザーはこのサブクラスにコードを追加できます。
注意:
「ツール」→「設定」→「ビジネス・コンポーネント」を選択し、チェック・ボックスを選択してデフォルト値を設定すると、ADFビジネス・コンポーネントのタイプごとにデフォルトでJavaクラスを生成する必要のあるグローバルなIDE設定を設定できます。
ベスト・プラクティスの1つは、自動生成されたgetterおよびsetterメソッド以外のカスタム・コードは必要なくても、常にエンティティ・オブジェクトとビュー行クラスを生成することです。getterおよびsetterメソッドを使用すると、コンパイル時に型チェックが実行されるため、正しくない種類の値が設定されている属性に反応して、実行時にエラーが表面化するのを防止できます。
ApplicationModuleImpl
クラスは、アプリケーション・モジュール・コンポーネント用のベース・クラスです。アプリケーション・モジュールは、ビジネス・サービスの実装に使用するADFコンポーネントであるため、アプリケーション・モジュール・クラスはサービスレベルのアプリケーション・ロジックを記述できる場所と考えてください。アプリケーション・モジュールは、ビュー・オブジェクト・インスタンスと協調して、ビジネス・ドメイン・オブジェクトに自動的に関連付けされる更新可能な一連の値オブジェクトをサポートします。ビジネス・ドメイン・オブジェクトは、ADFエンティティ・オブジェクトとして実装されます。
表D-10は、ApplicationModuleImpl
クラスを使用して、アプリケーション・モジュールで実行できる操作を説明しています。
表D-10 ApplicationModuleImpl上でよくコールされるメソッド
実行する処理 | コールするApplicationModuleImplクラスのメソッド |
---|---|
(クライアント内から実行することもできる)一般的なアプリケーション・モジュール処理をクラス内から実行 |
これらのメソッドのリストは、「ApplicationModuleインタフェース」を参照してください。 |
アプリケーション・モジュールのデータ・モデルに設計時に追加したビュー・オブジェクト・インスタンスにアクセス |
注意: JDeveloperは、この型保証ビュー・オブジェクト・インスタンスのgetterメソッドを自動的に生成して、アプリケーション・モジュールの設計時のデータ・モデルに各ビュー・オブジェクト・インスタンスを反映します。 |
現在の |
|
設計時にアプリケーション・モジュールに追加した、ネストしたアプリケーション・モジュール・インスタンスにアクセス |
注意: JDeveloperは、この型保証アプリケーション・モジュール・インスタンスのgetterメソッドを自動的に生成して、現在のアプリケーション・モジュールに設計時に追加された、ネストした各アプリケーション・モジュール・インスタンスを反映します。 |
表D-11は、カスタムApplicationModuleImpl
クラスを使用して、アプリケーション・モジュールで実行できる操作を説明しています。
表D-11 カスタムなApplicationModuleImplサブクラスでよく記述されるメソッド
実行する処理 | 記述するカスタムなApplicationModuleImplクラスのメソッド |
---|---|
データベース・ストアド・プロシージャを起動 |
注意:
PL/SQLストアド・プロシージャへのコールのカプセル化の実例を示すサンプル・コードは、「ストアド・プロシージャとストアド・ファンクションの呼出し」を参照してください。 |
カスタムなビジネス・サービス・メソッドをアプリケーション・モジュール上で公開 |
注意: 「アプリケーション・モジュールの編集」ダイアログの「クライアント・インタフェース」ページでメソッド名を選択し、クライアントからアクセスできるように必要に応じて公開します。 |
JDeveloperでは、ユーザーがクライアントに公開することを選択したサービスレベルのカスタム・メソッドが含まれるカスタムなYourApplicationModuleName
インタフェースを生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「アプリケーション・モジュールの編集」ダイアログの「クライアント・インタフェース」ページを使用します。
表D-12は、カスタムApplicationModuleImpl
インタフェースを使用して、アプリケーション・モジュールでオーバーライドできる操作を説明しています。
表D-12 カスタムなApplicationModuleImplサブクラスでよくオーバーライドされるメソッド
実行する処理 | カスタムなApplicationModuleImplクラスでオーバーライドするメソッド |
---|---|
最初はアプリケーション・モジュールの作成時、以降はそのアプリケーション・モジュールが異なるアント・セッションによって使用されるときにカスタムな設定コードを実行 |
注意: これは、Oracle仮想プライベート・データベース(VPD)機能を使用することを目的として現在のユーザーのためにクライアント別コンテキスト情報を設定する際に使用するメソッドです。このメソッドは、その他の種類のPL/SQLパッケージ・グローバル変数(値はクライアントに固有で、他のストアド・プロシージャが依存している可能性がある)を設定する際にも使用できます。 このメソッドは、アプリケーション・モジュールで指定されたビュー・オブジェクト・インスタンス固有のセットアップ・コードを実行する場合にも便利です。ビュー・オブジェクト設定コードをインスタンス固有ものにするかわりに、該当するビュー・オブジェクト・コンポーネントから作成されるインスタンスごとに初期化する場合は、かわりに |
アプリケーション・モジュールのトランザクションが接続プールのデータベース接続と関連付けられた後に、カスタムな設定コードを実行 |
注意:
|
アプリケーション・モジュールのトランザクションがそのデータベース接続をデータベース接続プールに解放する前に、カスタムな設定コードを実行 |
注意:
|
カスタムなアプリケーション・モジュールの状態の状態管理XMLスナップショットへの書出し |
|
カスタムなアプリケーション・モジュールの状態を状態管理XMLスナップショットから読み込んでリストア |
|
DBTransactionImpl2
クラス(ベースのDBTransactionImpl
クラスを拡張し、DatabaseTransactionFactory
クラスによって作成される)は、DBTransaction
インタフェースを実装するベース・クラスであり、現在のトランザクション内で保留中の作業ユニットを表します。
表D-13は、DBTransaction
クラスを使用して、トランザクションで実行できる操作を説明しています。
表D-13 DBTransaction上でよくコールされるメソッド
実行する処理 | コールするDBTransactionクラスのメソッド |
---|---|
トランザクションをコミット |
|
トランザクションをロールバックします。 |
|
トランザクション内のすべての保留中の無効な変更を積極的に検証 |
|
トランザクションの |
|
トランザクションの |
|
トランザクションの |
|
トランザクションの警告リストに警告を追加 |
|
表D-14は、カスタムDBTransactionImpl2
サブクラスを使用して、トランザクションで実行できる操作を説明しています。
表D-14 カスタムなDBTransactionImpl2サブクラスでよくオーバーライドされるメソッド
実行する処理 | カスタムなDBTransactionImpl2クラスでオーバーライドするメソッド |
---|---|
トランザクション・コミット操作の前または後でカスタム・コードを実行 |
|
トランザクション・ロールバック操作の前または後でカスタム・コードを実行 |
|
カスタムなDBTransactionImpl2
サブクラスを実行時に使用するには、次の手順を実行する必要があります。
次のようにcreateメソッドをオーバーライドしてカスタムなDBTransactionImpl2
サブクラスのインスタンスを返すようなDatabaseTransactionFactory
のカスタムなサブクラスを作成します。
package com.yourcompany.adfextensions; import oracle.jbo.server.DBTransactionImpl2; import oracle.jbo.server.DatabaseTransactionFactory; import com.yourcompany.adfextensions.CustomDBTransactionImpl; public class CustomDatabaseTransactionFactory extends DatabaseTransactionFactory { /** * Return an instance of our custom CustomDBTransactionImpl class * instead of the default implementation. * * @return An instance of our custom DBTransactionImpl2 implementation. */ public DBTransactionImpl2 create() { return new CustomDBTransactionImpl(); } }
構成プロパティTransactionFactory
の値にカスタムなトランザクション・ファクトリの完全修飾クラス名を設定して、カスタムなトランザクション・ファクトリ・クラスを使用するようフレームワークに指示します。他の構成プロパティの場合と同様に、構成XMLファイル内で指定しない場合は、かわりに同名のJavaシステム・パラメータとして指定することもできます。
EntityImpl
クラスは、ビジネス・ドメイン・オブジェクトのデータ、検証規則およびビジネス動作をカプセル化するエンティティ・オブジェクトのベース・クラスです。
表D-15は、EntityImpl
クラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。
表D-15 EntityImpl上でよくコールされるメソッド
実行する処理 | コールするEntityImplクラスのメソッド |
---|---|
属性の値を取得 |
注意: このコード生成されたgetterメソッドは、 |
属性の値を設定 |
注意: このコード生成されたsetterメソッドは、 |
名前を使用して属性の値を取得 |
|
名前を使用して属性の値を設定 |
|
エンティティ・オブジェクトの検証を積極的に実行 |
|
データベースのエンティティをリフレッシュ |
|
属性の値を移入しますが、このときこの値は変更中とはされません。そのかわり、変更通知が送信され、画面またはページ上でUIにより値がリフレッシュされます。 |
|
エンティティの |
|
エンティティの |
|
現在のトランザクション内でポスト済(ただし、未コミット状態)であるかどうかに関係なく、エンティティ・インスタンスの状態を判別 |
注意: このメソッドにより、現在のトランザクション内のエンティティ・インスタンスのステータスを示す定数( |
エンティティ・インスタンスの状態を判別 |
注意: このメソッドは通常、 |
データベースから読み取った特定の属性値を取得 |
|
エンティティ・インスタンスのデータベース行を積極的にロック |
|
表D-16は、カスタムEntityImpl
サブクラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。
表D-16 カスタムなEntityImplサブクラスでよく記述されるメソッド
実行する処理 | カスタムEntityImplサブクラスで記述するメソッド |
---|---|
属性に固有な検証を実行 |
注意: エンティティ・オブジェクトの編集ダイアログの「検証」ページ内の正しい属性に対してMethodValidatorルールを追加することにより、属性バリデータ・メソッドを登録します。 |
エンティティ・レベルの検証を実行 |
注意: エンティティ・オブジェクトの編集ダイアログの「検証」パネル内のエンティティに対してMethodValidatorルールを追加することにより、エンティティレベルのバリデータ・メソッドを登録します。 |
一時属性の値を計算 |
生成された |
表D-17は、カスタムEntityImpl
サブクラスを使用して、エンティティ・オブジェクトでオーバーライドできる操作を説明しています。
表D-17 カスタムなEntityImplサブクラスでよくオーバーライドされるメソッド
実行する処理 | EntityImplサブクラスでオーバーライドするメソッド |
---|---|
新しいエンティティ・インスタンスの主キー属性値をプログラムで移入することも含めて、計算後のデフォルト属性値を設定 |
注意:
|
データベースに対して変更をポストする前に属性値を変更 |
|
ユーザーのエンティティ・オブジェクトのかわりにフレームワークがデータベースに対して実行する標準の |
注意: このメソッドは、操作フラグの値を定数 |
すべてのエンティティ・インスタンスがデータベースに対してポストされた後で、該当する変更がコミットされる前に、SQLベースの複雑な検証を実行 |
注意: このメソッドは、トランザクションのエンティティ行ごとに起動されます。 |
すべてのエンティティ・インスタンスがデータベースにコミットした後、カスタム処理を実行 |
注意: このメソッドは、保留中の変更のトランザクション・リストのエンティティ行ごとに起動されます。 |
現在の子エンティティの前に、この子エンティティが依存する、新たに作成された関連する親エンティティがデータベースにポストされることを保証 |
注意: 該当する子エンティティにコンポジット・アソシエーションによって親エンティティが関連付けられている場合、変更のポストはフレームワークによって自動的に処理済です。(構成されているわけではなく)関連付けられているだけの場合は、 |
デフォルトの属性値をプログラムで定義するか、変更された行が初期化状態に再リフレッシュされる前または行が最初に作成された後に、カスタムな初期化を実行 |
注意: このメソッドは、初期化サイクルの終了直前に起動されます。これにより、カスタム・コードの実行に適応できるようになります。 |
注意:
属性レベルの検証コードは、EntityImpl
クラスの適切なset
AttributeName
メソッドの中に直接記述できます。ただし、表D-16でお薦めしたMethodValidator
のアプローチを使用すると、エンティティ・オブジェクトの属性に対応する概要エディタの「検証規則」ページ上に、すべての検証が効果的に配置されます。
警告:
また、validateEntity()
メソッドをオーバーライドして、エンティティレベルの検証コードを記述することもできます。ただし、フレームワークにより最大限の検証エラー・セットが収集され、クライアント・ユーザー・インタフェースに報告されるというADFバンドル例外モードの長所をそのまま維持する必要がある場合は、表D-16でお薦めされているMethodValidator
アプローチを使用します。その場合は、ユーザーの検証メソッドがスローするユーザー例外をフレームワークがすべて自動的に収集するので、ユーザーはバンドルされている例外実装メカニズムを理解する必要がありません。validateEntity()
メソッドをオーバーライドすると、デフォルトでは、Oracle ADFが捕捉していた例外を正確に捕捉し、バンドルする責任がユーザー独自のコードに直接移ります。これは重要なので、毎回、忘れずに手作業でコーディングします。
EntityDefImpl
クラスは、単一のJava VM内で所定のタイプを持つ全エンティティ・オブジェクトに対するシングルトンの共有メタデータ・オブジェクトです。たとえば、Java VMに、EntityDefImpl
クラスの2つのインスタンスが含まれていて、一方に顧客のXMLデータが含まれていて、他方にオーダーが含まれている場合、それぞれのインスタンスは1つのみになります。このクラスは、エンティティ・インスタンスの構造を定義し、新規エンティティ・インスタンスを作成するメソッドおよび主キーによって既存のインスタンスを探すメソッドを提供します。
表D-18は、EntityDefImpl
クラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。
表D-18 EntityDefImpl上でよくコールされるメソッド
実行する処理 | コールするEntityDefImplクラスのメソッド |
---|---|
指定されたタイプのエンティティ・オブジェクトを主キーにより検索 |
注意:
|
現在の |
|
完全修飾名を使用して |
|
エンティティ・オブジェクトのカスタム・プロパティの値を取得 |
|
エンティティ・オブジェクトのカスタム・プロパティの値を設定 |
|
エンティティ・オブジェクトの新規インスタンスを作成 |
注意: 同じカスタムな |
該当するエンティティ・タイプのキャッシュ内でエンティティ・インスタンスの反復処理を実行 |
|
エンティティ定義オブジェクトの配列リストにアクセスし、現在のエンティティを拡張するエンティティを取得 |
|
表D-19は、カスタムEntityDefImpl
クラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。
表D-19 EntityDefImpl上でよく記述されるメソッド
実行する処理 | 記述するカスタムなEntityDefImplクラスのメソッド |
---|---|
属性値または設定情報から構成される初期型保証セットを持つエンティティ・インスタンスの作成を他のクラスに許可 |
注意: 内部ではこのメソッドを使用することにより、 |
表D-20は、EntityDefImpl
クラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。
表D-20 EntityDefImpl上でよくオーバーライドされるメソッド
実行する処理 | カスタムなEntityDefImplクラスでオーバーライドするメソッド |
---|---|
該当するシングルトン・メタオブジェクトのロード時にカスタムなメタデータの初期化を実行 |
|
Refresh-On-Insert属性またはRefresh-on-Update属性をサポートするために |
注意:
|
該当するエンティティのために発行された |
注意: デフォルト値は |
完全修飾名を使用して |
注意: 静的メソッド。 |
エンティティ・オブジェクトのカスタム・プロパティの値を設定 |
|
ビュー・オブジェクトによる暗黙的な方法ではなく、エンティティ・オブジェクトの新規インスタンスの作成を他のクラスに許可 |
注意: 「カスタムのEntityDefImplクラスでよく記述されるメソッド」の項の説明に従ってカスタムのcreateメソッドを記述しない場合、エンティティ・インスタンスの作成を他のクラスに許可するには、このメソッドをオーバーライドして可視性を |
ViewObjectImpl
クラスは、ビュー・オブジェクトのベース・クラスです。
表D-21は、ViewObjectImpl
クラスを使用して、ビュー・オブジェクトで実行できる操作を説明しています。
表D-21 ViewObjectImpl上でよくコールされるメソッド
実行する処理 | コールするViewObjectImplクラスのメソッド |
---|---|
(クライアント内から実行することもできる)一般的なビュー・オブジェクト、行セットまたは行セット・イテレータ操作をクラス内から実行。 |
ビュー・オブジェクト、行セットまたは行セットのイテレータ・レベルでの操作の詳細は、「ViewObjectインタフェース」、「RowSetインタフェース」および「RowSetIteratorインタフェース」を参照してください。 |
デフォルトの行セットを変更せずに、ビュー・インスタンスのメモリー内行セットを検索 |
|
データベースからすべての行をフェッチし、ビュー・オブジェクトの行セット内の行の合計数を決定 |
注意: このメソッドは注意して使用してください。起動する行数が多いと、パフォーマンスが低下する可能性があります。 |
クライアントによる起動のたびに、その後に、ビュー・オブジェクトの行セット内の行の合計数を決定 |
|
ビュー・オブジェクトの行セット内の行の合計数を決定 |
注意: 必要とされるデータベース問合せが1つのみ(行数の取得後は、行が追加および削除されて維持される)なので、これは行数の確認には適した方法です。 |
カウント問合せを実行するが、行数が多くてパフォーマンスに影響する場合、実行を管理するためにcap引数を使用 |
|
名前付きバインド・パラメータを定義 |
|
名前付きバインド・パラメータを削除 |
|
名前を使用して、デフォルト行セット上のバインド変数値を設定 |
注意: ビュー・オブジェクト上で名前付きのバインド変数を以前定義してある場合にのみ機能します。 |
デフォルト行セット上のバインド変数値を設定 |
注意: このメソッドは、名前付きバインド変数が未定義の場合に、Oracle PositionalまたはJDBC Positionalというバインド・スタイルを持つビュー・オブジェクトに対して使用します。 |
メモリー内フィルタ式の評価に基づいてビュー・オブジェクトの行セット内の行のサブセットを取得 |
|
メモリー内フィルタ式の評価に基づいてビュー・オブジェクトの行セット内の現在の範囲内にある行のサブセットを取得 |
|
ADF問合せコンポーネント内に表示される基準アイテムの実行時表示をオーバーライド。サブクラスがオーバーライドして、指定の基準アイテムのカスタム |
|
該当するビュー・オブジェクトのラウンドトリップごとにデータベースからフェッチされる行の数を設定 |
注意: デフォルトのフェッチ・サイズは一度に1行です。ビュー・オブジェクトで多数の行を取得しようとしている場合には、これが最適ではないことは明らかです。したがって、設計時に「ビュー・オブジェクトの編集」ダイアログにある「チューニング」ページを使用してフェッチ・サイズの設定を大きくするか、またはこのメソッドを使用して、実行時に設定する必要があります。 |
共有アプリケーション・モジュールのルックアップ・ビュー・オブジェクト・インスタンスでのみ、行セットの問合せを強制的に(再)実行 |
注意: 問合せを再実行すると、新しい問合せのコレクションが強制的に作成され、アプリケーション・モジュール・キャッシュの使用が妨げられます。このメソッドは、実行中ではなく、セットアップ中に共有アプリケーション・モジュールにアクセスしていることが分かっている場合のみ使用してください。通常の実行時にこのメソッドを使用した場合、このコレクションに同時にアクセスする複数のユーザーのナビゲーションを妨害するような、予想外の副作用が生じる可能性があります。新しい問合せコレクションを作成せずに、キャッシュからコレクションをリフレッシュする必要がある場合は、かわりに |
表D-22は、カスタムViewObjectImpl
サブクラスを使用して、ビュー・オブジェクトで実行できる操作を説明しています。
表D-22 カスタムなViewObjectImplサブクラスでよく記述されるメソッド
実行する処理 | カスタムなViewObjectImplサブクラスで記述するメソッド |
---|---|
バインド変数自体の位置詳細を公開することなくバインド変数値を設定する型保証メソッドをクライアントに提供 |
注意: このメソッドは、内部で |
JDeveloperでは、ユーザーがクライアントに公開することを選択したビュー・オブジェクトのカスタム・メソッドが含まれるカスタムなYourViewObjectName
インタフェースを生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「ビュー・オブジェクトの編集」の「クライアント・インタフェース」ページを使用します。
表D-23は、カスタムViewObjectImpl
サブクラスを使用して、ビュー・オブジェクトで実行できる操作を説明しています。
表D-23 カスタムなViewObjectImplサブクラスでよくオーバーライドされるメソッド
実行する処理 | ViewObjectImplサブクラスでオーバーライドするメソッド |
---|---|
ビュー・オブジェクト・インスタンスが初めて作成されるときにカスタムなビュー・オブジェクト・クラスのメンバー(行属性ではない)を初期化 |
注意: このメソッドは、作成されるビュー・オブジェクトの各インスタンスに適用可能な設定ロジックをアプリケーション・モジュールのコンテキスト内で実行する際に有用です。 汎用のビュー・オブジェクト設定ロジックのかわりに、アプリケーション・モジュールで指定されたビュー・オブジェクト・インスタンス固有のロジックを実行する必要がある場合は、アプリケーション・モジュールの |
カスタムなビュー・オブジェクト・インスタンスの状態の状態管理XMLスナップショットへの書出し |
|
カスタムなビュー・オブジェクト・インスタンスの状態を状態管理XMLスナップショットから読み込んでリストア |
|
代替データソースを利用するために、ビュー・オブジェクトの問合せの実行をカスタマイズします。 |
注意: デフォルトのビュー・オブジェクトは、データベースからデータを読み取り、データベースの結果セットを処理するためにJDBCレイヤーを使用するタスクを自動化します。これに対し、カスタムJavaクラスで適切なメソッドをオーバーライドすることにより、「代替データソースに対するプログラムでのビュー・オブジェクトの使用」で説明されているとおり、様々な代替データソースからプログラムでデータを取得するビュー・オブジェクトを作成できます。
|
プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースを使用するようにし、問合せコレクションが、問合せの実行からフェッチできる行がまだあるかどうかを判断します。 |
|
プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースが利用されるようにし、問合せ内で使用されるバインド・パラメータの名前と値をロギングします |
|
プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースが利用されるようにし、取得したデータの各行を移入します。 |
|
プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースが利用されるようにし、取得される行数を返します。 |
|
プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースを使用するようにし、グローバルな行フェッチ制限で指定された上限値を超える行数を問合せが戻す可能性があるかどうかを判断します。 |
|
プログラムによるビュー・オブジェクトをカスタマイズして、実行される行セットにアクセスし、問合せの実行前に、ビュー・オブジェクトの |
|
プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースが利用されるようにし、クローズ処理中の行セットと関連付けられている可能性のあるリソースをすべて解放します。 |
|
|
|
プログラムによるビュー・オブジェクトをカスタマイズして、範囲ページングを実装します。 |
|
プログラムによるビュー・オブジェクトをカスタマイズして、範囲ページングを実装し、現在の行の範囲の開始とサイズを制御するパラメータを渡して、データソースからフェッチします。 |
|
ViewRowImpl
クラスは、ビュー行オブジェクトのベース・クラスです。
表D-24は、カスタムViewRowImpl
クラスを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。
表D-24 ViewRowImpl上でよくコールされるメソッド
実行する処理 | カスタムなViewRowImplクラスでコールするメソッド |
---|---|
(クライアント内から実行することもできる)一般的なビュー行処理をクラス内から実行 |
行レベルでの操作の詳細は、「行インタフェース」を参照してください。 |
属性の値を取得 |
|
属性の値を設定 |
|
該当するビュー行からの属性保存場所の委譲先である基礎となるエンティティ・インスタンスにアクセス |
注意: エンティティ・オブジェクトの慣用名(別名)は、「ビュー・オブジェクトの編集」ダイアログの「エンティティ・オブジェクト」ページで変更できます。 |
表D-25は、カスタムViewRowImpl
クラスを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。
表D-25 ViewRowImpl上でよく記述されるメソッド
実行する処理 | 記述するカスタムなViewRowImplクラスのメソッド |
---|---|
ビュー・オブジェクト・レベルの一時属性の値を計算 |
注意: メソッドのスケルトンは、JDeveloperによって自動的に生成されます。ただし、メソッド本体内のカスタムな計算ロジックは、ユーザーが記述する必要があります。 |
ビュー行属性の設定というカスタムな処理を実行 |
注意: メソッドのスケルトンは、JDeveloperによって自動的に生成されます。ただし、メソッド本体内のカスタムなロジックは、ユーザーが必要に応じて記述する必要があります。 |
属性の更新の可能性を条件付きの方法で判断 |
|
論理演算を現在行で公開(オプションでクライアントからコール可能) |
注意: これらのビュー行レベルのカスタム・メソッドは、単に反転し、現在行に関連する基礎となるエンティティ・オブジェクト上のメソッド・コールに委譲することがよくあります。 |
JDeveloperでは、ユーザーがクライアントに公開することを選択したビュー行のカスタム・メソッドが含まれるカスタムなYourViewObjectName
Row
インタフェースを生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「ビュー・オブジェクトの編集」ダイアログの「カスタム行インタフェース」ページを使用します。
表D-26は、カスタムViewRowImpl
サブクラスを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。
表D-26 カスタムなViewRowImplサブクラスでよくオーバーライドされるメソッド
実行する処理 | ViewRowImplサブクラスで記述するメソッド |
---|---|
属性の更新の可能性を条件付きの方法で判断 |
|