/ / Jetty Maven-Plugin (Steg: Laufziel) + CDI + JSF 2.2 schweißen = NPE auf ViewScoped-Bohnen - Maven, JSF, Steg, CDI, Schweißen

Jetty Maven Plugin (Anlegesteg: Lauf Ziel) + Weld CDI + JSF 2.2 = NPE auf ViewScoped Bohnen - Maven, JSF, Anlegesteg, Cdi, Schweißen

Verwenden der folgenden (aktuellen) Komponenten in der Webanwendung:

Jetty Maven Plugin 9.2.6.v20141205

Schweiß CDI 2.2.9.Final

Mojarra JSF 2.2.10

Die web.xml der App enthält die folgenden Listener:

org.jboss.weld.environment.servlet.BeanManagerResourceBindingListener
com.sun.faces.config.ConfigureListener

Der erste Listener registriert BeanManager bei JNDI. Der zweite Listener initialisiert JSF und sucht im JNDI nach BeanManager.

Dieses Setup funktioniert einwandfrei, wenn das Jetty Maven Plugin mit dem Ziel "jetty: run-war" ausgeführt wird oder wenn die Anwendung als eigenständige Anwendung mit eingebettetem Jetty ausgeführt wird.

Wenn Sie es jedoch mit dem Ziel "jetty: run" ausführen, ist der im ersten Listener registrierte BeanManager in der JSF nicht sichtbar, was zu NPEs auf den ViewScoped-Beans führt.

Dies scheint mir ein Umfangs- oder Sichtbarkeitsproblem zu sein, aber ich kann das nicht herausfinden - was ist der Unterschied zwischen Anlegestelle: Laufen und Anlegestelle: Krieg führen.

Ich habe versucht, "resource-env-ref" -Einträge in die web.xml einzufügen und den BeanManager in verschiedenen Jetty-xml-Dateien (jetty.xml, jetty-env.xml, jetty-context.xml) zu erstellen, aber dies ist nicht der Fall etwas ändern.

AKTUALISIEREN:

NPE tritt auf, wenn die Sitzung ungültig wird. Da im JSF kein BeanManager registriert ist, können die ViewScoped-Beans nicht zerstört werden. Siehe unten Stack-Trace:

Auslöser: java.lang.NullPointerException um com.sun.faces.application.view.ViewScopeContextManager.destroyBeans (ViewScopeContextManager.java:171) beim com.sun.faces.application.view.ViewScopeContextManager.sessionDestroyed (ViewScopeContextManager.java:339) beim com.sun.faces.application.view.ViewScopeManager.sessionDestroyed (ViewScopeManager.java:369) beim com.sun.faces.application.WebappLifecycleListener.sessionDestroyed (WebappLifecycleListener.java:181) beim com.sun.faces.config.ConfigureListener.sessionDestroyed (ConfigureListener.java:399) beim org.eclipse.jetty.server.session.AbstractSessionManager.removeSession (AbstractSessionManager.java:772) beim org.eclipse.jetty.server.session.AbstractSession.invalidate (AbstractSession.java:326) beim com.sun.faces.context.ExternalContextImpl.invalidateSession (ExternalContextImpl.java:783)

Antworten:

0 für die Antwort № 1

Dimitri hat einen Fehler im Stegprojekt gemeldet: https://bugs.eclipse.org/bugs/show_bug.cgi?id=462179

Der Fehler enthält eine vollständige Beschreibung der Ursachevon dem Problem. Kurz gesagt, die Art und Weise, wie Weld den BeanManager JSF zur Verfügung stellt, funktioniert nicht mit nicht zusammengebauten Webapps (was bei mvn jetty: run der Fall ist), sondern nur mit War-Dateien (dh mvn jetty: run-war).

Jan