先読み方式のヒント
先読み方式を使用すると、 アプリケーションは、1 回の照会でトランザクションのコンテナー管理パーシスタンス (CMP) Bean の作業セットを検索して、 データベースの往復の回数を最小限に押さえることができます。先読みにより、 要求された CMP Bean のアクティブ化、 関連 Bean のデータのキャッシングが行われ、 アプリケーションで次に必要となる可能性が最も高い Bean のデータが確実に存在するようにします。先読みヒント は、読み取り対象となる関連 Bean の表現です。 このヒントは、要求される Bean タイプの findByPrimaryKey メソッドに関連付けられます。 ここで、この Bean のタイプは EJB 2.x 準拠の CMP エンティティー Bean でなければなりません。
先読みヒントは、文字ストリングの形式を取ります。このストリングは、ユーザーが指定する必要はありません。 Bean に定義されているコンテナー管理関係 (CMR) に基づいて、ウィザードにより生成されます。 このセクションで後述されている例は、補助情報としてのみ使用してください。CMP Bean タイプ A には、Bean A のインスタンスを戻すファインダー・メソッドがあるものとします。 このメソッドの先読みヒントは、RelB.RelC; RelD という表記を使用して指定されています。
- Bean タイプ A には、Bean タイプ B および D との CMR がある。
- Bean タイプ B には、Bean タイプ C との CMR がある。
タイプ A の Bean がデータベースから検索されるごとに、 それと直接関係がある B Bean と D Bean、 およびそれと間接的に関係がある C Bean も検索されます。 結果セットの各行における検索済み Bean のデータ列の順序は、 先読みヒントでの順序と同じです。 つまり、A Bean、B Bean (またはヌル)、C Bean (またはヌル)、D Bean (またはヌル) の順になります。 ヒントの中で同じ関係が複数回示されている場合 (RelB.RelC;RelB.RelE など)、Bean のデータ列は、結果セット内の、ヒント内で最初に占有する位置に一度のみ現れます。
この表記に示されているトークン (RelB など) は、その Bean 用のデプロイメント記述子で定義されている関係についての CMR フィールド名である必要があります。 RelB.RelC などの間接的な関係では、RelC は、Bean タイプ B のデプロイメント記述子で定義される CMR フィールド名です。
単一の先読みヒントでは、 複数の関係において同じ Bean タイプを参照することはできません。例えば、Department Bean に、Employee Bean との employees という関係があり、 さらに Employee Bean との manager という関係もある場合、 先読みヒントでは、employees と manager の両方を指定することはできません。
先読みヒントの設定方法について詳しくは、Rational® Application Developer 製品の資料を参照してください。
先読みヒントのランタイム動作
- 長く、または複雑なパスでの先読みヒントの結果、複雑すぎて使いにくい照会になることがあります。ルートまたはリーフ継承マッピングでの先読みヒントには、特に注意が必要です。 必要な結合操作の複雑さを測定するために、先読みプリロードを構成する可能性がある、 表の数を加算します。結果のステートメントが、ターゲット・データベース上で適切な照会を構成する かどうかを考慮します。
- 以下の場合、先読みヒントは機能しません。
- M:N 関係を介したプリロード・パス
- 再帰的エンタープライズ Bean 関係または再帰的 fk 関係を介したプリロード・パス
- 読み取りヘッド・ヒントが、これらの 2 つの操作の結合をサポートしないデータベースで、
表の結合を必要とする SELECT FOR UPDATE ステートメントに適用される場合。
一般的に、パーシスタンス・マネージャーは、Bean が厳しいロック・ポリシーを強制するアクセス・インテントを 持つ場合にのみ、Bean に対して SELECT FOR UPDATE ステートメントを発行します。 厳しいロック・ポリシーでは、 データベース選択照会の SELECT FOR UPDATE ステートメントを必要とします。データベース表の設計に ステートメントを満たす結合操作が必要な場合は、多数のデータベースが例外を発行します。 これらのデータベースは、SELECT FOR UPDATE ステートメントでの表の結合をサポートしないためです。このような場合、WebSphere® Application Server は先読みヒントを実装しません。データベースがこれをサポートする場合、Application Server は、 ユーザーが構成する先読みヒントを実装します。
DB2 Universal Database™ V8.2 は、表の結合で SELECT FOR UPDATE ステートメントをサポートします。