java.io.NotSerializableException für domain Objekte - Design Problem?

lieschen89

Aktives Mitglied
Hi,

ich habe meine Beans Serializable gemacht. Das Problem im Moment ist denke ich, dass ich in meinem Beans neben int und String Variablen auch meine Domain-Objekte verwende.

Am Beispiel Auto:
In meiner AutoBean habe ich als Variable resultList eine Liste von Autos (List<..domain.Auto>) oder z.B. auch eine Variable marke vom Typ ...domain.Marke.

Diese Domain Objekte sind nicht Serializable. Nun bekomme ich den Fehler:

Code:
SCHWERWIEGEND: IOException while loading persisted sessions: java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: ..domain.Auto
java.io.WriteAbortedException: writing aborted; java.io.NotSerializableException: ..domain.Auto

Wenn ich richtig liege, dann kommt dass daher, da versucht wird alle in meiner Bean referenzierte Objekte wegen der Serialisierung zu speichern.

Frage:

Da ich aber noch keinen serialisierten Domain-Objekte gesehen habe, stellt sich mir die Frage ob das oben stehende mit den Refenzierten Domain-Objekten in den Beans ein 'schhlechtes Design oder Architektur' ist. Mach man das nicht so?

Wie soll ich denn sonst die Daten da hin und her übertragen?


Das mit der Marke könnte ich ja umgehen, indem ich einfach nur die id speicher als int.
(Aber selbst das finde ich umständlich für die jsf-Seiten, weil wenn ich dann die Marke eines Autos ausgeben möchte, bekomme ich immer nur die Id aus der Bean und muss mir den Namen immer erst
umständlich besorgen. Das finde ich eigenlich schon unschön. Vor allem weil in den Domain Objekten, wo das Mapping zur DB stattfindet, da auch ganz normal die Objekte und nicht irgendwelche ids drinstehen.)
 

sence

Bekanntes Mitglied
Wenn du hibernate verwendest, müssen die Objekte schon serialisierend implementierent aufgebaut sein.

Eine durch die Referenzierung von Objekten ausgestattene Bean muss vollständig serialisiebar sein, damit der Server den States schreiben kann.
Wird Session Replikation verwendet, würdest du spätestens dann an das Problem erneut stoßen

Chapter 2. Mapping Entities

VG
 

lieschen89

Aktives Mitglied
ok.
Aber das zieht sich ja dann komplett durch dass die Controller und Services auch serialisierbar gemacht werde müssen oder nicht? Und da die Services die Daos verwenden die dann auch? Und damit sind dann alle Klassen meiner Anwendung serialisierbar? Das passt dann?
Ich mein iwie ist mir schon klar, dass ich die ganzen Referenzen brauche, aber iwie kommt mir das komisch vor und bevor ich da totalen Mist hin programmier wollte ich sicher gehen.


Vor allem bekomme ich jetzt immer:

Code:
java.io.NotSerializableException: org.springframework.orm.hibernate3.HibernateTemplate

Den einzigen Lösungsvorschlag den ich gefunden habe, war das hibernateTemplate als @Transient zu annotieren. Allerdings hilft das nichts.
 
Zuletzt bearbeitet:

Nogothrim

Aktives Mitglied
Ist es denn überhaupt gewollt, ganze Sessions zu persistieren? Sieht so aus, als wenn der Fehler dabei auftritt, z.B. beim Server runterfahren.
 

lieschen89

Aktives Mitglied
Der Fehler tritt immer beim Starten vo Tomcat auf.

Ja, wie gesagt, denke auch nicht dass ich das brauche. Der größte Teil ist einfach ne Website mit festen Daten.
Das einzige wo Logik dahinter steckt ist ne kleine Suche und ne Art Berechnung (ein Formular mit Eingabefeld, Button und Ausgabe). Beides Mal wird nach dem Klick auf einen Button das Ergebnis angezeigt und fertig. Wenn man wieder weg navigiert sind die Daten weg (Request Scope?).
Also denke ich nicht dass ich da irgend etwas speichern muss/sollte (?)
 

sence

Bekanntes Mitglied
für die kleine Anwendung, brauchst du es dann nicht, das ist richtig.
Verwendest du irgendwann Session Replikation, hibernate, wirst du dann darauf ausbauen müssen.

bin zu Begin von einer größeren Anwendung ausgegangen.
requestscope: für einmal einmal aktitionen.
viewscope: alle States der Bean werden beibehalten, solange der User auf der View ist und nicht weg navigiert.
 

