2016-05-13 53 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和一个PhaseListener的新项目)重现问题,那么您可能会报告有关WildFly项目的错误。只是一个建议。 – DavidS

+0

要排除其中一个,如果使用'@ Inject'而不是'@ EJB',会出现什么情况? – BalusC

回答

1

在蜻蜓的JSF PhaseListener中注入@EJB显然目前被窃听。请参阅https://developer.jboss.org/thread/269770以供参考。

但是,如果我将注释更改为@Inject而不是@EJB,它的工作原理很好。 (感谢BalusC和JBoss论坛贡献者的建议)