EJB デプロイメント記述子エディターを利用して、エンタープライズ Bean 間の継承関係を定義できます。
ツールを使用して、2 つの形式の継承を定義できます。
標準のクラス継承では、ホーム・インターフェース、リモート・インターフェース、あるいは エンタープライズ Bean クラスは、
プロパティーとメソッドを、それ自体エンタープライズ Bean クラスあるいはインターフェースではない基本クラスから継承します。 Bean スーパークラスは、エンタープライズ Bean ウィザードの「スーパークラス」フィールドで指定します。
これに比べて、EJB 継承では、エンタープライズ Bean は、(CMP フィールドや関係役割などの) プロパティー、メソッド、
およびメソッド・レベルのアセンブリー記述子の属性を、同じ EJB モジュールにある別の エンタープライズ から継承します。 EJB の継承関係を定義するときのアシストとして、
「新規エンタープライズ Bean」ウィザードを使用すると、
既存エンタープライズ Bean から継承する新規エンタープライズ Bean を作成することができます。 EJB エディターで、生成された Java™ コードを更新して、既存のエンタープライズ Bean の継承構造を変更することができます。
この製品には、EJB エディターの「継承」セクションから使用可能なウィザードを使用して、
親を変更する方法が他にもいくつかサポートされています。
- ある継承構造 (ルートではない) の Bean クラスを異なる継承構造に移動します (親を変更する)。
- 現在、継承構造体にはない既存の Bean クラスに親を追加します。 継承された Bean およびそのすべてのサブタイプは、そのスーパータイプのキー・クラスを参照するようになります。 継承された Bean のキーの形状は変更され、その結果、その Bean クラスのメソッドとリモート情報は変更されるか、
または除去される可能性があります。 古いキー・クラスが他の Java クラスから参照されなくなっていれば、
このクラスを安全に削除することができます。
- 継承構造から Bean を除去して、ルートにします。
キー・クラスを指定しなければなりません。 EJB ツールによるキーの作成を選択している場合は、EJB ツールがユーザーに代わってキーを作成します。 このキーは Bean の以前のキーと同じ属性を持ち、クラスおよび Bean はまだ有効です。 例えば、PTEmployee の親として、Employee があるとします。PTEmployee を取り出すと、PTEmployeeKey が新規キー・クラスとして作成されます。「OK」をクリックすると、ツールは同じフィールドを保存、反映、そして自動的に生成します。
EJB 継承の特性をいくつか挙げると、以下のようになります。
- CMP エンティティー Bean の場合、単一テーブルとルート・リーフ・ テーブルのマッピングがサポートされます。 ただし、大きな階層 (広いまたは深い) は、SQL ステートメントのサイズが大きいため、うまく実行できない場合があります。 ルート・リーフ・マッピングは、SQL ステートメントで使用される結合が多いため、
この問題によってより多くの影響を受けます。
- デプロイメント記述子は、継承されたフィールドを含め、エンタープライズ Bean ごとに CMP フィールドをすべてリストします。 メソッド・アクセス権およびスーパータイプ EJB 用に定義されたメソッド・トランザクションが、エンタープライズ Bean のそれぞれのサブタイプごとに作成されます。 これは EJB 参照にも当てはまります。
- エンタープライズ Bean 間で継承関係が定義されている場合は、アソシエーションを構成していないすべてのホーム・メソッドが、
子 Bean にコピーされます。 子ホーム・インターフェースは、
スーパータイプの create メソッドをサポートしないで、サブタイプで特定の create メソッドを持つようにするために、
スーパータイプ・エンタープライズ Bean のホーム・インターフェースを拡張することはありません。
- 新規の子エンタープライズ Bean の Bean クラスは、親エンタープライズ Bean の Bean クラスを拡張します。 子 Bean クラスには親 Bean クラスのメソッドは定義されません。
- ローカルおよびリモート・インターフェースは、
スーパータイプ・エンタープライズ Bean のリモート・インターフェースを拡張します。
- キー・クラスは、継承されたすべてのエンタープライズ Bean で共通です。 つまり、子エンタープライズ Bean のキー・クラスは、親エンタープライズ Bean のキー・クラスと同じであるということです。
- ルート Bean では、キーに追加することしかできません。
ソース・ページおよび EJB 継承
継承階層で
CMP エンティティー Bean を変更している場合、
ソース・ページではなく、
EJB デプロイメント記述子エディターのウィザードとインターフェース部分を使用する必要があります。 例えば、
CMP フィールドを追加または除去したい場合、または CMP Bean の主キー・フィールドを変更したい場合、
Bean を EJB 仕様に準拠させるため、
すべての継承 Bean のツールを使用してこれらのフィールドが同期化されます。 そのような同期化は、
ソース・ページでソースを変更した場合には行われない場合があります。