コピー・ヘルパー・アクセス Bean は、Java™ Bean ラッパーと同じ基本的な特性を持ちますが、 さらに独自の特性も導入されています。
例えば、単一エンティティー・エンタープライズ 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); } } }