我有一个Ear项目,我在其中放置了一个EJB项目和一个简单的Web项目。 我在一个managedBean中调用EJB,它只对查找事物工作正常。 我在同一个managedBean中调用EJB并且它没有实例化。 Web项目支持CDI(我检查了支持选项) 这是EJB的代码:
@Stateless
@LocalBean
public class MyTestBean implements MyTestBeanRemote, MyTestBeanLocal {
/**
* Default constructor.
*/
public MyTestBean() {
// TODO Auto-generated constructor stub
}
public String message() {
return "This is my Test bean";
}
}
@Local
public interface MyTestBeanLocal {
String message();
}
这里是调用bean的代码:
@ManagedBean(name="testBean")
public class TestBean {
private String hello = "Hello it is me";
@EJB
private MyTestBeanLocal myTest;
public TestBean() {
hello = myTest.message();
}
}
" myTest"变量为null。 我错过了什么?
答案 0 :(得分:2)
如果是注入实例,则不能使用注入的实例。
如果要在构造函数中使用注入的实例,则需要进行构造函数注入(我不确定EJB是否支持构造函数注入)
@Inject //will only work if you are defining EJB in the same war file
public TestBean(MyTestBeanLocal beanLocal) {
this.beanLocal = beanLocal;
hello = myTest.message();
}
否则做任何你需要做的@postconstruct。保证在bean投入使用之前调用它。
@PostConstruct
public void postConstruct() {
hello = myTest.message();
}