Ich arbeite mit einem Wildfly 10-Server und habe Probleme mit einem JSF-Phasen-Listener, der kein EJB erhält. Hier ist mein Testcode, den ich nicht richtig zur Arbeit bringen kann.EJB kann nicht in den JSF-Phasen-Listener injiziert werden
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;
}
}
Wenn ich die bjb.callMe();
Zeilen aus kommentieren, arbeitet das Programm wie normal. Damit bekomme ich eine NullPointerException. Ich bin in der Lage, dieses EJB zu injizieren und es in einer Backbohne @RequestScoped
zu verwenden.
Ich habe gelernt, dass vor JSF 2.2, konnten Sie nicht in einen Phasenlistener injizieren, aber ich bin auf JSF 2.2.12 mit diesem Server. Was mehr ist, ich kann diesen genauen Code auf einem Glassfish4 Server bereitstellen und es funktioniert. Was mache ich falsch mit Wildfly?
Solange Sie die Java EE API verwenden und es auf Glassfish funktioniert, kann ich nicht sagen, dass irgendjemand sagen kann, dass Sie etwas "falsch" machen Wildfliege. Wenn Sie das Problem mit einem _truly minimal_-Beispiel (ein neues Projekt mit einem einzelnen EJB und einem einzelnen PhaseListener) reproduzieren können, melden Sie möglicherweise einen Fehler im WildFly-Projekt. Nur ein Vorschlag. – DavidS
Um das eine und andere auszuschließen, was ist, wenn Sie '@ Inject' anstelle von '@ EJB' verwenden? – BalusC