无法将 EJB 注入 JSF 阶段侦听器
Unable to inject EJB into JSF phase listener
我正在使用 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 做错了什么?
在 Wildfly 上的 JSF PhaseListener 中注入 @EJB 目前显然存在漏洞。请参阅 https://developer.jboss.org/thread/269770 以供参考。
但是,如果我将注释更改为@Inject 而不是@EJB,它就可以正常工作。 (感谢 BalusC 和 JBoss 论坛贡献者的建议)
我正在使用 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 做错了什么?
在 Wildfly 上的 JSF PhaseListener 中注入 @EJB 目前显然存在漏洞。请参阅 https://developer.jboss.org/thread/269770 以供参考。
但是,如果我将注释更改为@Inject 而不是@EJB,它就可以正常工作。 (感谢 BalusC 和 JBoss 论坛贡献者的建议)