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
の主キー・フィールドを変更したい場合には、EJB 仕様への Bean
の準拠を維持するため、ツールを使用してすべての継承 Bean のこれらのフィールドが同期化されます。そのような同期化は、
ソース・ページでソースを変更した場合には行われない場合があります。