D ADFビジネス・コンポーネントのよく使用されるメソッド

この付録では、Oracle ADFのADFビジネス・コンポーネント・レイヤーのインタフェースおよびクラスでよく使用されるメソッドをリストします。

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

フレームワーク・ベース・クラスの独自のレイヤーを作成するメソッド

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という接尾辞が名前に付いていることが示されています。

ApplicationModuleインタフェース

アプリケーション・モジュールはビジネス・サービス・コンポーネントの1つで、その他のADFコンポーネントのトランザクション・コンテナとして機能し、これらと密接に連携して、ビジネス・アプリケーション開発者にとって重要な多数のJava EE設計パターンを実装します。それらのデザイン・パターンの実装により、クライアント・コードは、クライアントに必要なデータのみを取得してクライアントが望む方法で表示するFast Lane ReaderのSQL問合せに基づいて、更新可能な一連の値オブジェクトと簡単に連携できます。それらの値オブジェクトに行われた変更は、ビジネス・サービス層内の永続的なビジネス・ドメイン・オブジェクトと自動的に協調して、ビジネス・ルールを首尾一貫して施行し、データベースに変更を保存します。表D-1は、ApplicationModuleインタフェースを使用して、アプリケーション・モジュールで実行できる操作を説明しています。

ノート:

ADFビジネス・コンポーネントによって実装されるデザイン・パターンの完全なリストは、「ADFビジネス・コンポーネントJava EEデザイン・パターン・カタログ」を参照してください。

表D-1 ApplicationModuleインタフェース

実行する処理 コールするApplicationModuleインタフェースのメソッド

割当て済インスタンス名(MyVOInstanceNameなど)を使用して既存のビュー・オブジェクト・インスタンスにアクセス

findViewObject()

既存の定義を使用して新しいビュー・オブジェクト・インスタンスを作成

createViewObject()

SQL文を使用して新しいビュー・オブジェクト・インスタンスを作成

createViewObjectFromQueryStmt()

ノート:

動的問合せのSELECTリストの形を規定するために、実行時にオーバーヘッドが発生します。このメソッドは、問合せのSELECTリストが設計時に不明な場合にのみ使用してください。また、なんらかの種類のカスタムのランタイム・リポジトリに基づいて動的問合せを作成する場合は、このステップに従うことで、ランタイムの規定に関するオーバーヘッドなしで動的ビュー・オブジェクト(読取り専用および更新可能)を作成できます(「複数の更新可能エンティティによるビュー・オブジェクトの作成」を参照)。WHEREのみを動的にする必要がある場合は、ビュー・オブジェクトを設計時に作成し、ViewObject APIを使用して必要に応じてWHERE句を動的に設定します。

ネストしたアプリケーション・モジュール・インスタンスに名前でアクセス

findApplicationModule()

既存の定義を使用して、ネストした新しいアプリケーション・モジュール・インスタンスを作成

createApplicationModule()

ドット表記法の名前(MyNestedAMInstanceName.OneOfItsVONamesなど)を使用してネストしたアプリケーション・モジュール内でビュー・オブジェクト・インスタンスを検索

findViewObject()

ノート:

このメソッドを使用して1つのメソッド・コールで、ネストしたアプリケーション・モジュールに属するビュー・オブジェクトのインスタンスを検索できます。これにより、まず、findApplicationModule()をコールしてネストしたアプリケーション・モジュールを検索し、その後、そのネストしたアプリケーション・モジュールでfindViewObject()をコールする必要がなくなります。

現在のトランザクション・オブジェクトにアクセス

getTransaction()

アプリケーション・モジュールによる汎用的なアクセスに加えて、JDeveloperでは、クライアントに公開することを選択したサービスレベルのカスタム・メソッドが含まれるカスタムなYourApplicationModuleNameインタフェースも生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「アプリケーション・モジュールの編集」ダイアログの「クライアント・インタフェース」ページを使用します。

Transactionインタフェース

Transactionインタフェースでは、現在のトランザクション内で保留中の変更をクライアントが管理できるようなメソッドを公開しています。表D-2は、Transactionインタフェースを使用して、トランザクションで実行できる操作を説明しています。

表D-2 Transactionインタフェース

実行する処理 コールするTransactionインタフェースのメソッド

保留中の変更をコミット

commit()

保留中の変更のロールバック

rollback()

1回かぎりのデータベース・コマンドまたはPL/SQLブロックを実行

executeCommand()

ノート:

OUTパラメータの取得が必要なメソッド、および複数回実行されるメソッド、またはバインド変数の使用が有効なメソッドでは、このコマンドを使用しないでください。その場合は、アプリケーション・モジュールでカスタム・メソッドを公開してください。

トランザクション内のすべての保留中の無効な変更を検証

validate()

デフォルトのロック・モードを変更

setLockingMode()

ノート:

構成内のロック・モードは、プロパティjbo.locking.modeに、サポートされている4つの値(noneoptimisticpessimisticoptupdate)のいずれか1つを設定すると、設定できます。ロック・モードを明示的に設定していない場合、デフォルトでoptimisticになります。Fusion Webアプリケーションの場合は、optimisticモードまたはoptupdateモードを使用します。

バンドルされている例外レポート・モードを使用するかどうかを決定

setBundledExceptionMode()

ノート:

ADFコントローラ・レイヤー・サポートでは、Fusion Webアプリケーションの場合、このパラメータは自動的にtrueに設定されます。

トランザクションのコミットに成功した場合にエンティティ・キャッシュをクリアするかどうかを決定

setClearCacheOnCommit()

ノート:

デフォルトはfalseです。

トランザクションのロールバック時にエンティティ・キャッシュをクリアするかどうかを決定

setClearCacheOnRollback()

ノート:

デフォルトはtrueです。

特定のエンティティ・オブジェクトのエンティティ・キャッシュをクリア

clearEntityCache()

ViewObjectインタフェース

ビュー・オブジェクトは、データベース問合せをカプセル化し、この問合せから得られる結果の行セットを使った作業を簡略化するコンポーネントです。ビュー・オブジェクトは、SQLを使用して1つ以上の表からビジネス・データを投影、フィルタ、結合、またはソートして、ユーザーがページやパネルに表示できる形式にデータをキャストするために使用します。ビュー・リンクを使用して、複数のビュー・オブジェクトを接続し、任意の深さや複雑さの「マスター/ディテール」階層を作成できます。ビュー・オブジェクトからは、読取り専用の問合せ結果が得られます。また、設計時に1つ以上のエンティティ・オブジェクトと関連付けられている場合、ビュー・オブジェクトは完全に更新可能です。更新可能なビュー・オブジェクトは、適切なビジネス・ドメインへの自動委譲を使用して、結果コレクションでの行の挿入、変更および削除をサポートできます。

ビュー・オブジェクトの問合せ結果の行セットは1つだけというケースがユースケースの90パーセントを占めますが、このようなケースを単純化するために、ビュー・オブジェクトには必ず「デフォルト行セット」が含まれています。ビュー・オブジェクトは、すべてのメソッドをこのデフォルトRowSetに委譲することにより、RowSetインタフェースに実装します。つまり、どのビュー・オブジェクトでも、任意のRowSetメソッドを呼び出すことができます。

