2016-05-13 28 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論壇貢獻者的建議)