3
我正在使用Wildfly 10服務器,並且遇到了JSF階段監聽器未注入EJB的問題。這是我的測試代碼,我似乎無法正確工作。無法將EJB注入JSF階段監聽器
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並將它用於支持bean的@RequestScoped
。
我已經瞭解到,在JSF 2.2之前,您無法注入階段偵聽器,但是,我使用此服務器在JSF 2.2.12上。更重要的是,我可以在GlassFish4服務器上部署這個確切的代碼,它可以工作。我在做什麼與Wildfly錯誤?
只要您使用的是Java EE API,它適用於Glassfish,我不認爲任何人都可以說您正在做一些「錯誤」的事情Wildfly。如果您可以通過_truly minimal_示例(一個具有單個EJB和一個PhaseListener的新項目)重現問題,那麼您可能會報告有關WildFly項目的錯誤。只是一個建議。 – DavidS
要排除其中一個,如果使用'@ Inject'而不是'@ EJB',會出現什麼情況? – BalusC