この付録では、Oracle ADFのADF Business Components層のインタフェースおよびクラスでよく使用されるメソッドについて解説します。
この付録には、次の項が含まれます。
この項で説明するインタフェースはすべて、クライアント層のコード用であり、oracle.jbo.*
パッケージに含まれています。
注意: oracle.jbo.* インタフェース用の対応する実装クラスは、クライアント・コードによって直接アクセスされないように意識的に設計されています。後述のD.2項「ビジネス・サービス層でよく使用されるメソッド」で説明するように、該当する実装クラスはoracle.jbo.server.* パッケージの中に存在し、クライアント層コードで使用しないようユーザーに喚起するため、一般にImpl という接尾辞が名前に付いています。 |
ApplicationModuleは、他のADFコンポーネント用のトランザクション・コンテナとして動作するビジネス・サービス・コンポーネントであり、それらのADFコンポーネントと協調して、ビジネス・アプリケーションの開発者にとって重要な一連のJ2EEデザイン・パターンを実装します。それらのデザイン・パターンの実装により、クライアント・コードは、クライアントに必要なデータのみを取得してクライアントが望む方法で表示するFast Lane ReaderのSQL問合せに基づいて、更新可能な一連の値オブジェクトと簡単に連携できます。それらの値オブジェクトに行われた変更は、ビジネス・サービス層内の永続的なビジネス・ドメイン・オブジェクトと自動的に協調して、ビジネス・ルールを首尾一貫して施行し、データベースに変更を保存します。
表D-1 ApplicationModuleインタフェース
実行する処理 | コールするApplicationModuleインタフェースのメソッド |
---|---|
既存のビュー・オブジェクト・インスタンスに名前でアクセス |
|
既存の定義を使用して新しいビュー・オブジェクト・インスタンスを作成 |
|
SQL文を使用して新しいビュー・オブジェクト・インスタンスを作成 |
注意: 動的問合せの |
ネストしたアプリケーション・モジュール・インスタンスに名前でアクセス |
|
既存の定義を使用して、ネストした新しいアプリケーション・モジュール・インスタンスを作成 |
|
ネストしたアプリケーション・モジュール内でビュー・オブジェクト・インスタンスを検索 |
注意: ネストしたアプリケーション・モジュールに属するビュー・オブジェクトのインスタンスを検索するには、 |
現在のトランザクション・オブジェクトにアクセス |
|
ApplicationModule
による汎用的なアクセスのみでなく、Oracle JDeveloper 10gでは、ユーザーがクライアントに公開することを選択したサービスレベルのカスタム・メソッドが含まれるカスタムなYourApplicationModuleName
インタフェースも生成できます。その場合は、アプリケーション・モジュール・エディタの「クライアント・インタフェース」タブにアクセスし、クライアント・インタフェースに表示するメソッドを「選択済」リストに表示します。また、JDeveloperは、アプリケーション・モジュールをEJBセッションBeanとしてデプロイする場合またはアプリケーション・モジュールをバッチ・モードで使用する場合にリモート・クライアントによって自動的に使用される適切なクライアント・プロキシ実装クラスYourApplicationModuleName
Client
も生成します。
Transactionインタフェースでは、現在のトランザクション内で保留中の変更をクライアントが管理できるようなメソッドを公開しています。
表D-2 Transactionインタフェース
実行する処理 | コールするTransactionインタフェースのメソッド |
---|---|
保留中の変更をコミット |
|
保留中の変更をロールバック |
|
1回かぎりのデータベース・コマンドまたはPL/SQLブロックを実行 |
注意:
|
トランザクション内のすべての保留中の無効な変更を検証 |
|
デフォルトのロック・モードを変更 |
注意: 構成内のロック・モードは、プロパティ |
バンドルされている例外レポート・モードを使用するかどうかを決定 |
注意: ADFコントローラ・レイヤー・サポートでは、Webアプリケーションの場合、このパラメータは自動的に |
トランザクションのコミットに成功した場合にエンティティ・キャッシュを消去するかどうかを決定 |
注意: デフォルトは |
トランザクションのロールバック時にエンティティ・キャッシュを消去するかどうかを決定 |
注意: デフォルトは |
特定のエンティティ・オブジェクトのエンティティ・キャッシュを消去 |
|
ViewObjectを使用すると、データベース問合せがカプセル化され、得られた結果のRowSet
を簡単に操作できます。ビュー・オブジェクトを使用すると、SQLを使用して1つまたは複数の表のビジネス・データに対してプロジェクト、フィルタ、結合またはソートを実行し、該当するページまたはパネル上でユーザーに表示されるものと同じフォーマットにすることができます。ビュー・リンクを使用してビュー・オブジェクトを結合すると、任意のレベルの深さまたは複雑性を備えるマスター/ディテール階層を作成できます。ビュー・オブジェクトは、読取り専用の問合せ結果を作成できます。また、設計時に1つまたは複数のエンティティ・オブジェクトと関連付けると、完全に更新可能にすることができます。更新可能なビュー・オブジェクトでは、正確なビジネス・ドメイン・オブジェクトに対する自動的な委譲により、結果コレクション内の行の挿入、変更および削除をサポートできます。
各ViewObject
では、デフォルト行セットを集約し、ユースケースの90%を簡略化します。その場合は、ViewObject
の問合せ結果に対してRowSet
を1つ使用します。ViewObject
は、このデフォルトのRowSet
に委譲することにより、RowSet
インタフェース上ですべてのメソッドを実装します。つまり、どのRowSet
メソッドも、任意のViewObject
上で同様に起動できます。
どのViewObject
でもStructureDef
インタフェースを実装し、行セット内の各行の属性の数とタイプに関する情報を提供します。そのため、StructureDef
メソッドは任意のビュー・オブジェクト上でコールできます。
表D-3 ViewObjectインタフェース
実行する処理 | コールするViewObjectインタフェースのメソッド |
---|---|
行セット上で追加のランタイムWHERE句を設定 |
注意: この |
動的なORDER BY句を設定 |
|
QBE基準コレクションを作成 |
注意: その後、作成したViewCriteriaオブジェクト上で |
QBE基準コレクションを適用 |
|
問合せオプティマイザ・ヒントを設定 |
|
ビュー・オブジェクト内のキー属性の属性定義にアクセス |
|
該当するビュー・オブジェクトの行セット内の行に動的属性を追加 |
|
ビュー・オブジェクトによって作成された行セットをすべて消去 |
|
ビュー・オブジェクト・インスタンスとそのリソースを削除 |
|
ビュー・オブジェクトがデータベースからフェッチしようとする行数に上限を設定 |
注意: デフォルト値である-1の場合は、データベースから取得する行数(すべて反復処理する場合)に制限はありません。デフォルトでは、それらの行は、ユーザーが反復処理を実行するのに伴って遅延フェッチされます。 |
ViewObject
による汎用的なアクセスのみでなく、JDeveloper 10gでは、ユーザーがクライアントに公開することを選択したビューオブジェクト・レベルのカスタム・メソッドが含まれるカスタムなYourViewObjectName
インタフェースも生成できます。その場合は、ビュー・オブジェクト・エディタの「クライアント・インタフェース」タブにアクセスし、クライアント・インタフェースに表示するメソッドを「選択済」リストに表示します。また、JDeveloperは、アプリケーション・モジュールをEJBセッションBeanとしてデプロイする場合またはアプリケーション・モジュールをバッチ・モードで使用する場合にリモート・クライアントによって自動的に使用される適切なクライアント・プロキシ実装クラスYourViewObjectName
Client
も生成します。
RowSetは、通常はViewObject
の問合せの実行によって作成される一連の行のことです。
各RowSet
では、デフォルト行セット・イテレータを集約し、ユースケースの90%を簡略化します。その場合は、該当する行セットに対して必要なイテレータは1つのみです。RowSet
は、このデフォルトのRowSetIterator
に委譲することにより、RowSetIterator
インタフェース上ですべてのメソッドを実装します。つまり、どのRowSetIterator
メソッドも、任意のRowSet
(または、デフォルトのRowSetでRowSetも実装するViewObject
)上で起動できます。
表D-4 RowSetインタフェース
実行する処理 | コールするRowSetインタフェースのメソッド |
---|---|
WHERE句のバインド変数値を設定 |
注意: バインド変数の序数位置はゼロ・ベースです。 |
データが一度しか読み取られない場合はビュー・オブジェクト行のキャッシングを回避 |
|
行セットの問合せを強制的に(再)実行 |
|
ビュー・オブジェクトの問合せ結果の行数を推定 |
|
ビュー・オブジェクト行セット内の行に対してXML文書を作成 |
|
受信XML文書内の全行を処理 |
|
他の行セットによって作成された同じエンティティ・オブジェクトに基づいて、行セットが新規行を自動的に確認するかどうかを設定 |
|
プログラムによる反復で使用するセカンダリ・イテレータを作成 |
注意: 後で名前を使用してセカンダリ・イテレータを検出し、使用する場合は、文字列名を引数として渡します。そうでない場合は、 |
RowSetIteratorは、RowSet
内の行に対するイテレータです。デフォルトでは、行の反復処理を順方向にも逆方向にも実行できます。
表D-5 RowSetIteratorインタフェース
実行する処理 | コールするRowSetIteratorインタフェースのメソッド |
---|---|
イテレータの行セットの先頭行を取得 |
|
反復処理の対象となる行がまだ存在しているかどうかをテスト |
|
イテレータの行セットの次の行を取得 |
|
指定したキー値を持つ行をこのイテレータの行セット内で検索 |
注意:
|
挿入目的で移入する新しい行を作成 |
注意: 該当する新しい行は、エンティティ・オブジェクトまたはビュー・オブジェクトのレベルで提供されている静的なデフォルト値を持つ属性の場合、または基礎となるエンティティ・オブジェクトのオーバーライドされた |
外部キーまたは識別子(あるいはその両方)の属性値の初期セットを使用してビュー行を作成 |
注意: このメソッドは、エンティティ・オブジェクトの一連のサブタイプから構成されるファミリの1つを返すことができるビュー・オブジェクトを使用する場合に使用します。行を作成するためのコールで正確な識別子属性値を渡すことにより、フレームワークは合致するエンティティ・オブジェクトの正しいサブタイプを下に作成することができます。 |
イテレータの行セットに新しい行を挿入 |
注意: 新しく作成した行を、常に行セットにただちに挿入するようにしてください。それにより、行を作成したものの、行セットに挿入し忘れるという間違いをなくすことができます。 |
イテレータの行セットの最終行を取得 |
|
イテレータの行セットの直前の行を取得 |
|
現在の行ポインタを先頭行の前のスロットにリセット |
|
反復処理の実行時にイテレータを終了 |
|
指定した行を現在の行に設定 |
|
現在の行を削除 |
|
現在の行を後で同一イテレータ内の別の場所に挿入するために削除 |
|
現在の行を現在のコレクションから削除(ただし、トランザクションからは削除しない) |
|
範囲(ユーザーが表示できるページ)当たりの行数を設定/変更 |
|
スクロールしてNページ(1がベース)目の行を表示 |
|
スクロールして、行番号Nから始まる行範囲を表示 |
|
範囲内の行番号Nを現在の行に設定 |
|
範囲内の全行をRow配列として取得 |
|
Rowは、汎用的な値オブジェクトです。それに含まれる属性は、関連先ViewObject
の名前およびJavaタイプに適しています。
表D-6 Rowインタフェース
実行する処理 | コールするRowインタフェースのメソッド |
---|---|
名前を使用して属性の値を取得 |
|
名前を使用して属性の値を設定 |
|
単一行のXML文書を作成 |
|
行の検証を積極的に実行 |
|
XMLからの行の属性値の読取り |
|
行を削除 |
|
新しく作成した行への一時的としてのフラグ付け(再度更新されるまで) |
|
行の属性構造の定義情報を取得 |
|
行のキー・オブジェクトを取得 |
|
Row
による汎用的なアクセスのみでなく、JDeveloper 10gでは、型保証属性のgetterメソッドおよびsetterメソッドに加えて、ユーザーがクライアントに公開することを選択した望ましい行レベルのカスタム・メソッドも含まれるカスタムなYourViewObjectName
Row
インタフェースも生成できます。その場合は、ビュー・オブジェクト・エディタの「カスタム行インタフェース」タブにアクセスし、クライアント・インタフェースに表示するメソッドを「選択済」リストに表示します。また、JDeveloperは、アプリケーション・モジュールをEJBセッションBeanとしてデプロイする場合またはアプリケーション・モジュールをバッチ・モードで使用する場合にリモート・クライアントによって自動的に使用される適切なクライアント・プロキシ実装クラスYourViewObjectName
RowClient
も生成します。
StructureDefは、行
の構造に関する実行時メタデータにアクセスするためのインタフェースです。
また便宜上、各ViewObject
は、StructureDef
インタフェースも実装しており、一連の属性に関するメタデータへのアクセスを、問合せによって生成されるビュー行によって提供します。
AttributeDefが提供する属性定義情報は、属性名、Javaタイプ、SQLタイプのような、ビュー・オブジェクト行またはエンティティ・オブジェクト・インスタンス用属性のためのものです。また、ユーザーが記述する汎用コードによってインスペクトできるカスタム属性固有のメタデータ・プロパティや、属性およびその値を適切なユーザー・インタフェースに表示する際に役立つUIヒントへのアクセスも提供されます。
表D-8 AttributeDefインタフェース
実行する処理 | コールするAttributeDefインタフェースのメソッド |
---|---|
属性のJavaタイプを取得 |
|
属性のSQLタイプを取得 |
注意:
|
属性の種類を特定 |
注意: 簡単な属性の場合は、定数 |
|
|
|
|
属性の名前を取得 |
|
属性の索引位置を取得 |
|
数値属性の精度または文字列属性の最大値を取得 |
|
数値属性のスケールを取得 |
|
属性に対応する基礎となる列名を取得 |
|
属性に固有なカスタム・プロパティ値を取得 |
|
属性のUI |
|
属性が必須かどうかをテスト |
|
属性が問合せ可能かどうかをテスト |
|
属性が行の主キーの一部であるかどうかをテスト |
|
属性に関連するAttributeHintsインタフェースは、属性とその値を適切なユーザー・インタフェースに表示する際に使用できる属性のUIヒント情報を公開します。
表D-9 AttributeHintsインタフェース
実行する処理 | コールするAttributeHintsインタフェースのメソッド |
---|---|
属性のUIラベルを取得 |
|
属性のツールチップを取得 |
|
与えられたフォーマット・マスクを使用して、属性のフォーマット化された値を取得 |
|
属性の表示ヒントを取得 |
注意:
|
属性の優先されるコントロールのタイプを取得 |
|
属性で提供されるフォーマット・マスクを使用して、フォーマット化された文字列値を解析 |
|
前述のoracle.jbo.*
インタフェースに対応する実装クラスは、クライアント・コードによって直接アクセスされないように意識的に設計されています。該当する実装クラスはoracle.jbo.server.*
という別のパッケージの中に存在し、クライアント層コードで使用しないようユーザーに喚起するため、Impl
という接尾辞が名前に付いています。
ビジネス・サービス層の実装コードでは、前述のクライアントから利用できるのと同じメソッドを使用できますが、次の処理も実行できます。
oracle.jbo.*
インタフェースをそのoracle.jbo.server.*
パッケージ実装クラスに安全にキャストして、該当するImpl
クラス上のメソッドも使用する。
super.
methodName
()
をコールする前または後でコンポーネントのサブクラス内にカスタム・コードを記述することにより、基本フレームワークの実装クラスのpublic
またはprotected
メソッドをオーバーライドし、そのデフォルト機能の拡張または変更を実行する。
この項では、ADF Business Componentsの主要なクラスでコール、記述およびオーバーライドの対象としてよく使用されるメソッドのサマリーを示します。
個々のクラスの仕様を調べる前に、コンポーネントで使用するカスタムJavaファイルの制御方法を理解することが重要です。カスタマイズされたサブクラスがコンポーネントで不要な場合は、基本フレームワーク・クラスで実装を実行時に処理するだけですみます。
ユーザーが作成する各ビジネス・コンポーネントは、単一のXMLコンポーネント・ディスクリプタと、関連するカスタムJava実装ファイル(ゼロ個以上)から構成されます。Javaのカスタマイズをサポートする各コンポーネントでは、JDeveloper 10g IDEのComponent Editorに「Java」タブが表示されます。一連のJavaクラスを選択または選択解除することにより、コンポーネント用に作成するJavaクラスを制御します。いずれのチェック・ボックスも選択しないと、コンポーネントはXMLのみのコンポーネントになり、そのJava実装として基本フレームワーク・クラスのみが使用されます。そうでない場合は、現在のコンポーネントでカスタマイズする必要がある関連するJavaクラスのチェック・ボックスを選択します。JDeveloper 10gによってフレームワーク・ベース・クラスのカスタムなサブクラスが作成され、その中にコードを追加できます。
注意: 「ツール」→「設定」→「ビジネス・コンポーネント」を選択し、チェック・ボックスを選択してデフォルト値を設定すると、ADFビジネス・コンポーネントのタイプごとにデフォルトでJavaクラスを生成する必要のあるグローバルなIDE設定を設定できます。 |
エンティティ・オブジェクト・クラスおよびビュー行クラスは常に生成するのがベスト・プラクティスです。それは、自動的に生成されるgetterおよびsetterメソッド以外に、それらの中にカスタム・コードが不要な場合にも当てはまります。getterおよびsetterメソッドを使用すると、コンパイル時に型チェックが実行されるため、間違って属性に正しくない種類の値を設定した場合、実行時にエラーが発生するのを防止できます。
ApplicationModuleImplクラスは、アプリケーション・モジュール・コンポーネント用のベース・クラスです。アプリケーション・モジュールは、ビジネス・サービスの実装に使用するADFコンポーネントであるため、アプリケーション・モジュール・クラスはサービスレベルのアプリケーション・ロジックを記述できる場所と考えてください。アプリケーション・モジュールは、ビュー・オブジェクト・インスタンスと協調して、ビジネス・ドメイン・オブジェクトに自動的に関連付けされる更新可能な一連の値オブジェクトをサポートします。ビジネス・ドメイン・オブジェクトは、ADFエンティティ・オブジェクトとして実装されます。
表D-10 ApplicationModuleImpl上でよくコールされるメソッド
実行する処理 | コールするApplicationModuleImplクラスのメソッド |
---|---|
(クライアント内から実行することもできる)一般的なアプリケーション・モジュール処理をクラス内から実行 |
前述のD.1.1項「ApplicationModuleインタフェース」を参照してください。 |
アプリケーション・モジュールのデータ・モデルに設計時に追加したビュー・オブジェクト・インスタンスにアクセス |
注意: JDeveloper 10gは、この型保証ビュー・オブジェクト・インスタンスのgetterメソッドを自動的に生成して、アプリケーション・モジュールの設計時のデータ・モデルに各ビュー・オブジェクト・インスタンスを反映します。 |
現在のDBTransactionオブジェクトにアクセス |
|
設計時にアプリケーション・モジュールに追加した、ネストしたアプリケーション・モジュール・インスタンスにアクセス |
注意: JDeveloper 10gは、この型保証アプリケーション・モジュール・インスタンスのgetterメソッドを自動的に生成して、現在のアプリケーション・モジュールに設計時に追加された、ネストした各アプリケーション・モジュール・インスタンスを反映します。 |
表D-11 カスタムなApplicationModuleImplサブクラスでよく記述されるメソッド
実行する処理 | 記述するカスタムなApplicationModuleImplクラスのメソッド |
---|---|
データベース・ストアド・プロシージャを起動 |
注意:
アプリケーション・モジュール内でPL/SQLストアド・プロシージャに対するコールをカプセル化する堅牢なコード例については、このサンプル・プロジェクトを参照してください。 |
カスタムなビジネス・サービス・メソッドをアプリケーション・モジュール上で公開 |
注意: アプリケーション・モジュール・エディタの「クライアント・インタフェース」パネルでメソッド名を選択し、クライアントからアクセスできるように必要に応じて公開します。 |
JDeveloper 10gでは、ユーザーがクライアントに公開することを選択したサービスレベルのカスタム・メソッドが含まれるカスタムなYourApplicationModuleName
インタフェースを生成できます。その場合は、アプリケーション・モジュール・エディタの「クライアント・インタフェース」タブにアクセスし、クライアント・インタフェースに表示するメソッドを「選択済」リストに表示します。
表D-12 カスタムなApplicationModuleImplサブクラスでよくオーバーライドされるメソッド
実行する処理 | オーバーライドするApplicationModuleImplクラスのメソッド |
---|---|
最初はアプリケーション・モジュールの作成時、以降はそのアプリケーション・モジュールが異なるアント・セッションによって使用されるときにカスタムな設定コードを実行 |
注意: これは、データベースのOracle仮想プライベート・データベース(VPD)機能を使用することを目的として現在のユーザーのためにクライアント別コンテキスト情報を設定する際に使用するメソッドです。このメソッドは、その他の種類のPL/SQLパッケージ・グローバル変数(値はクライアントに固有で、他のストアド・プロシージャが依存している可能性がある)を設定する際にも使用できます。 このメソッドは、アプリケーション・モジュール内の指定されたビュー・オブジェクト・インスタンスに固有な設定コードを実行する際にも有用です。インスタンスに固有ではなく、該当するビュー・オブジェクト・コンポーネントから作成されるインスタンスごとにビュー・オブジェクト設定コードを初期化する場合は、かわりに |
アプリケーション・モジュールのトランザクションが接続プールのデータベース接続と関連付けられた後に、カスタムな設定コードを実行 |
注意:
|
アプリケーション・モジュールのトランザクションがそのデータベース接続をデータベース接続プールに解放する前に、カスタムな設定コードを実行 |
注意:
|
カスタムなアプリケーション・モジュールの状態の状態管理XMLスナップショットへの書出し |
|
カスタムなアプリケーション・モジュールの状態を状態管理XMLスナップショットから読み込んでリストア |
|
DBTransactionImpl2クラス(ベースのDBTransactionImplクラスを拡張し、DatabaseTransactionFactoryクラスによって作成される)は、DBTransactionインタフェースを実装するベース・クラスであり、現在のトランザクション内で保留中の作業ユニットを表します。
表D-13 DBTransaction上でよくコールされるメソッド
実行する処理 | DBTransactionオブジェクトでコールするメソッド |
---|---|
トランザクションをコミット |
|
トランザクションをロールバック |
|
トランザクション内のすべての保留中の無効な変更を積極的に検証 |
|
トランザクションのConnectionオブジェクトを使用してJDBC |
|
トランザクションのConnectionオブジェクトを使用してJDBC |
|
トランザクションのConnectionオブジェクトを使用してJDBC |
|
トランザクションの警告リストに警告を追加 |
|
表D-14 カスタムなDBTransactionImpl2サブクラスでよくオーバーライドされるメソッド
実行する処理 | カスタムなDBTransactionImpl2クラスでオーバーライドするメソッド |
---|---|
トランザクション・コミット操作の前または後でカスタム・コードを実行 |
|
トランザクション・ロールバック操作の前または後でカスタム・コードを実行 |
|
カスタムなDBTransactionImpl2
サブクラスを実行時に使用するには、次の2つの手順を実行する必要があります。
次のように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上でよくコールされるメソッド
実行する処理 | EntityImplサブクラスでコールするメソッド |
---|---|
属性の値を取得 |
注意: コード生成されたgetterメソッドは、 |
属性の値を設定 |
注意: コード生成されたsetterメソッドは、 |
名前を使用して属性の値を取得 |
|
名前を使用して属性の値を設定 |
|
エンティティ・オブジェクトの検証を積極的に実行 |
|
データベースのエンティティをリフレッシュ |
|
変更中というマークを付けずに属性の値を移入(ただし、変更中という通知が送信されるため、UIが値を画面/ページ上でリフレッシュ) |
|
エンティティの定義オブジェクトにアクセス |
|
エンティティのキー・オブジェクトを取得 |
|
現在のトランザクション内でポスト済であるかどうかに関係なく(ただし、未コミット状態)、エンティティ・インスタンスの状態を判別 |
注意: 現在のトランザクション内のエンティティ・インスタンスのステータスを示す定数( |
エンティティ・インスタンスの状態を判別 |
注意: このメソッドは通常、 |
データベースから読み取った特定の属性値を取得 |
|
エンティティ・インスタンスのデータベース行を積極的にロック |
|
表D-16 カスタムなEntityImplサブクラスでよく記述されるメソッド
実行する処理 | EntityImplサブクラスで記述するメソッド |
---|---|
属性に固有な検証を実行 |
注意: エンティティ・オブジェクト・エディタの「検証」パネル内の正しい属性に対してMethodValidatorを追加することにより、属性バリデータ・メソッドを登録します。 |
エンティティレベルの検証を実行 |
注意: エンティティ・オブジェクト・エディタの「検証」パネル内のエンティティに対して「MethodValidator」を追加することにより、エンティティレベルのバリデータ・メソッドを登録します。 |
一時属性の値を計算 |
生成された |
表D-17 EntityImpl上でよくオーバーライドされるメソッド
実行する処理 | EntityImplサブクラスでオーバーライドするメソッド |
---|---|
新しいエンティティ・インスタンスの主キー属性値をプログラムで移入することも含めて、計算後のデフォルト属性値を設定 |
注意:
|
データベースに対して変更をポストする前に属性値を変更 |
|
ユーザーのエンティティ・オブジェクトのかわりにフレームワークがデータベースに対して実行する標準のINSERT、UPDATEまたはDELETE DML操作を拡張/変更 |
注意: 操作フラグの値を定数 |
すべてのエンティティ・インスタンスがデータベースに対してポストされた後で、該当する変更がコミットされる前に、SQLベースの複雑な検証を実行 |
|
新しく作成された関連する親エンティティが、それに依存する現在の子エンティティより前にデータベースにポストされることを保証 |
注意: 該当する子エンティティにコンポジット・アソシエーションによって親エンティティが関連付けられている場合、これはフレームワークによって自動的に処理済です。(構成されているわけではなく)関連付けられているだけの場合は、 |
注意: 属性レベルの検証コードは、EntityImpl クラスの適切なset AttributeName メソッドの中に直接記述することができます。ただし、前述のMethodValidator のアプローチを使用すると、エンティティ・オブジェクト・エディタの「検証」タブのみを確認してエンティティ・オブジェクトで有効なすべての検証を理解できるため、コンポーネントを理解しやすくなります。 |
警告: また、 |
EntityDefImplクラスは、単一のJava VM内で所定のタイプを持つ全エンティティ・オブジェクトに対するシングルトンの共有メタデータ・オブジェクトです。これは、エンティティ・インスタンスの構造を定義し、新規エンティティ・インスタンスを作成するメソッドおよび主キーによって既存のインスタンスを探すメソッドを提供します。
表D-18 EntityDefImpl上でよくコールされるメソッド
実行する処理 | コールするEntityDefImplのメソッド |
---|---|
該当するタイプのエンティティ・オブジェクトをその主キーを使用して検索 |
注意:
|
現在の |
|
完全修飾名を使用して |
|
エンティティ・オブジェクトのカスタム・プロパティの値を取得 |
|
エンティティ・オブジェクトのカスタム・プロパティの値を設定 |
|
エンティティ・オブジェクトの新規インスタンスを作成 |
注意: 同じカスタムな |
該当するエンティティ・タイプのキャッシュ内でエンティティ・インスタンスの反復処理を実行 |
|
エンティティ定義オブジェクトの |
|
表D-19 EntityDefImpl上でよく記述されるメソッド
実行する処理 | 記述するカスタムなEntityDefImplクラスのメソッド |
---|---|
属性値または設定情報から構成される初期型保証セットを持つエンティティ・インスタンスの作成を他のクラスに許可 |
注意: 内部ではこれにより、 |
表D-20 EntityDefImpl上でよくオーバーライドされるメソッド
実行する処理 | コールするEntityDefImplのメソッド |
---|---|
該当するシングルトン・メタオブジェクトのロード時にカスタムなメタデータの初期化を実行 |
|
Refresh-On-Insert属性またはRefresh-on-Update属性をサポートするために |
注意:
|
該当するエンティティのために発行されたUPDATE文が、変更された列のみ更新するのか、すべての列を更新するのかを制御 |
注意: デフォルト値は |
完全修飾名を使用してEntityDefImplオブジェクトを検索 |
注意: 静的メソッド。 |
エンティティ・オブジェクトのカスタム・プロパティの値を設定 |
|
ビュー・オブジェクトによる暗黙的な方法ではなく、エンティティ・オブジェクトの新規インスタンスの作成を他のクラスに許可 |
注意: 直前の項で説明したようにカスタムなcreateメソッドを記述しない場合は、このメソッドをオーバーライドして可視性を |
ViewObjectImplクラスは、ビュー・オブジェクトのベース・クラスです。
表D-21 ViewObjectImpl上でよくコールされるメソッド
実行する処理 | コールするViewObjectImplのメソッド |
---|---|
(クライアント内から実行することもできる)一般的なビュー・オブジェクト、行セットまたは行セット・イテレータ操作をクラス内から実行。 |
D.1.3項「ViewObjectインタフェース」、D.1.4項「RowSetインタフェース」およびD.1.5項「RowSetIteratorインタフェース」を参照してください。 |
デフォルトの行セット上で追加のランタイムWHERE句を設定。 |
|
名前付きバインド・パラメータを定義。 |
|
名前付きバインド・パラメータを削除。 |
|
名前を使用して、デフォルト行セット上のバインド変数値を設定。ビュー・オブジェクト上で名前付きのバインド変数を以前定義してある場合にのみ機能します。 |
|
デフォルト行セット上のバインド変数値を設定。このメソッドは、名前付きバインド変数が未定義の場合に、Oracle PositionalまたはJDBC Positionalというバインド・スタイルを持つビュー・オブジェクトに対して使用します。 |
|
メモリー内フィルタ式の評価に基づいてビュー・オブジェクトの行セット内の行のサブセットを取得。 |
|
メモリー内フィルタ式の評価に基づいてビュー・オブジェクトの行セット内の現在の範囲内にある行のサブセットを取得。 |
|
該当するビュー・オブジェクトのラウンドトリップごとにデータベースからフェッチされる行の数を設定。 |
注意: デフォルトのフェッチ・サイズは、一度に1行です。ビュー・オブジェクトで多数の行を取得しようとする場合、これは明らかに最適とはいえません。そのため、ビュー・オブジェクト・エディタの「チューニング」タブで設計時のフェッチ・サイズを増やすか、このAPIを使用して実行時にフェッチ・サイズを設定します。 |
表D-22 カスタムなViewObjectImplサブクラスでよく記述されるメソッド
実行する処理 | ViewObjectImplサブクラスで記述するメソッド |
---|---|
バインド変数自体の位置詳細を公開することなくバインド変数値を設定する型保証メソッドをクライアントに提供 |
注意: このメソッドは、内部でsetWhereClauseParam() APIをコールし、型保証メソッドの引数で提供される値を使用して、正しいバインド変数を設定します。 |
JDeveloper 10gでは、ユーザーがクライアントに公開することを選択したビュー・オブジェクトのカスタム・メソッドが含まれるカスタムなYourViewObjectName
インタフェースを生成できます。その場合は、ビュー・オブジェクト・エディタの「クライアント・インタフェース」タブにアクセスし、クライアント・インタフェースに表示するメソッドを「選択済」リストに表示して行います。
表D-23 カスタムなViewObjectImplサブクラスでよくオーバーライドされるメソッド
実行する処理 | オーバーライドするViewObjectImplのメソッド |
---|---|
ビュー・オブジェクト・インスタンスが初めて作成されるときにカスタムなビュー・オブジェクト・クラスのメンバー(行属性ではない)を初期化 |
注意: このメソッドは、作成されるビュー・オブジェクトの各インスタンスに適用可能な設定ロジックをアプリケーション・モジュールのコンテキスト内で実行する際に有用です。 汎用的なビュー・オブジェクト設定ロジックではなく、アプリケーション・モジュール内の特定のビュー・オブジェクト・インスタンスに固有なロジックを実行する必要がある場合は、アプリケーション・モジュールの |
カスタムなビュー・オブジェクト・インスタンスの状態の状態管理XMLスナップショットへの書出し |
|
カスタムなビュー・オブジェクト・インスタンスの状態を状態管理XMLスナップショットから読み込んでリストア |
|
問合せが |
|
|
|
ViewObjectImplクラスは、ビュー行オブジェクトのベース・クラスです。
表D-24 ViewRowImpl上でよくコールされるメソッド
実行する処理 | 記述するカスタムなViewRowImplクラスのメソッド |
---|---|
(クライアント内から実行することもできる)一般的なビュー行処理をクラス内から実行 |
前述のD.1.6項「Rowインタフェース」を参照してください。 |
属性の値を取得 |
|
属性の値を設定 |
|
該当するビュー行からの属性保存場所の委譲先である基礎となるエンティティ・インスタンスにアクセス |
注意: エンティティ・オブジェクトの慣用名(別名)は、ビュー・オブジェクト・エディタの「エンティティ・オブジェクト」タブで変更できます。 |
表D-25 ViewRowImpl上でよく記述されるメソッド
実行する処理 | 記述するカスタムなViewRowImplクラスのメソッド |
---|---|
ビュー・オブジェクト・レベルの一時属性の値を計算 |
注意: メソッドのスケルトンは、JDeveloperによって自動的に生成されます。ただし、メソッド本体内のカスタムな計算ロジックは、ユーザーが記述する必要があります。 |
ビュー行属性の設定というカスタムな処理を実行 |
注意: メソッドのスケルトンは、JDeveloperによって自動的に生成されます。ただし、メソッド本体内のカスタムなロジックは、ユーザーが必要に応じて記述する必要があります。 |
属性の更新の可能性を条件付きの方法で判断 |
|
論理演算を現在行で公開するカスタム・メソッド(オプションでクライアントからコール可能) |
注意: これらのビュー行レベルのカスタム・メソッドは、単に反転し、現在行に関連する基礎となるエンティティ・オブジェクト上のメソッド・コールに委譲することがよくあります。 |
JDeveloper 10gでは、ユーザーがクライアントに公開することを選択したビュー行のカスタム・メソッドが含まれるカスタムなYourViewObjectName
Row
インタフェースを生成できます。その場合は、ビュー・オブジェクト・エディタの「カスタム行インタフェース」タブにアクセスし、クライアント・インタフェースに表示するメソッドを「選択済」リストに表示して行います。
アプリケーションに固有なビジネス・コンポーネントの開発を開始する前に、このドキュメントで解説されているADF Business Componentsフレームワーク実装のベース・クラスをすべて拡張するクラスから構成される層を独自に作成してください。アプリケーション・モジュール・コンポーネントのカスタムのフレームワーク・ベース・クラスの例を、次に示します。
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