例えば、単一エンティティー・エンタープライズ Bean インスタンスと一緒に使用するために最適化されています。Java Bean ラッパーとは異なり、コピー・ヘルパーは、 リモート・エンティティー Bean の属性のローカル・コピーを含む単一コピー・ヘルパー・オブジェクトを取り込みます。注: ローカル・クライアント・ビューしか持たないエンタープライズ Bean ではサポートされません。
アクセス Bean は、コピー・ヘルパー・オブジェクトを使用します。 これは、本来アクセス Bean 内部に保管されたユーザー選択エンティティー Bean の属性のキャッシュです。 これらの属性に対する getter メソッドおよび setter メソッドは、 リモートの getter 呼び出しおよび setter 呼び出しを直接呼び出すのではなく、 ローカル・キャッシュを直接扱います。 メソッドの提供により、実際のエンタープライズ Bean データベースへのキャッシュのフラッシュと、 実際のエンタープライズ Bean からのキャッシュの更新が行えます。 これにより、多数の属性を持つエンティティー・エンタープライズ Bean の性能が著しく改善されます。これは、それぞれの属性ごとにリモート呼び出しを発行するよりも、 多数の属性を検索および設定する単一リモート呼び出しを発行する方が高速であるためです。
コピー・ヘルパーを作成する際には、エンタープライズ Bean のリモート・インターフェースが、 CopyHelper インターフェースおよび EJBObject インターフェースを拡張するよう変更されます。 コピー・ヘルパー・オブジェクトを作成するときに、 すべてのエンタープライズ Bean 属性あるいはそのサブセットのみを選択することができます。 選択された属性はエンタープライズ Bean メタモデルに保管され、選択の変更が決定されると再表示されます。
コピー・ヘルパー・オブジェクトはアクセス Bean 内部に保管されます。 getter メソッドおよび setter メソッドの代行は、リモート・エンタープライズ Bean オブジェクトではなく、 ローカル・コピー・ヘルパー・オブジェクトに指定されます。 コピー・ヘルパーの変更をリモート・エンタープライズ Bean にコミットしたり、 リモート・エンタープライズ Bean からローカル・コピー・ヘルパーを最新表示したりするには、 ご使用のクライアント・プログラムで、 それぞれ commitCopyHelper() および refreshCopyHelper() を呼び出さなければなりません。
getter メソッドおよび setter メソッドは、それらを定義するための JavaBeans™ 規則に従って、 ご使用のエンタープライズ Bean プロパティーに定義しなければなりません。getter メソッドおよび setter メソッドがないと、 対応するフィールドをコピー・ヘルパーに追加することができなくなります。 しかも、getter メソッドおよび setter メソッドは、例外を 1 つもスローしません。
ユーザー選択のエンタープライズ Bean 属性に加えて、 キー・オブジェクトも、エンタープライズ Bean がアクセス Bean によってインスタンス化されると、 直ちにコピー・ヘルパー・キャッシュに保管されます。 アクセス Bean からキー・オブジェクトを取得するには、__getKey() メソッドを使用します。
キャッシュされた属性のために getter メソッドを呼び出す際、アクセス Bean は以下のプロトコルを順守します。
public static void main(String[] args) { String[] dataId = new String[] { "100001", "100002" }; for (int j = 0; j < 2; j++) { VehicleAccessBean Veh = new VehicleAccessBean(); Veh.setInit_id(new Long(Long.parseLong(dataId[j]))); try { Veh.refreshCopyHelper(); System.out.println("Car #" + Veh.getId + " is " + Veh.getColor()); } catch (Exception e) { System.out.println("Exception e:" + e); } } }