私はCDIとEJBの両方を学んでいます。WELD の CDI の説明 ( http://docs.jboss.org/weld/reference/latest/en-US/html/beanscdi.html ) を見ると、次のように述べられています。
セッション Bean の無制限の Bean タイプのセットには、Bean のすべてのローカル インターフェースとそのスーパーインターフェースが含まれます。セッション Bean に Bean クラスのローカル ビューがある場合、無制限の Bean タイプのセットには、Bean クラスとすべてのスーパークラスが含まれます。また、java.lang.Object はすべてのセッション Bean の Bean タイプです。ただし、リモート インターフェイスは一連の Bean タイプに含まれていません。
この特定の部分をテストしようとしています
Bean タイプの無制限のセットには、Bean クラスとすべてのスーパークラスが含まれます
したがって、2 つの EJB を作成しました。DummyParent を拡張する ReferencedEJB と、EJB への参照を持つ MainEJB です。
DummyParent.java
package com.etm.ejbtest;
public abstract class DummyParent {
public DummyParent() {
}
public void sayHi() {
System.out.println("Hi!");
}
}
参照される EJB.java
package com.etm.ejbtest;
import javax.annotation.PostConstruct;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup
public class ReferencedEJB extends DummyParent {
public ReferencedEJB() {
}
@PostConstruct
protected void init() {
System.out.println("init of ReferencedEJB");
}
}
MainEJB.java
package com.etm.ejbtest;
import javax.annotation.PostConstruct;
import javax.ejb.EJB;
import javax.ejb.Singleton;
import javax.ejb.Startup;
@Singleton
@Startup
public class MainEJB {
@EJB
private DummyParent dummyParent;
public MainEJB() {
}
@PostConstruct
protected void init() {
System.out.println("init of MainEJB");
dummyParent.sayHi();
}
}
これを JBoss 7 で実行していますが、次のエラーが表示されます。
com.etm.ejbtest.MainEJB/dummyParent をバインドするためのタイプ 'com.etm.ejbtest.DummyParent' のインターフェースを持つ EJB が見つかりません
なぜそれが機能しないのですか?