2016-05-13 11 views
3

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?

+0

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

+0

Um das eine und andere auszuschließen, was ist, wenn Sie '@ Inject' anstelle von '@ EJB' verwenden? – BalusC

Antwort

1

Die Injektion eines @ EJB in einem JSF PhaseListener auf Wildfly ist augenscheinlich im Moment fehlerhaft. Siehe https://developer.jboss.org/thread/269770 als Referenz.

Wenn ich jedoch die Anmerkung zu @Inject anstelle von @EJB ändern, funktioniert es gut. (Danke an BalusC und die JBoss Forum-Mitwirkenden für diesen Vorschlag)