先読み方式を使用すると、 アプリケーションは、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 という表記を使用して指定されています。
タイプ A の Bean がデータベースから検索されるごとに、 それと直接関係がある B Bean と D Bean、 およびそれと間接的に関係がある C Bean も検索されます。 結果セットの各行における検索済み Bean のデータ列の順序は、 先読みヒントでの順序と同じです。 つまり、A Bean、B Bean (またはヌル)、C Bean (またはヌル)、D Bean (またはヌル) の順になります。 ヒントの中で同じ関係が 2 回以上示されている場合 (例えば、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 製品の資料を参照してください。
一般的に、パーシスタンス・マネージャーは、Bean が厳しいロック・ポリシーを強制するアクセス・インテントを 持つ場合にのみ、Bean に対して SELECT FOR UPDATE ステートメントを発行します。 厳しいロック・ポリシーでは、 データベース選択照会の SELECT FOR UPDATE ステートメントを必要とします。データベース表の設計に ステートメントを満たす結合操作が必要な場合は、多数のデータベースが例外を発行します。 これらのデータベースは、SELECT FOR UPDATE ステートメントでの表の結合をサポートしないためです。このような場合、WebSphere Application Server は 先読みヒントを実装しません。データベースがこれをサポートする場合、Application Server は、 ユーザーが構成する先読みヒントを実装します。
DB2 Universal Database V8.2 は、
表の結合で SELECT FOR UPDATE ステートメントをサポートします。
アクセス・インテントが 異なると、結果として SELECT FOR UPDATE ステートメントが必要となる場合があります。JDBC ドライバーのマトリックスおよび SELECT FOR UPDATE サポートを確認して、readAhead が使用可能かどうかを確認します。