すべてのビュー・オブジェクトは、StructureDefインタフェースを実装し、行セット内の各行の属性の数とタイプに関する情報を提供します。したがって、どのビュー・オブジェクトでも、StructureDefメソッドを直接コールできます。

表D-3は、ViewObjectインタフェースを使用して、ビュー・オブジェクトで実行できる操作を説明しています。

表D-3 ViewObjectインタフェース

実行する処理 コールするViewObjectインタフェースのメソッド

行セット上で追加のランタイムWHERE句を設定

setWhereClause()

ノート:

このWHEREは、基本ビュー・オブジェクト内で設計時に指定されたWHERE句をさらに増やします。置換ではありません。

動的なORDER BY句を設定

setSortBy()

Query-by-Example基準コレクションを作成

createViewCriteria()

ノート:

その後、作成したViewCriteriaオブジェクト上でcreateViewCriteriaRow()メソッドを使用し、ViewCriteriaRowオブジェクトを1つまたは複数作成します。その後、add()を使用してそれらのビュー基準行をビュー基準コレクションに追加し、applyViewCriteria()メソッドを使用してその基準を適用します。

Query-by-Example基準コレクションを適用

applyViewCriteria()

問合せオプティマイザ・ヒントを設定

setQueryOptimizerHint()

ビュー・オブジェクト内のキー属性の属性定義にアクセス

getKeyAttributeDefs()

該当するビュー・オブジェクトの行セット内の行に動的属性を追加

addDynamicAttribute()

ビュー・オブジェクトによって作成された行セットをすべてクリア

clearCache()

ビュー・オブジェクト・インスタンスとそのリソースを削除

remove()

ビュー・オブジェクトがデータベースからフェッチしようとする行数に上限を設定

setMaxFetchSize()

ノート:

デフォルト値は-1です。この場合、データベースから取得する行数(すべて反復処理する場合)に制限はありません。デフォルトでは、それらの行は、ユーザーが反復処理を実行するのに伴って遅延フェッチされます。

ViewObjectによる汎用的なアクセスのみでなく、JDeveloperでは、ユーザーがクライアントに公開することを選択したビュー・オブジェクトレベルのカスタム・メソッドが含まれるカスタムなYourViewObjectNameインタフェースも生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「ビュー・オブジェクトの編集」ダイアログの「クライアント・インタフェース」ページを使用します。

RowSetインタフェース

行セットは、通常はビュー・オブジェクトの問合せに実行によって作成される一連の行を含むオブジェクトです。

行セットに対して必要なイテレータは1つのみというケースがユースケースの90パーセントを占めますが、このようなケースを単純化するために、RowSetにより必ず「デフォルトの行セット・イテレータ」が集計されます。RowSetオブジェクトは、すべてのメソッドをこのデフォルトRowSetIteratorに委譲することにより、RowSetIteratorインタフェースに実装します。つまり、どのRowSetオブジェクト(または、ビュー・オブジェクト。ビュー・オブジェクトはデフォルトのRowSetに対してもRowSetを実装するため)でも、任意のRowSetIteratorメソッドを呼び出すことができます。

表D-4は、RowSetインタフェースを使用して、行セットで実行できる操作を説明しています。

表D-4 RowSetインタフェース

実行する処理 コールするRowSetインタフェースのメソッド

WHERE句のバインド変数値を設定

setWhereClauseParams()

ノート:

バインド変数の序数位置はゼロ・ベースです。

データが一度しか読み取られない場合はビュー・オブジェクト行のキャッシングを回避

setForwardOnly()

強制的に行セットの問合せを実行(排他的ビュー・オブジェクト・インスタンスの場合)、または実行する可能性がある(共有ビュー・オブジェクト・インスタンスの場合)

executeQuery()

ノート:

このメソッドの動作は、ビュー・オブジェクトが共有アプリケーション・モジュールに属しているかどうかによって異なります。共有モジュールのインスタンスではなく、排他的ビュー・オブジェクトに対する問合せを再度実行すると、新しい問合せコレクションが作成されます。共有ビュー・オブジェクト・インスタンスの問合せを実行する前に、結果セットがすでに存在しないかどうかを判断するためのチェックが行われます。この共有ビュー・オブジェクト・インスタンスについて、すでにキャッシュされている結果があれば、問合せを再実行するのではなく、この結果が再使用されます。共有ビュー・オブジェクト・インスタンスの結果を確実にリフレッシュする必要がある場合は、forceExecuteQueryOfSharedVO()メソッドを呼び出します。ただし、強制実行を呼び出したときに、ユーザーが共有ビュー・オブジェクト・インスタンスのコレクションを反復していた場合の動作は不確定で、例外が発生する可能性があります。

ビュー・オブジェクトの問合せ結果の行数を推定

getEstimatedRowCount()

ビュー・オブジェクト行セット内の行に対してXML文書を作成

writeXML()

受信XML文書内の全行を処理

readXML()

他の行セットによって作成された同じエンティティ・オブジェクトに基づいて、行セットが新規行を自動的に確認するかどうかを設定

setAssociationConsistent()

プログラムによる反復で使用するセカンダリ・イテレータを作成

createRowSetIterator()

ノート:

後で名前を使用してセカンダリ・イテレータを検出し、使用する場合は、文字列名を引数として渡します。そうでない場合は、nullを名前として渡し、反復処理の終了時はイテレータのcloseRowSetIterator()メソッドをコールしてイテレータを閉じてください。

RowSetIteratorインタフェース

行セット・イテレータは、行セット内の行を反復処理するイテレータです。デフォルトでは、行の反復処理を順方向にも逆方向にも実行できます。表D-5は、RowSetIteratorインタフェースを使用して、行セットで実行できる操作を説明しています。

表D-5 RowSetIteratorインタフェース

実行する処理 コールするRowSetIteratorインタフェースのメソッド

イテレータの行セットの先頭行を取得

first()

反復処理の対象となる行がまだ存在しているかどうかをテスト

hasNext()

イテレータの行セットの次の行を取得

next()

指定したキー値を持つ行をこのイテレータの行セット内で検索

findByKey()

ノート:

findByKeyに渡すKeyオブジェクトを作成するときは、操作しているビュー・オブジェクト内の行のキーを構成する属性とまったく同じデータ型を使用することが重要です。

挿入目的で移入する新しい行を作成

createRow()

ノート:

該当する新しい行は、エンティティ・オブジェクトまたはビュー・オブジェクトのレベルで提供されている静的なデフォルト値を持つ属性の場合、または基礎となるエンティティ・オブジェクトのオーバーライドされたcreate()メソッドで値が移入済の場合、デフォルト値がすでに設定されています。

外部キーまたは識別子(あるいはその両方)の属性値の初期セットを使用してビュー行を作成

createAndInitRow()

ノート:

このメソッドは、エンティティ・オブジェクトの一連のサブタイプから構成されるファミリの1つを返すことができるビュー・オブジェクトを使用する場合に使用します。行を作成するためのコールで正確な識別子属性値を渡すことにより、フレームワークは合致するエンティティ・オブジェクトの正しいサブタイプを下に作成することができます。

イテレータの行セットに新しい行を1行挿入

insertRow()

ノート:

新しく作成した行を、常に行セットにただちに挿入するようにしてください。それにより、行を作成したものの、行セットに挿入し忘れるという間違いをなくすことができます。

