我正在学习CDI和EJB。纵观CDI(http://docs.jboss.org/weld/reference/latest/en-US/html/beanscdi.html)焊缝的解释,它指出无法使用其超类注入(@EJB)ejb
的会话bean无限制集合豆种含有豆类及其超级的所有本地接口。如果会话bean具有一个bean类本地视图,那么不受限制的一组bean类型包含bean类和所有超类。另外,java.lang.Object是每个会话bean的bean类型。但远程接口不包含在这组bean类型中。
我试图测试这个特定部分
无限制集合bean类型的包含bean类和所有超
所以我创建了两个EJB:延伸DummyParent ReferencedEJB和MainEJB,其中引用了EJB
DummyParent.java
package com.etm.ejbtest;
public abstract class DummyParent {
public DummyParent() {
}
public void sayHi() {
System.out.println("Hi!");
}
}
ReferencedEJB.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上运行,但我得到一个错误说
EJB没有发现的接口键入'com.etm.ejbtest.DummyParent'进行绑定com.etm.ejbtest.MainEJB/dummyParent
任何想法,为什么它不工作?
是的,你是对的,当我把它改为“@注入”而不是“@EJB”它确实有效。 –
或者,您可以使用'@EJB(beanInterface = ReferencedEJB.class)'或'@EJB(beanName =“ReferencedEJB”)'这样EJB容器就可以知道您想要的EJB。从EE 6/EJB 3.1开始,您还可以使用EJB(lookup =“...”)指定目标EJB的java:global,java:app或java:module JNDI名称。 –