コピー・ヘルパー (アクセス Bean)

コピー・ヘルパー・アクセス 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 は以下のプロトコルを順守します。

  1. キャッシュが空またはキー・オブジェクトのみが入っている場合、 キャッシュの完全な更新が refreshCopyHelper() を使用して実行される。
  2. キャッシュが空でなく、キー・オブジェクトが入っていない場合、最初にエンタープライズ Bean がフラッシュされて、 設定されていた可能性のある属性が更新され、続いて完全な更新が実行される。
  3. 属性の値がキャッシュから取得される。
注: クライアントがコピー・ヘルパーを使用する際には、アクセスされる各レコードごとに、コピー・ヘルパー・アクセス 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);
		}
	}
}


フィードバック