Я работаю с сервером 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 и одним фазовым листером), вы можете сообщить об ошибке в проекте WildFly. Просто предложение. – DavidS
Чтобы исключить одно и другое, что, если вы используете '@ Inject' вместо' @ EJB'? – BalusC