イテレータの行セットの最終行を取得

last()

イテレータの行セットの直前の行を取得

previous()

現在の行ポインタを先頭行の前のスロットにリセット

reset()

反復処理の実行時にイテレータを終了

closeRowSetIterator()

指定した行を現在の行に設定

setCurrentRow()

現在の行を削除

removeCurrentRow()

現在の行を後で同一イテレータ内の別の場所に挿入するために削除

removeCurrentRowAndRetain()

現在の行を現在のコレクションから削除(ただし、トランザクションからは削除しない)

removeCurrentRowFromCollection()

範囲(ユーザーが表示できるページ)当たりの行数を設定/変更

setRangeSize()

スクロールしてnページ(先頭は1)目の行を表示

scrollToRangePage()

スクロールして、行番号nから始まる行範囲を表示

scrollRangeTo()

範囲内の行番号nを現在の行に設定

setCurrentRowAtRangeIndex()

範囲内の全行をRow配列として取得

getAllRowsInRange()

Rowインタフェース

Rowは、汎用的な値オブジェクトです。それに含まれる属性は、関連先ビュー・オブジェクトの名前およびJavaタイプに適しています。表D-6は、Rowインタフェースを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。

表D-6 Rowインタフェース

実行する処理 コールするRowインタフェースのメソッド

名前を使用して属性の値を取得

getAttribute()

名前を使用して属性の値を設定

setAttribute()

単一行のXML文書を作成

writeXML()

行の検証を積極的に実行

validate()

XMLからの行の属性値の読取り

readXML()

行を削除

remove()

新しく作成した行への一時的としてのフラグ付け(再度更新されるまで)

setNewRowState(Row.STATUS_INITIALIZED)

行の属性構造の定義情報を取得

getStructureDef()

行のKeyオブジェクトを取得

getKey()

Rowによる汎用的なアクセスのみでなく、JDeveloperでは、型保証属性のgetterメソッドおよびsetterメソッドに加えて、ユーザーがクライアントに公開することを選択した望ましい行レベルのカスタム・メソッドも含まれるカスタムのYourViewObjectNameRowインタフェースも生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「ビュー・オブジェクトの編集」ダイアログの「カスタム行インタフェース」ページを使用します。

StructureDefインタフェース

StructureDefは、Rowオブジェクトの構造に関する実行時メタデータにアクセスするためのインタフェースです。

また便宜上、各ビュー・オブジェクトは、StructureDefインタフェースも実装しており、一連の属性に関するメタデータへのアクセスを、問合せによって生成されるビュー行によって提供します。

表D-7は、StructureDefインタフェースを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。

表D-7 StructureDefインタフェース

実行する処理 コールするStructureDefインタフェースのメソッド

ビュー・オブジェクト行内の全属性の属性定義にアクセス

getAttributeDefs()

名前を使用して属性定義を検出

findAttributeDef()

索引を使用して属性定義を取得

getAttributeDef()

1行内の属性数を取得

getAttributeCount()

AttributeDefインタフェース

AttributeDefインタフェースが提供する属性定義情報は、属性名、Javaタイプ、SQLタイプのような、ビュー・オブジェクト行またはエンティティ・オブジェクト・インスタンス用属性のためのものです。また、ユーザーが記述する汎用コードによってインスペクトできるカスタム属性固有のメタデータ・プロパティや、属性およびその値を適切なユーザー・インタフェースに表示する際に役立つUIヒントへのアクセスも提供されます。表D-8は、AttributeDefインタフェースを使用して、属性で実行できる操作を説明しています。

表D-8 AttributeDefインタフェース

実行する処理 コールするAttributeDefインタフェースのメソッド

属性のJavaタイプを取得

getJavaType()

属性のSQLタイプを取得

getSQLType()

ノート:

int値は、JDBCクラスjava.sql.Types内の定数に対応しています。

属性の種類を特定

getAttributeKind()

ノート:

簡単な属性とは、定数ATTR_PERSISTENTATTR_SQL_DERIVEDATTR_TRANSIENTATTR_DYNAMICATTR_ENTITY_DERIVEDのいずれか1つを戻す属性です。属性が、1対1または多対1のアソシエーション/ビュー・リンク・アクセッサである場合、ATTR_ASSOCIATED_ROWが返されます。属性が、1対多または多対多のアソシエーション/ビュー・リンク・アクセッサである場合は、ATTR_ASSOCIATED_ROWITERATORが返されます。

配列値属性に含まれる要素のJavaタイプを取得

getElemJavaType()

配列値属性に含まれる要素のSQLタイプを取得

getElemSQLType()

属性の名前を取得

getName()

属性の索引位置を取得

getIndex()

数値属性の精度または文字列属性の最大値を取得

getPrecision()

数値属性のスケールを取得

getScale()

属性に対応する基礎となる列名を取得

getColumnNameForQuery()

属性に固有なカスタム・プロパティ値を取得

getProperty()getProperties()

属性のUI AttributeHintsオブジェクトを取得

getUIHelper()

属性が必須かどうかをテスト

isMandatory()

属性が問合せ可能かどうかをテスト

isQueriable()

属性が行の主キーの一部であるかどうかをテスト

isPrimaryKey()

AttributeHintsインタフェース

AttributeHintsインタフェースは、属性とその値を適切なユーザー・インタフェースに表示する際に使用できるUIヒント情報を公開します。表D-9は、AttributeHintsインタフェースを使用して、属性で実行できる操作を説明しています。

表D-9 AttributeHintsインタフェース

実行する処理 コールするAttributeHintsインタフェースのメソッド

属性のUIラベルを取得

getLabel()

属性のツールチップを取得します

getTooltip()

与えられたフォーマット・マスクを使用して、属性のフォーマット化された値を取得

getFormattedAttribute()

属性の表示ヒントを取得

getDisplayHint()

ノート:

表示されるヒントは、DisplayまたはHideという文字列値を持ちます。

属性の優先されるコントロールのタイプを取得

getControlType()

属性で提供されるフォーマット・マスクを使用して、フォーマット化された文字列値を解析

parseFormattedAttribute()

ビジネス・サービス層で使用されるメソッド

ビジネス・サービス層には、ビジネス・ロジックが格納されます。ビジネス・サービス層には、主要なADFビジネス・コンポーネント用のメソッドがいくつか存在します。

これらのoracle.jbo.*インタフェースに対応する実装クラスは、「クライアント層で使用されるメソッド」で説明されているとおり、クライアント・コードによって直接アクセスされないように、意図的に設計されています。該当する実装クラスはoracle.jbo.server.*という別のパッケージの中に存在し、クライアント層コードで使用しないようユーザーに喚起するため、Implという接尾辞が名前に付いています。

ビジネス・サービス層の実装コードでは、クライアントから利用できるのと同じメソッドを使用できますが、次の処理も実行できます。

  • oracle.jbo.*インタフェースをそのoracle.jbo.server.*パッケージ実装クラスに安全にキャストして、該当するImplクラス上のメソッドも使用する。

  • super.methodName()をコールして、そのデフォルト機能の拡張または変更を実行する前または後で、基本フレームワークの実装クラスのpublicまたはprotectedメソッドをオーバーライドし、コンポーネントのサブクラス内にカスタム・コードを記述する。

