我正在学习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类和所有超类
所以我创建了两个EJB:ReferencedEJB扩展了DummyParent,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上运行这个,但是我收到错误说
没有找到带有'com.etm.ejbtest.DummyParent'类型接口的EJB来绑定com.etm.ejbtest.MainEJB / dummyParent
知道为什么它不起作用?
答案 0 :(得分:2)
不要混淆CDI和@EJB
注释; @EJB
注入由 EJB容器管理,而不是CDI;它会注入一个EJB,而DummyParent
不是一个EJB。
对于现场的新人来说,这听起来与直觉相反。在官方Java EE支持CDI之前,EJB就已经出现了。
Google搜索通过CDI注入EJB可能会为您解释这一点。
答案 1 :(得分:1)
如果使用以下查找参数,您将能够以这种方式注入EJB:
@EJB(lookup="{moduleName}/ReferencedEJB")
private DummyParent parent;