@Ejb依赖注入的NullPointerException

时间:2015-01-23 11:09:27

标签: java-ee dependency-injection ejb-3.1

我有一个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。 我错过了什么?

1 个答案:

答案 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();
}