この項では、ADFビジネス・コンポーネントの主要なクラスでコール、記述およびオーバーライドの対象としてよく使用されるメソッドのサマリーを示します。

コンポーネントでのカスタムJavaファイルの制御

個々のクラスの仕様を調べる前に、コンポーネントで使用するカスタムJavaファイルの制御方法を理解することが重要です。カスタマイズされたサブクラスがコンポーネントで不要な場合は、基本フレームワーク・クラスで実装を実行時に処理するだけですみます。

ユーザーが作成する各ビジネス・コンポーネントは、単一のXMLコンポーネント・ディスクリプタと、関連するカスタムJava実装ファイル(ゼロ個以上)から構成されます。Javaのカスタマイズをサポートする各コンポーネントでは、JDeveloper IDEのコンポーネントの概要エディタにJavaページが表示されます。様々なJavaクラスを選択、または選択解除して、コンポーネント用に作成するクラスを制御します。クラスを1つも指定しなかった場合、コンポーネントはXMLのみのコンポーネントになり、そのJava実装として基本フレームワーク・クラスのみが使用されます。そうでない場合は、現在のコンポーネントでカスタマイズする必要がある関連するJavaクラスのチェック・ボックスを選択します。JDeveloperは、フレームワーク・ベース・クラスのカスタム・サブクラスを作成します。ユーザーはこのサブクラスにコードを追加できます。

ノート:

「ツール」「設定」「ビジネス・コンポーネント」を選択し、チェック・ボックスを選択してデフォルト値を設定すると、ADFビジネス・コンポーネントのタイプごとにデフォルトでJavaクラスを生成する必要のあるグローバルなIDE設定を設定できます。

ベスト・プラクティスの1つは、自動生成されたgetterおよびsetterメソッド以外のカスタム・コードは必要なくても、常にエンティティ・オブジェクトとビュー行クラスを生成することです。getterおよびsetterメソッドを使用すると、コンパイル時に型チェックが実行されるため、正しくない種類の値が設定されている属性に反応して、実行時にエラーが表面化するのを防止できます。

ApplicationModuleImplクラス

ApplicationModuleImplクラスは、アプリケーション・モジュール・コンポーネント用のベース・クラスです。アプリケーション・モジュールは、ビジネス・サービスの実装に使用するADFコンポーネントであるため、アプリケーション・モジュール・クラスはサービスレベルのアプリケーション・ロジックを記述できる場所と考えてください。アプリケーション・モジュールは、ビュー・オブジェクト・インスタンスと協調して、ビジネス・ドメイン・オブジェクトに自動的に関連付けされる更新可能な一連の値オブジェクトをサポートします。ビジネス・ドメイン・オブジェクトは、ADFエンティティ・オブジェクトとして実装されます。

ApplicationModuleImpl上でよくコールされるメソッド

表D-10は、ApplicationModuleImplクラスを使用して、アプリケーション・モジュールで実行できる操作を説明しています。

表D-10 ApplicationModuleImpl上でよくコールされるメソッド

実行する処理 コールするApplicationModuleImplクラスのメソッド

(クライアント内から実行することもできる)一般的なアプリケーション・モジュール処理をクラス内から実行

これらのメソッドのリストは、「ApplicationModuleインタフェース」を参照してください。

アプリケーション・モジュールのデータ・モデルに設計時に追加したビュー・オブジェクト・インスタンスにアクセス

getViewObjectInstanceName()

ノート:

JDeveloperは、この型保証ビュー・オブジェクト・インスタンスのgetterメソッドを自動的に生成して、アプリケーション・モジュールの設計時のデータ・モデルに各ビュー・オブジェクト・インスタンスを反映します。

現在のDBTransactionオブジェクトにアクセス

getDBTransaction()

設計時にアプリケーション・モジュールに追加した、ネストしたアプリケーション・モジュール・インスタンスにアクセス

getAppModuleInstanceName()

ノート:

JDeveloperは、この型保証アプリケーション・モジュール・インスタンスのgetterメソッドを自動的に生成して、現在のアプリケーション・モジュールに設計時に追加された、ネストした各アプリケーション・モジュール・インスタンスを反映します。

カスタムなApplicationModuleImplサブクラスでよく記述されるメソッド

表D-11は、カスタムApplicationModuleImplクラスを使用して、アプリケーション・モジュールで実行できる操作を説明しています。

表D-11 カスタムなApplicationModuleImplサブクラスでよく記述されるメソッド

実行する処理 記述するカスタムなApplicationModuleImplクラスのメソッド

データベース・ストアド・プロシージャを起動

someCustomMethod()

ノート:

DBTransactionインタフェースの該当するメソッドを使用して、JDBC PreparedStatementを作成します。ストアド・プロシージャにOUTパラメータがある場合は、かわりにCallableStatementを作成します。

PL/SQLストアド・プロシージャへのコールのカプセル化の実例を示すサンプル・コードは、「ストアド・プロシージャとストアド・ファンクションの呼出し」を参照してください。

カスタムなビジネス・サービス・メソッドをアプリケーション・モジュール上で公開

someCustomMethod()

ノート:

「アプリケーション・モジュールの編集」ダイアログの「クライアント・インタフェース」ページでメソッド名を選択し、クライアントからアクセスできるように必要に応じて公開します。

JDeveloperでは、ユーザーがクライアントに公開することを選択したサービスレベルのカスタム・メソッドが含まれるカスタムなYourApplicationModuleNameインタフェースを生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「アプリケーション・モジュールの編集」ダイアログの「クライアント・インタフェース」ページを使用します。

カスタムなApplicationModuleImplサブクラスでよくオーバーライドされるメソッド

表D-12は、カスタムApplicationModuleImplインタフェースを使用して、アプリケーション・モジュールでオーバーライドできる操作を説明しています。

表D-12 カスタムなApplicationModuleImplサブクラスでよくオーバーライドされるメソッド

実行する処理 カスタムなApplicationModuleImplクラスでオーバーライドするメソッド

最初はアプリケーション・モジュールの作成時、以降はそのアプリケーション・モジュールが異なるアント・セッションによって使用されるときにカスタムな設定コードを実行

prepareSession()

ノート:

これは、Oracle仮想プライベート・データベース(VPD)機能を使用することを目的として現在のユーザーのためにクライアント別コンテキスト情報を設定する際に使用するメソッドです。このメソッドは、その他の種類のPL/SQLパッケージ・グローバル変数(値はクライアントに固有で、他のストアド・プロシージャが依存している可能性がある)を設定する際にも使用できます。

このメソッドは、アプリケーション・モジュールで指定されたビュー・オブジェクト・インスタンス固有のセットアップ・コードを実行する場合にも便利です。ビュー・オブジェクト設定コードをインスタンス固有ものにするかわりに、該当するビュー・オブジェクト・コンポーネントから作成されるインスタンスごとに初期化する場合は、かわりにViewObjectImplサブクラス内のオーバーライド対象のcreate()メソッドに設定ロジックを記述します。

アプリケーション・モジュールのトランザクションが接続プールのデータベース接続と関連付けられた後に、カスタムな設定コードを実行

afterConnect()

ノート:

