すべてのアクセス Bean と同様に、Java Bean ラッパーも、 スーパークラス com.ibm.ivj.ejb.runtime.AbstractAccessBean を拡張します。
Java Bean ラッパーの基礎をなすフレームワークを理解するには、 以下のセクションで説明するフレームワークの特性を熟知していることが必要です。
これらのセクションで説明する特性は、Java Bean ラッパーに不可欠なフレームワークを構成するだけでなく、 より複雑なコピー・ヘルパー・アクセス Bean の基礎となる基本的なフレームワークも構成します。注: ローカル・クライアント・ビューしか含まれていない EJB 2.x のモジュールでは、Bean に対して Java Bean ラッパーがサポートされません。
ホーム・インターフェースのマッピング
EJBObject の単一インスタンスを戻すホーム・インターフェース・メソッドは、Java Bean のコンストラクターにマップされます。 エンタープライズ Bean インスタンスのコレクションを戻すホーム・インターフェース・メソッドは、 対応するインスタンスのアクセス Bean 型を戻すメソッドにマップされます。 すべてのメソッドは、適切なリモート・インターフェース・メソッドを呼び出します。
Java Bean ラッパーには、引数なしコンストラクターが含まれます。 これは、単に引数を取らないコンストラクターです。引数なしコンストラクターが使用されると、Java Bean ラッパーは遅延初期化を実行します。 アクセス Bean のインスタンスが生成されると、エンタープライズ Bean ラッパーはエンタープライズ Bean のインスタンスを生成しません。 リモート・メソッド呼び出しで、アクセス Bean は、 リモート・エンタープライズ Bean のインスタンスがまだ生成されていなければ、これを生成します。
「アクセス Bean の作成」ウィザードから、 ホーム・インターフェースで定義された create メソッドまたは finder メソッドの 1 つを、アクセス Bean の引数なしコンストラクターへマップするようにプロンプトが出された場合、 アクセス Bean には、引数なしコンストラクターにマップされた create メソッド、 または finder メソッドのパラメーターごとに 1 つの init_xx プロパティーが引き続き含まれることになります。 キー・クラスが、コンテナー管理パーシスタンス (CMP) エンタープライズ Bean の create メソッド、 または finder メソッドで使用されると、キー・フィールドが、 キー・クラスの代わりに init_xx プロパティーとして使用されます。 キー・フィールドは通常単純型として宣言されますので、 ビジュアルな構築ツールでのアクセス Bean の使用が容易になります。 引数なしコンストラクターが使用されるときは、アクセス Bean への他のどの呼び出しよりも先に、 init_xx プロパティーが設定されなければなりません。 アクセス Bean には、複数の引数を取るコンストラクターをいくつか入れることが可能です。 それぞれのコンストラクターは、 エンタープライズ Bean のホーム・インターフェースで定義された create メソッドまたは finder メソッドの 1 つに対応しています。
エンタープライズ Bean インスタンスのコレクションを戻すホーム・インターフェースの各 finder メソッドは、 アクセス Bean の finder メソッドにマップされます。まず、アクセス Bean のインスタンスを生成し、 それから、アクセス Bean インスタンスのコレクションを戻す適当な finder メソッドを呼び出さなければなりません。 エンタープライズ Bean のインスタンスを生成するために、 アクセス Bean はエンタープライズ Bean のホーム・インターフェースで定義された create メソッドまたは finder メソッドを呼び出さなければなりません。 引数なしコンストラクターが使用されるときは、最初のビジネス・メソッドが呼び出される際に、 アクセス Bean が実際のエンタープライズ Bean のインスタンスを生成するだけです。
アクセス Bean ランタイムには、EJBObject の列挙を処理するクラスが含まれます。 EJBObject の java.util.Enumeration を戻すホームのどの finder メソッドに対しても、 対応するアクセス Bean のメソッドは、サーバー・サイドのエンタープライズ Bean をインスタンス化する nextElement() メソッドを持つ専門化された Enumeration クラスを戻し、 対応する EJBObject 参照を使用してインスタンス化されたアクセス Bean を戻します。 エンタープライズ Bean は、アクセス Bean で finder メソッドが呼び出されるときではなく、 nextElement() が呼び出されるときにインスタンス化されるだけです。 また、手操作で (EJBObject 参照に基づいて) アクセス Bean のインスタンスを生成する必要はありません。 コレクションを戻すファインダーはサポートされていますが、 コレクション全体の作成にはインスタンス化されたすべてのアクセス Bean が使用されるため、 永続性の問題が存在することになります。
リモート・インターフェースのマッピング
リモート・インターフェース・メソッドは Java Bean メソッドにマップされます。 エンタープライズ Bean のリモート・メソッドも、EJBObject を戻すことがあります。 この種類のメソッドがアクセス Bean クラスで生成されるとき、戻りの型は対応する アクセス Bean 型に変更されます。 このため、ご使用のクライアント・プログラムはアクセス Bean 型のみを扱い、 アクセス Bean が提供する利点を継承できることになります。
JNDI のマッピング
デフォルト JNDI 名がそれぞれのアクセス Bean クラスに生成されます。 コード生成プログラムは、拡張エディターで指定された JNDI 名を使用します。 このデフォルトは、ホーム・インターフェース名です。Java Bean ラッパー (およびコピー・ヘルパー) の場合は、setInit_JNDIName() を使用して JNDI 名を変更することができます。
一般に、JNDI 名を変更する必要はありません。ただし、エンタープライズ Bean が異なるホームにデプロイされている場合、 管理者は違いを示すために、JNDI 名に接頭部を追加することができます。 ホームをルックアップするために、アクセス Bean は rootContext として知られるネーム・サービス・コンテキストを取得します。 これは、ネーム・サービスの URL とタイプを知っていれば構成できるものです。 アクセス Bean は、rootContext のプロパティーを設定するための以下の 2 つの API を提供しています。
setInit_NameServiceTypeName() setInit_NameServiceURLName()
ただし、クライアント・プログラムが WebSphere® ランタイム環境で実行されている場合は、 rootContext が自動的に設定されるため、この 2 つの API は必要ありません。
Java Bean ラッパー (およびコピー・ヘルパー) のグローバル JNDI URL 名と型を設定するために、 API のペアが 2 つ提供されています。以下は API の 1 番目のペアです。
public void setInit_NameServiceTypeName(string_name) public void setInit_NameServiceURLName(string_name)
これらはインスタンス・メソッドで、これらの呼び出し元であるアクセス Bean のネーム・サービスのプロパティーを変更するものです。 使用されるのは、アクセス Bean の引数なしコンストラクターが使用された場合のみです。
以下は API の 2 番目のペアです。
public static final setGlobal_NameServiceTypeName(string_name) public static final setGlobal_NameServiceURLName(string_name)
これらは、クライアント・プログラムで使用される Java Bean ラッパー (およびコピー・ヘルパー) に適用できる静的メソッドです。 新規のアクセス Bean のインスタンスを生成する前に、これらのメソッドを呼び出して、特定の アクセス Bean が、 サーバー・サイドでエンタープライズ Bean のインスタンスを生成する際に、新規のネーム・サービス・タイプ、 または URL を使用するようにします。
アクセス Bean の複数インスタンスが同じホーム (同一の JNDI 名および rootContext) を使用するときは、 アクセス Bean クラスは対応するエンタープライズ Bean ホームを一回検索するだけです。 それぞれのアクセス Bean クラスにはクラス・レベル・キャッシュが保存されており、 エンタープライズ Bean のインスタンスを生成するときの性能を改善します。 ご使用のクライアント VM の存続時間中、アクセス Bean ランタイムは、JNDI 名、ネーム・サービス URL、 およびネーム・サービス・タイプによってインデックスが付けられたすべてのホーム参照の静的キャッシュを保持します。 クライアントは、resetHomeCache() への呼び出しを発行してキャッシュをリセットすることができます。 これは、特定のホーム参照が有効でなくなった場合に役立ちます。
アクセス Bean の直列化
アクセス Bean が直列化されるときに、リモート・インターフェース参照 (EJBObject 参照)、ホーム・インターフェース参照、お よびグローバル JNDI 情報 (名前、ネーム・サービス URL、およびネーム・サービス・タイプ) などの特定のアクセス Bean のプロパテ ィーは直列化されません。 ただし、コピー・ヘルパー・アクセス Bean の場合、属性のキャッシュは直列化されます。
サンプル
以下のサンプルは、従業員を作成するユーザー・プログラムです。
EmployeeAccessBean aEmployee = new EmployeeAccessBean () aEmployee.setInit_employeeNo ("100"); aEmployee.setName ("IBM"); aEmployee.setAddress ("1150 Eglinton Ave, Toronto");