2016-05-13 1 views
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?

+0

Пока вы используете Java EE API, и он работает на Glassfish, я не думаю, что кто-то может сказать, что вы делаете что-то «неправильное» на Wildfly. Если вы можете воспроизвести проблему с примером _truly minimal_ (новый проект с одним EJB и одним фазовым листером), вы можете сообщить об ошибке в проекте WildFly. Просто предложение. – DavidS

+0

Чтобы исключить одно и другое, что, если вы используете '@ Inject' вместо' @ EJB'? – BalusC

ответ

1

Инъекция @EJB в JSF PhaseListener на Wildfly, по-видимому, прослушивается на данный момент. См. https://developer.jboss.org/thread/269770 для справки.

Однако, если я изменю аннотацию на @Inject вместо @EJB, она работает нормально. (Спасибо BalusC и участникам форума JBoss за это предложение)

Смежные вопросы