getDBTransaction().executeCommand()を使用してALTER SESSION SET SQL TRACE TRUEを実行し、現在のアプリケーション接続のデータベースSQL Traceロギングを有効にするコード行の記述に便利な場所です。これらのログはその後、TKPROFユーティリティを使用して処理すると、実行対象のSQL文および使用対象の問合せオプティマイザ計画を調査することができます。

TKPROFユーティリティでの作業の詳細は、『Oracle Database SQLチューニング・ガイド』の「アプリケーション・トレースの実行」の章の、SQLトレースとTKPROFの理解に関する項を参照してください。

アプリケーション・モジュールのトランザクションがそのデータベース接続をデータベース接続プールに解放する前に、カスタムな設定コードを実行

beforeDisconnect()

ノート:

jbo.doconnectionpoolingtrueに設定しておくと、アプリケーション・モジュールがアプリケーション・モジュール・プールに返されるたびに、接続がデータベース接続プールに解放されます。

アプリケーション・モジュールがアプリケーション・モジュール・プールに戻る際、カスタム・データベースの状態をクリアするため、アプリケーションではbeforeDisconnect()メソッドをオーバーライドする必要があります。resetState()メソッドは、アプリケーション・モジュールがトランザクション共有に参加する可能性があるので、この目的には推奨されません。他のアプリケーション・モジュールが同じDBトランザクションを引き続き参照しているときに、1つのアプリケーション・モジュールからresetState()でデータベース状態をクリアすると、問題が発生する可能性があります。

カスタムなアプリケーション・モジュールの状態の状態管理XMLスナップショットへの書出し

passivateState()

カスタムなアプリケーション・モジュールの状態を状態管理XMLスナップショットから読み込んでリストア

activateState()

DBTransactionImpl2クラス

DBTransactionImpl2クラス(ベースのDBTransactionImplクラスを拡張し、DatabaseTransactionFactoryクラスによって作成される)は、DBTransactionインタフェースを実装するベース・クラスであり、現在のトランザクション内で保留中の作業ユニットを表します。

DBTransaction上でよくコールされるメソッド

表D-13は、DBTransactionクラスを使用して、トランザクションで実行できる操作を説明しています。

表D-13 DBTransaction上でよくコールされるメソッド

実行する処理 コールするDBTransactionクラスのメソッド

トランザクションをコミット

commit()

トランザクションをロールバックします。

rollback()

トランザクション内のすべての保留中の無効な変更を積極的に検証

validate()

トランザクションのConnectionオブジェクトを使用してJDBC PreparedStatementを作成

createPreparedStatement()

トランザクションのConnectionオブジェクトを使用してJDBC CallableStatementを作成

createCallableStatement()

トランザクションのConnectionオブジェクトを使用してJDBC Statementを作成

createStatement()

トランザクションの警告リストに警告を追加

addWarning()

カスタムなDBTransactionImpl2サブクラスでよくオーバーライドされるメソッド

表D-14は、カスタムDBTransactionImpl2サブクラスを使用して、トランザクションで実行できる操作を説明しています。

表D-14 カスタムなDBTransactionImpl2サブクラスでよくオーバーライドされるメソッド

実行する処理 カスタムなDBTransactionImpl2クラスでオーバーライドするメソッド

トランザクション・コミット操作の前または後でカスタム・コードを実行

commit()

トランザクション・ロールバック操作の前または後でカスタム・コードを実行

rollback()

カスタムなDBTransactionImpl2サブクラスを実行時に使用するには、次のステップを実行する必要があります。

  1. 次のように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();
      }
    }
  2. 構成プロパティTransactionFactoryの値にカスタムなトランザクション・ファクトリの完全修飾クラス名を設定して、カスタムなトランザクション・ファクトリ・クラスを使用するようフレームワークに指示します。他の構成プロパティの場合と同様に、構成XMLファイル内で指定しない場合は、かわりに同名のJavaシステム・パラメータとして指定することもできます。

EntityImplクラス

EntityImplクラスは、ビジネス・ドメイン・オブジェクトのデータ、検証規則およびビジネス動作をカプセル化するエンティティ・オブジェクトのベース・クラスです。

EntityImpl上でよくコールされるメソッド

表D-15は、EntityImplクラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。

表D-15 EntityImpl上でよくコールされるメソッド

実行する処理 コールするEntityImplクラスのメソッド

属性の値を取得

getAttributeName()

ノート:

このコード生成されたgetterメソッドは、getAttributeInternal()をコールしますが、コンパイル時に型チェックが実行されます。

属性の値を設定

setAttributeName()

ノート:

このコード生成されたsetterメソッドは、setAttributeInternal()をコールしますが、コンパイル時に型チェックが実行されます。

名前を使用して属性の値を取得

getAttributeInternal()

名前を使用して属性の値を設定

setAttributeInternal()

エンティティ・オブジェクトの検証を積極的に実行

validate()

データベースのエンティティをリフレッシュ

refresh()

属性の値を移入しますが、このときこの値は変更中とはされません。そのかわり、変更通知が送信され、画面またはページ上でUIにより値がリフレッシュされます。

populateAttributeAsChanged()

エンティティのDefinitionオブジェクトにアクセス

getDefinitionObject()

エンティティのKeyオブジェクトを取得

getKey()

現在のトランザクション内でポスト済(ただし、未コミット状態)であるかどうかに関係なく、エンティティ・インスタンスの状態を判別

getEntityState()

ノート:

このメソッドにより、現在のトランザクション内のエンティティ・インスタンスのステータスを示す定数(STATUS_UNMODIFIEDSTATUS_INITIALIZEDSTATUS_NEWSTATUS_MODIFIEDSTATUS_DELETEDまたはSTATUS_DEAD)の1つが返されます。

エンティティ・インスタンスの状態を判別

getPostState()

ノート:

このメソッドは通常、postChanges()メソッドを使用しプログラムでポストを実行する(ただし、エンティティの変更をデータベースにまだコミットしておらず、そのポスト状態に関してエンティティの状態を検出する必要がある)場合にのみ使用します。

データベースから読み取った特定の属性値を取得

getPostedAttribute()

ビュー・オブジェクトまたはエンティティ・オブジェクトのメタデータを取得

getStructureDef()

ノート:

EntityImpl.getStructureDef()メソッド呼出しの戻り値をEntityCacheにダウンキャストすることはサポートされていません。EntityCacheのインスタンスを取得するには、EntityImplオブジェクトで既存のgetEntityCache()メソッドを呼び出します。

エンティティ・インスタンスのデータベース行を積極的にロック

lock()

エンティティ・オブジェクトに関連するmasterRowから、新たに作成された行に値をコピーします。

masterRow.findOrCreateAssociationAccessorRS(accessorName)

ノート:

このAPIはRowSetを返し、使い慣れたcreateRowおよびinsertRowのパターンに従います。
カスタムなEntityImplサブクラスでよく記述されるメソッド

表D-16は、カスタムEntityImplサブクラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。

表D-16 カスタムなEntityImplサブクラスでよく記述されるメソッド

実行する処理 カスタムEntityImplサブクラスで記述するメソッド

属性に固有な検証を実行

public boolean validateSomething(AttrTypevalue)

ノート:

