@EJB in @ViewScoped @ManagedBean verursacht java.io.NotSerializableException

8

Ich habe @EJB in der @ViewScoped-verwalteten Bean gelesen verursacht java.io.NotSerializableException , aber meine Einstellung für das Speichern ist server .

Hier ist was ich habe:

web.xml :

%Vor%

customer.xhtml :

%Vor%

CustomerController.java :

%Vor%

PersonFacade.java :

%Vor%

AbstractFacade.java:

%Vor%

und das ist der Stacktrace:

%Vor%

Ich weiß, dass ich dies umgehen kann, indem ich PersonFacade als transient deklariere und JNDI verwende, um nach der Rekonstruktion eine EJB-Referenz zu erhalten, aber ich mag diesen Ansatz wirklich nicht.

Ist es möglich, dass Glassfish 3.1.1 nicht serialisierbare EJBs bereitstellt? Gibt es eine Möglichkeit, @EJB und @ViewScoped zusammen zu verwenden?

Aktualisierung: Ich habe festgestellt, dass dies ein MyFaces-Problem ist, alles funktioniert gut mit mojarra

    
Michele Mariotti 13.10.2011, 23:33
quelle

2 Antworten

3

:) Ich hatte das gleiche Problem: Ссылка

David Blevins drüben beim Apache TomEE hat mir geholfen, einen Bug und Patch für MyFaces zu loggen. Das Problem wurde generiert Proxy-Klassen sind nicht auf dem Classloader-Pfad für ihre Deserializer.

Eine Umgehungslösung besteht darin, diesen Web-App-Parameter auf "false" zu setzen: org.apache.myfaces.SERIALIZE_STATE_IN_SESSION

    
Jonathan S. Fisher 05.09.2012, 15:35
quelle
7

Ich habe das Problem auch gesehen. Was ich in der Vergangenheit getan habe, ist meine Bohne in ein StateBean zu teilen, das ist @ViewScoped und ein ActionsBean ist @RequestScoped . Das ActionBean wird mit dem StateBean sowie allen EJBs oder nicht serialisierbaren Ressourcen, die auf Objekte zugreifen, injiziert. Im Frontend verwenden Sie% cc_de% für den Zugriff auf Eigenschaften und StateBean für die Ausführung von Aktionen.

Ich würde gerne von jemand anderem hören, der mein "bohnenspaltendes" Muster veraltet machen würde.

Dies ist ein Beispiel für das, was ich tue:

%Vor%

Hinweis ActionsBean ist CustomControllerStateBean und @ViewScoped enthält nur Serializable Objekte.

%Vor%

Hinweis Serializable ist CustomControllerActionsBean und ist NICHT @RequestScoped an enthält nicht Serializable Objekte.

Ihr Front-End wird nicht so aussehen:

%Vor%

Hinweis Serializable wird oben in CustomControllerActionsBean verwendet und p:commandButton wird in CustomControllerStateBean s verwendet.

    
pgreen2 13.04.2012 17:38
quelle