Daniel Thoma: Sessions und Serialisierbarkeit

Beitrag lesen

Hallo Biesterfeld,

Also A und B teilen sich gleiche Instanzen von P und R. Deswegen kann ich eben nicht einfach A und B serialisierbar machen, wenn Sichergestellt sein muss, dass sie nach dem Deserialisieren auf gleiche Objekte zugreifen.

Doch das solltest Du können. Wenn Du zwei Objekte hast, die identische Objekte referenzieren, dann wird diese Struktur nach dem deserialisieren auch wieder hergestellt. Vorraussetzung ist natürlich, dass die Objekte gemeinsam serialisiert werden. Ich würde aber erwarten, dass das für die in einer Session gespeicherten Objekte gilt. Eine andere Implementierung würde ja viele Datenstrukturen zerstören.

Das muss ich mir nochmal anschauen. Vielleicht könnte das helfen. Meine letzte Idee war jetzt um A und B einen Wrapper zu bauen der Serialisierbar ist und somit wenigstens das Problem der gemeinsamen Objekte umgeht. Aber dass die einzelnen Felder der enthaltenen Klassen nicht final sein dürfen hör ich jetzt zum ersten mal und daran wird wohl so einiges scheitern ...

Das liegt schlicht daran, dass Java das Objekt erst instanzieren muss und anschließend die Eigenschaften initialisiert. Sind sie final, geht das nicht mehr.
Mittels writeReplace und readResolve solltest Du das umgehen können, weil Du dann das zu erzeugende Objekt in readResolve selbst instanzierst.
Aber müssen diese Eigenschaften denn unbedingt final sein?

Grüße

Daniel