エンティティ・オブジェクトの編集ダイアログの「検証」ページ内の正しい属性に対してMethodValidatorルールを追加することにより、属性バリデータ・メソッドを登録します。

エンティティ・レベルの検証を実行

public boolean validateSomething()

ノート:

エンティティ・オブジェクトの編集ダイアログの「検証」パネル内のエンティティに対してMethodValidatorルールを追加することにより、エンティティレベルのバリデータ・メソッドを登録します。

一時属性の値を計算

生成されたgetAttributeName()メソッドに計算コードを追加します。

カスタムなEntityImplサブクラスでよくオーバーライドされるメソッド

表D-17は、カスタムEntityImplサブクラスを使用して、エンティティ・オブジェクトでオーバーライドできる操作を説明しています。

表D-17 カスタムなEntityImplサブクラスでよくオーバーライドされるメソッド

実行する処理 EntityImplサブクラスでオーバーライドするメソッド

新しいエンティティ・インスタンスの主キー属性値をプログラムで移入することも含めて、計算後のデフォルト属性値を設定

create()

ノート:

super.create()をコールした後、適切なsetAttrName()メソッド(複数可)をコールし、該当する属性のデフォルト値を設定します。

データベースに対して変更をポストする前に属性値を変更

prepareForDML()

ユーザーのエンティティ・オブジェクトのかわりにフレームワークがデータベースに対して実行する標準のINSERTUPDATEまたはDELETE DML操作を拡張または変更

doDML()

ノート:

このメソッドは、操作フラグの値を定数DML_INSERTDML_UPDATEまたはDML_DELETEに照らしてチェックし、どのようなDML操作が実行されているのかをテストします。

すべてのエンティティ・インスタンスがデータベースに対してポストされた後で、該当する変更がコミットされる前に、SQLベースの複雑な検証を実行

beforeCommit()

ノート:

このメソッドは、トランザクションのエンティティ行ごとに起動されます。

すべてのエンティティ・インスタンスがデータベースにコミットした後、カスタム処理を実行

afterCommit()

ノート:

このメソッドは、保留中の変更のトランザクション・リストのエンティティ行ごとに起動されます。

現在の子エンティティの前に、この子エンティティが依存する、新たに作成された関連する親エンティティがデータベースにポストされることを保証

postChanges()

ノート:

該当する子エンティティにコンポジット・アソシエーションによって親エンティティが関連付けられている場合、変更のポストはフレームワークによって自動的に処理済です。(構成されているわけではなく)関連付けられているだけの場合は、postChanges()をオーバーライドして、新しく作成された親エンティティに、それに依存している現在の子エンティティより前にポストの実行を強制する必要があります。これを実現するために、オーバーライド対象のpostChanges()メソッドで一般的に記述するコードの例は、「ポスト順序を制御するためのpostChanges()のオーバーライド」を参照してください。

デフォルトの属性値をプログラムで定義するか、変更された行が初期化状態に再リフレッシュされる前または行が最初に作成された後に、カスタムな初期化を実行

initDefaultExpressionAttributes()

ノート:

このメソッドは、初期化サイクルの終了直前に起動されます。これにより、カスタム・コードの実行に適応できるようになります。

ノート:

属性レベルの検証コードは、EntityImplクラスの適切なsetAttributeNameメソッドの中に直接記述できます。ただし、表D-16でお薦めしたMethodValidatorのアプローチを使用すると、エンティティ・オブジェクトの属性に対応する概要エディタの「検証規則」ページ上に、すべての検証が効果的に配置されます。

警告:

また、validateEntity()メソッドをオーバーライドして、エンティティレベルの検証コードを記述することもできます。ただし、フレームワークにより最大限の検証エラー・セットが収集され、クライアント・ユーザー・インタフェースに報告されるというADFバンドル例外モードの長所をそのまま維持する必要がある場合は、表D-16でお薦めされているMethodValidatorアプローチを使用します。その場合は、ユーザーの検証メソッドがスローするユーザー例外をフレームワークがすべて自動的に収集するので、ユーザーはバンドルされている例外実装メカニズムを理解する必要がありません。validateEntity()メソッドをオーバーライドすると、デフォルトでは、Oracle ADFが捕捉していた例外を正確に捕捉し、バンドルする責任がユーザー独自のコードに直接移ります。これは重要なので、毎回、忘れずに手作業でコーディングします。

EntityDefImplクラス

EntityDefImplクラスは、単一のJava VM内で所定のタイプを持つ全エンティティ・オブジェクトに対するシングルトンの共有メタデータ・オブジェクトです。たとえば、Java VMに、EntityDefImplクラスの2つのインスタンスが含まれていて、一方に顧客のXMLデータが含まれていて、他方にオーダーが含まれている場合、それぞれのインスタンスは1つのみになります。このクラスは、エンティティ・インスタンスの構造を定義し、新規エンティティ・インスタンスを作成するメソッドおよび主キーによって既存のインスタンスを探すメソッドを提供します。

EntityDefImpl上でよくコールされるメソッド

表D-18は、EntityDefImplクラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。

表D-18 EntityDefImpl上でよくコールされるメソッド

実行する処理 コールするEntityDefImplクラスのメソッド

指定されたタイプのエンティティ・オブジェクトを主キーにより検索

findByPrimaryKey()

ノート:

findByPrimaryKey()でサブタイプ・エンティティのエンティティ・インスタンスも検索するためのヒントは、「サブタイプ・エンティティ・オブジェクトとfindByPrimaryKey()メソッド」を参照してください。

現在のDBTransactionオブジェクトにアクセス

getDBTransaction()

完全修飾名を使用してEntityDefImplオブジェクトを検索

findDefObject() (静的メソッド)

エンティティ・オブジェクトのカスタム・プロパティの値を取得

getProperty()getProperties()

エンティティ・オブジェクトのカスタム・プロパティの値を設定

setProperty()

エンティティ・オブジェクトの新規インスタンスを作成

createInstance2()

ノート:

同じカスタムなEntityDefImplサブクラス内で期待される独自のシグネチャを使用して、カスタムなcreateXXX()メソッドを公開することもできます。詳細は「カスタムのEntityDefImplクラスでよく記述されるメソッド」を参照してください。

該当するエンティティ・タイプのキャッシュ内でエンティティ・インスタンスの反復処理を実行

getAllEntityInstancesIterator()

エンティティ定義オブジェクトの配列リストにアクセスし、現在のエンティティを拡張するエンティティを取得

getExtendedDefObjects()

カスタムのEntityDefImplクラスでよく記述されるメソッド

表D-19は、カスタムEntityDefImplクラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。

表D-19 EntityDefImpl上でよく記述されるメソッド

実行する処理 記述するカスタムなEntityDefImplクラスのメソッド

属性値または設定情報から構成される初期型保証セットを持つエンティティ・インスタンスの作成を他のクラスに許可

createXXX(Type1arg1,..., TypeNargN)

ノート:

内部ではこのメソッドを使用することにより、AttributeListを実装するNameValuePairsオブジェクトのインスタンスが作成、移入され、保護されたメソッドcreateInstance()がコールされ、NameValuePairsオブジェクトが渡されます。これに対するコールを他のクラスに許可する場合、該当メソッドはpublicである必要があります。

カスタムのEntityDefImplでよくオーバーライドされるメソッド