lieschen89

Aktives Mitglied
Session Replikation? Also ich denke nicht, zumindest nicht gewollt. Wüsste auch gar nicht wie das geht.

für die kleine Anwendung, brauchst du es dann nicht, das ist richtig.

Das heißt jetzt was wegen meinen serialisierten Objekten?
Soll ich die Beans einfach nicht serialisiert machen?
 

stg

Top Contributor
Wie sieht die "domain" denn aus und wieso ist sie nicht serialisierbar?
Welchen Zweck erfüllt sie in deiner Applikation?
Sollen (oder können) bestimmte Typen nicht serialisiert werden, so kann man sie mit dem modiefier "transient" versehen.
Eventuell ist es in deinem Fall auch möglich mit DI zu arbeiten, etwa über Annotationen oder du lässt dir über eine Factory-Klasse bei jedem Aufruf ein passendes domain-Objekt erzeugen, falls noch keines referenziert wird.
 

lieschen89

Aktives Mitglied
Wie sieht die "domain" denn aus und wieso ist sie nicht serialisierbar?
Welchen Zweck erfüllt sie in deiner Applikation?

Die Domain-Objekte sind, ja ähm, sind die Objekte mit denen eben gearbeitet wird. In diesen ist das Hibernate-Mappig (@Entity @Table....) und meine Services erstellen Neue, fragen nach irgendwelchen Kirterien welche ab auf Basis dessen dann Berechnungen erfolgen etc.
Um eben am Beispiel Auto zu bleiben. Wenn ein User in der Oberfläche alle Autos sehen möchte dann wird das durch ne Abfrage realisiert auf die DB welche eine List<Auto> (Auto = Domain-Objekt) zurückgibt und durch die Service und Controller Schicht zur Bean hochreicht, wo dann eben die Eigenschaften aus dem Objekt über die Attribute rausgeholt und angezeigt wird (#{auto.name})

Serialisierbar kann ich die Domain-Objekte schon machen (Wollte nur wissen ob das üblich ist, kam mir iwie komisch vor, bzw. ob das in meinem Fall Sinn macht). Problem sind nur die Beans. Wenn ich die serialisierbar mache, dann muss ich quasi auch die Controller serlialisierbar machen, deswegen dann die Services und deswegen dann die Daos und hier tritt die Schwiergkeit auf, eben:

Code:
java.io.NotSerializableException: org.springframework.orm.hibernate3.HibernateTemplate

Habs schon versucht als Transient zu markieren. Fehler kommt aber trotzdem.
Beispiel:

Java:
@SuppressWarnings("serial")
public class MeinDao implements Serializable {

	@Transient 
	private HibernateTemplate hibernateTemplate;

	
	...
	 
	public void setHibernateTemplate(HibernateTemplate hibernateTemplate) {
		this.hibernateTemplate = hibernateTemplate;
	}		
}

(Hab @Transient auch nur an der Variablen oder nur am setter ausprobiert oder an beidem ausporbiert)

Eventuell ist es in deinem Fall auch möglich mit DI zu arbeiten

Eigentlich lasse ich mir alles 'injecten' über Spring (wie oben im Dao auch das hibernateTemplate).
 
N

nillehammer

Gast
1. Denkfehler
Annotation
Code:
@Transient
ist was anderes als das Java-Schlüsselwort
Code:
transient
!
Code:
@Transient
sagt JPA-Providern, dass das Feld nicht persistent sein soll. Das Java Schlüsselwort
Code:
transient
sagt Java, dass ein Feld nicht serialisiert werden soll. Das sind zwei verschiedene Paar Schuhe. Du müsstest hier zweiteres verwenden.
2. Designfehler
Services haben nichts in Deinen Domain-Objects verloren. Die sollten nur mehr oder minder dumme Datenhaltungsobjekte sein.
 
Zuletzt bearbeitet von einem Moderator:

lieschen89

Aktives Mitglied
Annotation @Transient ist was anderes als das Java-Schlüsselwort transient

Ah, hab schon gedacht, iwie ist das komisch, da ich nur die Annotation bisher kannte und auch nur im Zusammenhang dass das Feld dann eben nicht persistiert werden soll.
Also quasi

Code:
private transient  HibernateTemplate hibernateTemplate;

Jetzt kommt der Fehler auch nicht mehr. Super, danke.

Services haben nichts in Deinen Domain-Objects verloren. Die sollten nur mehr oder minder dumme Datenhaltungsobjekte sein.

Hab ich mich irgendwie falsch ausgedrückt oder hab ich dich falsch verstanden? Ich hab IN meinen Domain-Objekte keine Services. Aber die Services benutzen die Domain-Objekte.
Also eig. nicht nur die Services, eig. in der ganzen Anwendung werden die halt hin und her gereicht.
(Am Beipiel 'Erstellen': Bean nimmt Eingabewerte entgegen, gibt die an Controller weiter. Der erstellt ein neues Auto-Domain-Objekt und füllt es mit den Werten, recht dieses Domain-Objekt dem Service weiter. Der Service reicht es dem Dao weiter und das speichert dann das Auto.)
 
Zuletzt bearbeitet:
N

nillehammer

Gast
Hab ich mich irgendwie falsch ausgedrückt oder hab ich dich falsch verstanden? Ich hab IN meinen Domain-Objekte keine Services. Aber die Services benutzen die Domain-Objekte.
Das wäre korrekt so.

Aber die von Dir gezeigten Exceptions und Beispielcode legen den Verdacht nahe, dass es anders ist. Warum hättest Du sonst Daos Serializable machen müsssen?
 

lieschen89

Aktives Mitglied
Warum hättest Du sonst Daos Serializable machen müsssen?

Weil die Services die Daos halten.

Serialisierbar kann ich die Domain-Objekte schon machen (Wollte nur wissen ob das üblich ist, kam mir iwie komisch vor, bzw. ob das in meinem Fall Sinn macht).
Problem sind nur die Beans. Wenn ich die serialisierbar mache, dann muss ich quasi auch die Controller serlialisierbar machen, deswegen dann die Services und deswegen dann die Daos und hier tritt die Schwiergkeit auf
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
LimDul Komplexe Generierung von Java-Klassen aus WSDL Web Tier 1
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
platofan23 Java Login Überprüfung ohne Srciptlets in der JSP Web Tier 4
Dimax JSP Progress Bar in JSP nur mit Java Web Tier 4
S Einträge aus Datenbank einzeln darstellen (JSP, JAVA, HTML) Web Tier 9
R JavaScript für Java Enterprise Entwickler Web Tier 1
O JSF Java Unsigned Applet PrivilegedActionException Problem Web Tier 2
S JSP Hm... Vorlage für Java Basierende Webseite? Web Tier 0
S Button klick soll Java methode aufrufen Web Tier 2
R Tomcat - java.lang.OutOfMemoryError: PermGen space Web Tier 0
F JSP jSP Datei mit normalem Java Programm auslesen? Web Tier 5
T Spark Java Web Framework Web Tier 0
G Probleme mit Java + Tomcat | Cannot switch on a value of type String for source level below 1.7 Web Tier 8
S java.lang.ExceptionInInitializerError: Wieso??? Web Tier 3
N JSP Free Webhoster Java Backend? PHP? Web Tier 1
D Java EE Servlet login Problem Web Tier 1
L Servlet Java Entschlüsselungsprogramm in Webapplikation einbinden Web Tier 0
Streeber java.lang.NoClassDefFoundError: org/sqlite/NativeDB Web Tier 0
M GWT - Externe Java Libs auf Server Seite - zB. JDBC Web Tier 6
S Java Bean und Java Servlet Web Tier 2
H MVC in Java pur / Controller als Instanz? / Theorie! Web Tier 4
T Einsteigerfragen zu Servlets/Webprogrammierung mit Java Web Tier 11
J Übergabe von Parameter aus JSP an Java Web Tier 2
nrg Java-Code in Taglib wird nicht richtig ausgeführt. Web Tier 7
D JSF Überprüfen der Session ID in JSF und JAVA Web Tier 9
H JSP, Eclipse, Tomcat - Java Klasse wird nicht gefunden Web Tier 8
B JSF Mojarra 2.1.5: java.lang.IllegalStateException: Cannot create a session after the response has been Web Tier 7
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
J JSF Java Beans Konventionen Web Tier 2
P Blog in Java/JSP Web Tier 5
S Per JavaScript Java ansteuern - Welche Technik? Web Tier 2
T Seam-Komponenten oder Java Bean soll direkt nach Appserver-Start "leben" Web Tier 4
B Thread start bei Java Web Anwendung Web Tier 6
M Suche Java Framework Web Tier 2
B Tomcat 6 ergibt Fehler - java.net.SocketException Web Tier 2
G Probleme mit EclipseLink und Java.util.Date Web Tier 3
ruutaiokwu js kalendar, der mit java.text.SimpleDateFormat kombatibel ist... Web Tier 4
B Java EE 6 Problem (EL) Web Tier 4
F Migration eines CMS von PHP nach JAVA Web Tier 3
R GWT 2.1.1 mit Java 1.6 statt 1.5 Web Tier 8
W JSP - Attribut-Werte aus JAVA-Klasse ? Web Tier 8
T Werte aus java Klasse in jsp nutzen Web Tier 5
N java.lang.NoClassDefFoundError: org/jdom/JDOMException Web Tier 3
M JSP Ausgabe von Java-Objekten Web Tier 7
D JSP, Java Applets einbinden Web Tier 2
LadyMilka java.lang.NumberFormatException: For input string: ... Web Tier 5
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
K Bilder in Java-Webapplikationen Web Tier 12
S Java Servlet Content Type Web Tier 3
K Analye einer Seite (Java, JSP, ...) Web Tier 12
J rich:modalpanel vom java-code aus öffnen und schliessen Web Tier 2
S Expression Language in Java Web Tier 13
A Ssh connection mit java jsch? Web Tier 2
W Java code aus JSP-File durch JSTL code ersetzen Web Tier 8
M Body onUnload Java Methode aufrufen Web Tier 13
F Frage zu Java Beans Web Tier 17
M Java Framework für größere Projekte verwenden Web Tier 5
U access denied bei Datei Schreiben mit Java unter Linux trotz gesetzter Rechte Web Tier 2
P Java-Program -> Web Programm Web Tier 6
F Java Applets in html einbinden Web Tier 10
A SSL-Zertifikat in Java-Webanwendungen laden Web Tier 4
ruutaiokwu Wert hinter JSP-Tag nach Java-String in Skriptlet Web Tier 4
N java bean in eclipse Web Tier 6
S Java Code in JSF Web Tier 10
N Servlet und java.lang.NoClassDefFoundError Web Tier 4
D request.contextPath in Java-Klasse ausführen Web Tier 5
T In einem Struts Tag Werte mit Java einfügen Web Tier 2
G [JAVA / JSP] ArrayList in JSTL foreach verarbeiten Web Tier 4
G CSV-Anbindung an Java Web Tier 2
G Java Server Face Performancelastig? Web Tier 2
H Java Servlet und HTML Form Web Tier 3
U Java Application auf Tomcat Web Tier 5
G Validierung mit Java Server Faces Web Tier 4
A JSF Suche Beispiel für Primefaces Tree als Navigation Web Tier 3
S Seite nur aufrufbar machen für eingeloggte User Web Tier 1
G JSF Webanwendung Editor für JSON gesucht Web Tier 1
J Funktion für AJAX - Problem mit Return Web Tier 14
D Servlet 1 Servlet für alles - Wie Cookies per Ajax? Web Tier 1
R JSF Zugriff für Helpdesk-Mitarbeiter Web Tier 15
I Autocomplete Google Maps für JSF Web Tier 0
W Servlet SPEICHERN UNTER-Dialog für mehrere Dateien Web Tier 4
M JSF Framework für User Management etc. Web Tier 0
D Welches Webframework für REST geeignet Web Tier 1
M Converter für SelectOneMenu Web Tier 3
J eigene taglib für jsf 2.0 schreiben Web Tier 21
S Empfehlung für stateless Webframework Web Tier 2
J mögliche 'eigene' Konfigurationen für die Web.XML auflisten lassen Web Tier 4
H Singleton für In-Memory-Caching in WebApp Web Tier 4
F Wo und wie Daten die für alle Benutzer bestimmt sind verwalten Web Tier 4
S beste Preis/Leistung für Server Web Tier 3
H Relativer Pfad für XML-Datei in JSP-Anwendung Web Tier 3
S Welcher ansatz für Web Application + Web Service Web Tier 5
M JSF Converter für String to List<String> Web Tier 2
R Servlet Resource laden für SMTP - Session Web Tier 4
T JSF Eigener Converter wird nur für Eingabekomponenten aufgerufen? Web Tier 3
O Welche JSF Implementation ist am besten für mich geeignet ? Web Tier 3
T Sprachenauswahl für Projekt Web Tier 3
M JSF Komponentenframework für Web/JSF? Web Tier 7
M JSF Simple Testklasse für Button - MethodNotFoundException? Web Tier 6
B JSF JSF1.1 @Tomcat 5.5 für ein neues Projekt Web Tier 18

Ähnliche Java Themen

Neue Themen


Oben