例えば、単一エンティティー・エンタープライズ Bean インスタンスと一緒に使用するために最適化されています。Java 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);
}
}
}