无法将EJB注入JSF阶段侦听器

时间:2016-05-13 17:18:42

标签: jsf ejb jsf-2.2 wildfly-10 phaselistener

我正在使用Wildfly 10服务器,而且我遇到了JSF阶段监听器的问题,而没有将EJB注入其中。这是我的测试代码,我似乎无法正常工作。

public class TestListener implements PhaseListener {
@EJB
BasicEJB bjb;

private final static Logger LOGGER = Logger.getLogger(TestListener.class.getName());

@Override
public void afterPhase(PhaseEvent arg0) {
    LOGGER.log(Level.INFO, "After Restore View event hook called.");

}

@Override
public void beforePhase(PhaseEvent arg0) {
    LOGGER.log(Level.INFO, "Before Restore View event hook called.");
    bjb.callMe(); // crash happens right here.
}

@Override
public PhaseId getPhaseId() {
    return PhaseId.RESTORE_VIEW;
}
}

如果我注释掉bjb.callMe();行,该程序就会正常工作。有了它,我得到一个NullPointerException。我能够注入这个EJB并在@RequestScoped支持bean中使用它。

我已经了解到,在JSF 2.2之前,你无法注入阶段监听器,但是,我使用的是这个服务器的JSF 2.2.12。更重要的是,我可以在Glassfish4服务器上部署这个确切的代码,它可以工作。我对Wildfly的错误是什么?

1 个答案:

答案 0 :(得分:1)

目前,在Wildfly上的JSF PhaseListener中注入一个@EJB显然是有问题的。请参阅https://developer.jboss.org/thread/269770以供参考。

但是,如果我将注释更改为@Inject而不是@EJB,它可以正常工作。 (感谢BalusC和JBoss论坛贡献者提供的建议)