XDoclet 1.2 - 継承が正常に行われない

失敗

任意のクラス (この例では ABC) を継承したクラスに XDoclet のタグを記述し、XDoclet を実行します。 デプロイメント記述子、コールバック メソッドを実装した Bean クラス、各種インターフェースが、通常どおり自動生成されます。

ところが、自動生成されたコードでコンパイルエラーが発生しました。 エラーの原因となったローカル ホーム インターフェース/ローカル インターフェースを確認してみると、親インターフェースが ABCLocal/ABCLocalHome になっています。これは一体?

[XDoclet を定義した Bean クラス]
/**
 * @ejb.bean
 * name = "Sample"
 * description = "Sample Entity Bean"
 * display-name = "SampleEntity"
 * type = "CMP"
 * cmp-version = "2.x"
 * jndi-name = "ejb/Sample"
 * local-jndi-name = "ejb/SampleLocal"
 * view-type = "local"
 * reentrant = "false"
 * primkey-field = "sampleId"
 *
 * 以下、省略
 */
public abstract class SampleBean extends ABC {}
[自動生成されたローカル ホーム インターフェース]
public interface SampleLocalHome extends ABCLocalHome {}
[自動生成されたローカル インターフェース]
public interface SampleLocal extends ABCLocal {}

環境

このレポートは、以下の環境について記述したものです。

JDK JDK 1.4
EJB EJB 2.0
XDoclet XDoclet 1.2.1

原因

XDoclet のタグを記述した Bean クラスが任意のクラスを継承している場合、生成されるホーム インターフェースやローカル インターフェースの親インターフェースは正しく認識されません。

解決策

@ejb.home および @ejb.interface タグを使用し、親インターフェースを明示します。

(1) 親インターフェースを明示する

ローカル ホーム インターフェースの場合は @ejb.home タグの local-extends 属性を、 ローカル インターフェースの場合は @ejb.interface タグの local-extends 属性に親インターフェースを指定します。

[XDoclet を定義した Bean クラス]
/**
 * @ejb.bean
 * name = "Sample"
 * description = "Sample Entity Bean"
 * display-name = "SampleEntity"
 * type = "CMP"
 * cmp-version = "2.x"
 * jndi-name = "ejb/Sample"
 * local-jndi-name = "ejb/SampleLocal"
 * view-type = "local"
 * reentrant = "false"
 * primkey-field = "sampleId"
 *
 * @ejb.home
 * local-extends = "javax.ejb.EJBLocalHome"
 * local-class = "mypackage.SampleLocalHome"
 * @ejb.interface
 * local-extends = "javax.ejb.EJBLocalObject"
 * local-class = "mypackage.SampleLocal"
 *
 * 以下、省略
 */
public abstract class SampleBean extends ABC {}
[自動生成されたローカル ホーム インターフェース]
public interface SampleLocalHome extends javax.ejb.EJBLocalHome {}
[自動生成されたローカル インターフェース]
public interface SampleLocal extends javax.ejb.EJBLocalObject {}

コメント

コメント投稿
(非公開)
     « アイコン一覧 »
(必須)

作成日:2004/11/28
更新日:2004/11/28