30.8.2. 一括読み込みプロセス

エンティティがロードされると、JBoss はロードする必要があるフィールドを決定しなればなりません。デフォルトでは、JBoss は、このエンティティを選択した最終クエリーの eager-load-group を使用します。クエリーでエンティティが選択されていない場合、または最終クエリーが none read-ahead ストラテジーを使用していた場合は、JBoss はエンティティに宣言されたデフォルトの eager-load-group を使用します。次の設定例では、gangster エンティティ bean に対するデフォルト eager-load-group として basic ロードグループが設定されています。
<jbosscmp-jdbc>
    <enterprise-beans>
        <entity>
            <ejb-name>GangsterEJB</ejb-name>
            <!-- ... -->
            <load-groups>
                <load-group>
                    <load-group-name>most</load-group-name>
                    <field-name>name</field-name>
                    <field-name>nickName</field-name>
                    <field-name>badness</field-name>
                    <field-name>hangout</field-name>
                    <field-name>organization</field-name>
                </load-group>
            </load-groups>
            <eager-load-group>most</eager-load-group>
        </entity>
    </enterprise-beans>
</jbosscmp-jdbc>
一括読み込みプロセスは、トランザクション内のエンティティでメソッドが初めて呼び出されたときに開始します。ロードプロセスの詳細は次のとおりです。
  1. エンティティコンテキストがまだ有効な場合はローディングは必要なく、したがってローディングプロセスは完了です。commit オプション A を使用している場合、または commit オプション D を使用していてデータがまだタイムアウトしていない場合には、エンティティコンテキストは有効になります。
  2. エンティティコンテキストに残っているデータがフラッシュされます。これにより、古いデータが新しいデータに入り込むことはなくなります。
  3. プライマリキー値がプライマリキーフィールドに戻ります。プライマリキーオブジェクトは、実際にはフィールドとは無関係で、ステップ 2 でのフラッシュ後に再ロードする必要があります。
  4. このエンティティのプレロードキャッシュ内のすべてのデータが、フィールドにロードされます。
  5. まだロードする必要がある追加のフィールドを JBoss が決定します。通常、ロードするフィールドは、エンティティの eager-load グループによって決まりますが、on-find または on-load 先読みストラテジーを持つクエリーまたは CMR フィールドを使用してエンティティを特定した場合には、オーバーライドすることができます。すべてのフィールドがすでにロードされていた場合、ロードプロセスはステップ 7 に進んでください。
  6. クエリーを実行して必要なカラムを選択します。このエンティティが on-load ストラテジーを使用している場合、「on-load」 で説明したとおりに 1 ページのデータがロードされます。現行のエンティティのデータがコンテキストに格納され、他のエンティティのデータはプレロードキャッシュに格納されます。
  7. エンティティの ejbLoad メソッドが呼び出されます。