表D-20は、EntityDefImplクラスを使用して、エンティティ・オブジェクトで実行できる操作を説明しています。

表D-20 EntityDefImpl上でよくオーバーライドされるメソッド

実行する処理 カスタムなEntityDefImplクラスでオーバーライドするメソッド

該当するシングルトン・メタオブジェクトのロード時にカスタムなメタデータの初期化を実行

createDef()

Refresh-On-Insert属性またはRefresh-on-Update属性をサポートするためにRETURNING INTO句の使用を回避

isUseReturningClause()

ノート:

RETURNING INTOの使用を無効化するには、このメソッドがfalseを返すように設定します。これは、データベース・レベルでRETURNING INTOをサポートしていない、INSTEAD OFトリガーを持つビューにエンティティ・オブジェクトが基づいている場合に必要なことがあります。

該当するエンティティのために発行されたUPDATE文が、変更された列のみ更新するのか、すべての列を更新するのかを制御

isUpdateChangedColumns()

ノート:

デフォルト値はtrueです。

完全修飾名を使用してEntityDefImplオブジェクトを検索

findDefObject()

ノート:

静的メソッド。

エンティティ・オブジェクトのカスタム・プロパティの値を設定

setProperty()

ビュー・オブジェクトによる暗黙的な方法ではなく、エンティティ・オブジェクトの新規インスタンスの作成を他のクラスに許可

createInstance()

ノート:

「カスタムのEntityDefImplクラスでよく記述されるメソッド」の項の説明に従ってカスタムのcreateメソッドを記述しない場合、エンティティ・インスタンスの作成を他のクラスに許可するには、このメソッドをオーバーライドして可視性をprotectedからpublicに広げることが必要になります。

ViewObjectImplクラス

ViewObjectImplクラスは、ビュー・オブジェクトのベース・クラスです。

ViewObjectImpl上でよくコールされるメソッド

表D-21は、ViewObjectImplクラスを使用して、ビュー・オブジェクトで実行できる操作を説明しています。

表D-21 ViewObjectImpl上でよくコールされるメソッド

実行する処理 コールするViewObjectImplクラスのメソッド

(クライアント内から実行することもできる)一般的なビュー・オブジェクト、行セットまたは行セット・イテレータ操作をクラス内から実行。

ビュー・オブジェクト、行セットまたは行セットのイテレータ・レベルでの操作の詳細は、「ViewObjectインタフェース」「RowSetインタフェース」および「RowSetIteratorインタフェース」を参照してください。

デフォルトの行セットを変更せずに、ビュー・インスタンスのメモリー内行セットを検索

findByViewCriteria()

データベースからすべての行をフェッチし、ビュー・オブジェクトの行セット内の行の合計数を決定

getRowCount()

ノート:

このメソッドは注意して使用してください。起動する行数が多いと、パフォーマンスが低下する可能性があります。

クライアントによる起動のたびに、その後に、ビュー・オブジェクトの行セット内の行の合計数を決定

getQueryHitCount()

ビュー・オブジェクトの行セット内の行の合計数を決定

getEstimatedRowCount()

ノート:

必要とされるデータベース問合せが1つのみ(行数の取得後は、行が追加および削除されて維持される)なので、これは行数の確認には適した方法です。

カウント問合せを実行するが、行数が多くてパフォーマンスに影響する場合、実行を管理するためにcap引数を使用

getCappedQueryHitCount()

名前付きバインド・パラメータを定義

defineNamedWhereClauseParam()

名前付きバインド・パラメータを削除

removeNamedWhereClauseParam()

名前を使用して、デフォルト行セット上のバインド変数値を設定

setNamedWhereClauseParam()

ノート:

ビュー・オブジェクト上で名前付きのバインド変数を以前定義してある場合にのみ機能します。

デフォルト行セット上のバインド変数値を設定

setWhereClauseParams()

ノート:

このメソッドは、名前付きバインド変数が未定義の場合に、Oracle PositionalまたはJDBC Positionalというバインド・スタイルを持つビュー・オブジェクトに対して使用します。

メモリー内フィルタ式の評価に基づいてビュー・オブジェクトの行セット内の行のサブセットを取得

getFilteredRows()

メモリー内フィルタ式の評価に基づいてビュー・オブジェクトの行セット内の現在の範囲内にある行のサブセットを取得

getFilteredRowsInRange()

ADF問合せコンポーネント内に表示される基準アイテムの実行時表示をオーバーライド。サブクラスがオーバーライドして、指定の基準アイテムのカスタムAttributeHints実装を返す場合があります。デフォルトではnullを返します。

getCriteriaItemAttributeHints()

該当するビュー・オブジェクトのラウンドトリップごとにデータベースからフェッチされる行の数を設定

setFetchSize()

ノート:

デフォルトのフェッチ・サイズは一度に1行です。ビュー・オブジェクトで多数の行を取得しようとしている場合には、これが最適ではないことは明らかです。したがって、設計時に「ビュー・オブジェクトの編集」ダイアログにある「チューニング」ページを使用してフェッチ・サイズの設定を大きくするか、またはこのメソッドを使用して、実行時に設定する必要があります。

共有アプリケーション・モジュールのルックアップ・ビュー・オブジェクト・インスタンスでのみ、行セットの問合せを強制的に(再)実行

forceExecuteQueryOfSharedVO()

ノート:

問合せを再実行すると、新しい問合せのコレクションが強制的に作成され、アプリケーション・モジュール・キャッシュの使用が妨げられます。このメソッドは、実行中ではなく、セットアップ中に共有アプリケーション・モジュールにアクセスしていることが分かっている場合のみ使用してください。通常の実行時にこのメソッドを使用した場合、このコレクションに同時にアクセスする複数のユーザーのナビゲーションを妨害するような、予想外の副作用が生じる可能性があります。新しい問合せコレクションを作成せずに、キャッシュからコレクションをリフレッシュする必要がある場合は、かわりにexecuteQuery()を呼び出します。

カスタムなViewObjectImplサブクラスでよく記述されるメソッド

表D-22は、カスタムViewObjectImplサブクラスを使用して、ビュー・オブジェクトで実行できる操作を説明しています。

表D-22 カスタムなViewObjectImplサブクラスでよく記述されるメソッド

実行する処理 カスタムなViewObjectImplサブクラスで記述するメソッド

バインド変数自体の位置詳細を公開することなくバインド変数値を設定する型保証メソッドをクライアントに提供

someMethodName(Type1arg1, ..., TypeNargN)

ノート:

このメソッドは、内部でsetWhereClauseParams()メソッドをコールし、型保証メソッドの引数で提供される値を使用して、正しいバインド変数を設定します。

JDeveloperでは、ユーザーがクライアントに公開することを選択したビュー・オブジェクトのカスタム・メソッドが含まれるカスタムなYourViewObjectNameインタフェースを生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「ビュー・オブジェクトの編集」の「クライアント・インタフェース」ページを使用します。

カスタムなViewObjectImplサブクラスでよくオーバーライドされるメソッド

表D-23は、カスタムViewObjectImplサブクラスを使用して、ビュー・オブジェクトで実行できる操作を説明しています。

表D-23 カスタムなViewObjectImplサブクラスでよくオーバーライドされるメソッド

