# JPA: NotSerializableException



## boxi (20. Sep 2007)

Das Problem tritt auf wenn ich in einer JSF seite eine Aktion auslöse. Dabei ergibt sich volgende Fehlermeldung:

```
ERROR [[Faces Servlet]] Servlet.service() for servlet Faces Servlet threw exception
javax.faces.FacesException: Error calling action method of component with id _idJsp1:createClient
Caused by: javax.faces.el.EvaluationException: Exception while invoking expression #{createclient.create}
Caused by: java.lang.reflect.UndeclaredThrowableException
Caused by: java.io.NotSerializableException: ch.boxi.privatebank.bookkeeping.Client
.
.
.
```
Ich denke aber der eigentliche Fehler ist der letzte... und somit in der JPA

Ich arbeite unter Linux Jboss

Hier der Code der Classe Client

```
@Entity
@Table( name="client")
public class Client {
	@Id	
	@GeneratedValue private long id;
	@Column	private String title;
	@Column private String description; 
	@OneToMany( mappedBy="client")
	@Column private Set<Period> periods;
	@ManyToMany(mappedBy="clients") private Collection<User> users;

	// geters und seters
	// andere Methoden
}
```

Der User Code sollte soweit in ordnung sein. Denn dieses Object wird bereits aus der Datenbank gelesen.

Auch ja die Zeile wo der Fehler vermeidlich auftritt ist in Zeile 9:

```
public Client createClient(String title, String desc, User user) {
		Client c = new Client();
		user = manager.merge(user);
		c.setDescription(desc);
		c.setTitle(title);
		c.addUser(user);
		user.add(c);
		
		manager.persist(c);
		return c;
	}
```

Das DB Schema würde durch die JPA erstellt, also kann es hier ja eigentlich keine Fehler geben.

Ich weiss jetzt echt nicht mehr weiter!


----------



## maki (20. Sep 2007)

Ist Client serialisierbar?


----------



## boxi (20. Sep 2007)

Das wars, danke... aber ich dachte das ist für EJB 3.0 nicht nötig

oder ist das nur weil ich bei createClient einen Client zurückgebe... und dieser so serializiert werden muss?


----------



## maki (21. Sep 2007)

Du erzeugst das Objekt im EJB Container und schickst es dann zum Servlet Container (später dann wahrscheinlich wieder zurück).

Immer wenn du Objekte zwischen dem EJB Container und dem Servlet Container transferierst, müssen diese serialisiert werden 

Innere Klassen von diesen Objekten (zB. Comparator Objekte) sollten dann übrigens auch serialisierbar sein.


----------

