JSF - Session-scoped managed bean nicht über Abhängigkeiten re-injiziert Sitzung der Deserialisierung

Ich bin mir nicht sicher, ob das was ich mache falsch ist, oder ob ich einfach nur verpasst, eine Anmerkung oder configuration item irgendwo. Hier ist die situation:

Ich habe eine JSF-Anwendung mit einer session-scoped bean mit dem Namen SessionData. Diese Bohne hat ein application-scoped bean-Referenz (Typ ApplicationData) injiziert Zeitpunkt der Erstellung. Dies funktioniert ok, wenn die Sitzung zum ersten mal erstellt. Die dependency injection ist fertig mit <managed-bean> Elemente in der faces-config.xml Datei wie hier gezeigt:

<managed-bean>
    <managed-bean-name>sessionData</managed-bean-name>
    <managed-bean-class>my.package.SessionData</managed-bean-class>
    <managed-bean-scope>session</managed-bean-scope>
    <managed-property>
        <property-name>applicationData</property-name>
        <property-class>my.package.ApplicationData</property-class>
        <value>#{applicationData}</value>
    </managed-property>
</managed-bean>
<managed-bean>
    <managed-bean-name>applicationData</managed-bean-name>
    <managed-bean-class>my.package.ApplicationData</managed-bean-class>
    <managed-bean-scope>application</managed-bean-scope>
</managed-bean>

Weil es nicht sinnvoll ist, haben meine SessionData Objekt sind die ApplicationData Objekt, wenn es serialisiert, ich habe markiert die ApplicationData Referenz als transient in meinem SessionData Objekt:

transient private ApplicationData applicationData;

Alles ist gut, bis der web-Anwendung wird beendet (in meinem Tomcat 6.x-container) und die Sitzungen serialisiert werden. Wenn ich die Anwendung neu starten und die Sitzungen sind deserialisiert, mein Verweis auf ApplicationData ist nicht re-injiziert durch JSF. Ich weiß, dass der Deserialisierung ist eigentlich verlassen transient-Felder ohne Wert. Gibt es eine Möglichkeit zu signalisieren, JSF, dass diese session-scoped Objekt erfordert seine Abhängigkeiten festgelegt werden, wieder nach der Deserialisierung?

Bin ich mit MyFaces JSF 1.2 und Tomcat 6.0.26 als meine web application container.

  • Es wurde vorgeschlagen, dass ich liefern eine readObject () - Methode, und legen Sie manuell das ApplicationData-Objekt dort während der Deserialisierung mithilfe der FacesContext. Ich glaube nicht, dass das funktionieren wird, da der FacesContext ist nur während der Lebensdauer einer Anfrage. Die Deserialisierung geschieht beim Start der Anwendung.
  • richtig, das ist, warum ich gelöscht meine Antwort. Es erscheint eher kompliziert (daher +1 für die Frage)
InformationsquelleAutor Jim Tough | 2010-09-23
Schreibe einen Kommentar