実行する処理 ViewObjectImplサブクラスでオーバーライドするメソッド

ビュー・オブジェクト・インスタンスが初めて作成されるときにカスタムなビュー・オブジェクト・クラスのメンバー(行属性ではない)を初期化

create()

ノート:

このメソッドは、作成されるビュー・オブジェクトの各インスタンスに適用可能な設定ロジックをアプリケーション・モジュールのコンテキスト内で実行する際に有用です。

汎用のビュー・オブジェクト設定ロジックのかわりに、アプリケーション・モジュールで指定されたビュー・オブジェクト・インスタンス固有のロジックを実行する必要がある場合は、アプリケーション・モジュールのApplicationModuleImplサブクラスのprepareSession()メソッドをオーバーライドし、findViewObject()をコールして設定が必要なプロパティを持つビュー・オブジェクト・インスタンスを検索した後で、このロジックを実行します。

カスタムなビュー・オブジェクト・インスタンスの状態の状態管理XMLスナップショットへの書出し

passivateState()

カスタムなビュー・オブジェクト・インスタンスの状態を状態管理XMLスナップショットから読み込んでリストア

activateState()

代替データソースを利用するために、ビュー・オブジェクトの問合せの実行をカスタマイズします。

executeQueryForCollection()

ノート:

デフォルトのビュー・オブジェクトは、データベースからデータを読み取り、データベースの結果セットを処理するためにJDBCレイヤーを使用するタスクを自動化します。これに対し、カスタムJavaクラスで適切なメソッドをオーバーライドすることにより、「代替データソースに対するプログラムでのビュー・オブジェクトの使用」で説明されているとおり、様々な代替データソースからプログラムでデータを取得するビュー・オブジェクトを作成できます。

WHERE句およびパラメータを変更するために、executeQueryForCollection()をオーバーライドするのは正しい方法ではありません。ADFビジネス・コンポーネントは、メソッドがコールされるまでに、パラメータがすでに計算済で行フィルタが構築されているものと想定しています。毎回の実行の前に問合せを変更すると、ADFビジネス・コンポーネントは既存のキャッシュされている文ハンドルを再利用できなくなります。かわりに、問合せの実行前にバインド・パラメータを指定する場合は、ViewObjectImplprepareRowSetForQuery()をオーバーライドできます。これは実行される行セットへのアクセスを提供するからです。

プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースを使用するようにし、問合せコレクションが、問合せの実行からフェッチできる行がまだあるかどうかを判断します。

hasNextForCollection()

プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースが利用されるようにし、問合せ内で使用されるバインド・パラメータの名前と値をロギングします

bindParametersForCollection()

プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースが利用されるようにし、取得したデータの各行を移入します。

createRowFromResultSet()

プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースが利用されるようにし、取得される行数を返します。

getQueryHitCount()

プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースを使用するようにし、グローバルな行フェッチ制限で指定された上限値を超える行数を問合せが戻す可能性があるかどうかを判断します。

getCappedQueryHitCount()

プログラムによるビュー・オブジェクトをカスタマイズして、実行される行セットにアクセスし、問合せの実行前に、ビュー・オブジェクトのWHERE句を変更して、バインド・パラメータ値を指定します。これは、問合せをオーバーライドしてバインド・パラメータを設定する場合に推奨されるフック・ポイントです。このメソッドは、行セットを実行しようとするたびに、フレームワークによって起動されます。

prepareRowSetForQuery()

プログラムによるビュー・オブジェクトをカスタマイズして、代替データソースが利用されるようにし、クローズ処理中の行セットと関連付けられている可能性のあるリソースをすべて解放します。

releaseUserDataForCollection()

ViewCriteriaRowViewCriteriaコレクションをQuery-by-ExampleのWHERE句に変換する方法を変更または拡張します

getViewCriteriaClause(boolean)

プログラムによるビュー・オブジェクトをカスタマイズして、範囲ページングを実装します。

buildRangePagingQuery()

プログラムによるビュー・オブジェクトをカスタマイズして、範囲ページングを実装し、現在の行の範囲の開始とサイズを制御するパラメータを渡して、データソースからフェッチします。

bindRangePagingParams()

ViewRowImplクラス

ViewRowImplクラスは、ビュー行オブジェクトのベース・クラスです。

ViewRowImpl上でよくコールされるメソッド

表D-24は、カスタムViewRowImplクラスを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。

表D-24 ViewRowImpl上でよくコールされるメソッド

実行する処理 カスタムなViewRowImplクラスでコールするメソッド

(クライアント内から実行することもできる)一般的なビュー行処理をクラス内から実行

行レベルでの操作の詳細は、「行インタフェース」を参照してください。

属性の値を取得

getAttrName()

属性の値を設定

setAttrName()

該当するビュー行からの属性保存場所の委譲先である基礎となるエンティティ・インスタンスにアクセス

getEntityUsageAliasName()

ノート:

エンティティ・オブジェクトの慣用名(別名)は、「ビュー・オブジェクトの編集」ダイアログの「エンティティ・オブジェクト」ページで変更できます。

ビュー・リンクに関連するmasterRowから、新たに作成された行に値をコピーします。

masterRow.findOrCreateViewLinkAccessorRS(accessorName)

ノート:

このAPIはRowSetを返し、使い慣れたcreateRowおよびinsertRowのパターンに従います。
カスタムのViewRowImplクラスでよく記述されるメソッド

表D-25は、カスタムViewRowImplクラスを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。

表D-25 ViewRowImpl上でよく記述されるメソッド

実行する処理 記述するカスタムなViewRowImplクラスのメソッド

ビュー・オブジェクト・レベルの一時属性の値を計算

getAttrName()

ノート:

メソッドのスケルトンは、JDeveloperによって自動的に生成されます。ただし、メソッド本体内のカスタムな計算ロジックは、ユーザーが記述する必要があります。

ビュー行属性の設定というカスタムな処理を実行

setAttrName()

ノート:

メソッドのスケルトンは、JDeveloperによって自動的に生成されます。ただし、メソッド本体内のカスタムなロジックは、ユーザーが必要に応じて記述する必要があります。

属性の更新の可能性を条件付きの方法で判断

isAttributeUpdateable()

論理演算を現在行で公開(オプションでクライアントからコール可能)

doSomething()

ノート:

これらのビュー行レベルのカスタム・メソッドは、単に反転し、現在行に関連する基礎となるエンティティ・オブジェクト上のメソッド・コールに委譲することがよくあります。

JDeveloperでは、ユーザーがクライアントに公開することを選択したビュー行のカスタム・メソッドが含まれるカスタムなYourViewObjectNameRowインタフェースを生成できます。クライアント・インスタンスに表示するメソッドを選択するには、「ビュー・オブジェクトの編集」ダイアログの「カスタム行インタフェース」ページを使用します。

カスタムなViewRowImplサブクラスでよくオーバーライドされるメソッド

表D-26は、カスタムViewRowImplサブクラスを使用して、ビュー・オブジェクト行で実行できる操作を説明しています。

表D-26 カスタムなViewRowImplサブクラスでよくオーバーライドされるメソッド

実行する処理 ViewRowImplサブクラスで記述するメソッド

属性の更新の可能性を条件付きの方法で判断

isAttributeUpdateable()