# Objekt geht bei request verloren



## DaKo (26. Nov 2007)

Morgen zusammen,

da mir langsam die Ideen ausgehen, bin ich für jeden Hinweis dankbar.

Es geht um eine WebApp mit JSF, Spring und Hibernate.

Beim Login wird in einer Bean (scope="session") ein User-Objekt abgelegt. Dieses User-Objekt hat u.a. eine Liste. Diese Liste "geht allerdings mit unter verloren". D.h. beim ersten Request ist die Liste vollständig vorhanden, beim zweiten ist sie auf einmal leer.

Es werden weder das User-Objekt, noch die Liste in diesem Objekt überschrieben.

Jemand eine Idee, wo die Liste liegen bleiben könnte?

Gruß
Daniel


----------



## SlaterB (26. Nov 2007)

mache die Liste im User-Objekt private und logge getter + setter mit System.out.println(), 
um von allen Änderungen/ Zugriffen zu erfahren,
teste außerdem mit hashCode()/ anderer unique Id, ob du nicht unterschiedliche User-Objekte untersuchst


----------



## DaKo (26. Nov 2007)

SlaterB hat gesagt.:
			
		

> mache die Liste im User-Objekt private und logge getter + setter mit System.out.println(),
> um von allen Änderungen/ Zugriffen zu erfahren,



Schon passiert ;-)
Daher weiß ich ja, dass sie nicht überschrieben werden.



			
				SlaterB hat gesagt.:
			
		

> teste außerdem mit hashCode()/ anderer unique Id, ob du nicht unterschiedliche User-Objekte untersuchst



(leider) auch schon passiert.

Trotzdem danke, SlaterB.

Weitere Ideen?

Gruß
Daniel


----------



## maki (26. Nov 2007)

Könnte auch an Hibernate liegen, was ist denn mit deinen equals() und hashCode() Methoden?


----------



## DaKo (26. Nov 2007)

Ich wüsste nicht, warum. equals() und hashCode() sind vorhanden und funktionieren.


----------



## ms (26. Nov 2007)

Liegt da ein Hibernate-Objekt in der Session?
Tritt eine Exception auf?
Zeig mal ein bissl Code.

ms


----------



## DaKo (26. Nov 2007)

applicationContext.xml


```
<bean id="containerBean" class="xxx.ContainerBean"
		lazy-init="true" scope="session">
</bean>
```

ContainerBean (gekürzt):

```
public class ContainerBean{

   private User loginUser;

   public User getLoginUser(){ 
      return loginUser;
   }

   public void setLoginUser(User loginUser) {
      this.loginUser = loginUser;
   }
}
```

User (gekürzt):


```
public final class User{

   private Collection<xxx> liste;

   public Collection<xxx> getListe(){ 
      return liste;
   }

   public void setListe(Collection<xxx> liste) {
       this.liste = liste;
   }
}
```

Wenn beim ersten request containerBean.getLoginUser().getListe() aufgerufen wird, hat diese z.B. eine Länge von 5.
Beim zweiten request hat die Liste eine Länge von 0.


----------



## HLX (26. Nov 2007)

Aus dem Code kann man natürlich nichts schließen.

Falls du nicht debuggen kannst, setz mal Ausgaben (System.out) in setListe und getListe, und an verschiedenen Schlüsselstellen in der Anwendung. Dann kannst du eingrenzen, an welcher Stelle das passiert. 

Vielleicht wird die Sitzung irgendwo ungültig gemacht.


----------



## DaKo (26. Nov 2007)

Erstmal danke für eure Unterstützung 

Ursache:
Kollege vergisst Wertübergabe = by refernce


```
List<xxx> neueListe = containerBean.getLoginUser().getListe();

//jetzt passiert ganz viel mit dieser Liste und dann 
//<dramatischen Trommelwirbel einfügen>

neueListe.clear();
```

Dann ist natürlich klar, dass die Liste weg ist 

Nochmal danke an alle.

Gruß
Daniel


----------



## SlaterB (26. Nov 2007)

tztz, das Listen-Objekt ist noch da, nur leer?
solche wichtigen Infos verschweigst du? hat aber auch keiner danach gefragt 

edit: bzw. (ich zumindest) überlesen:
> beim zweiten ist sie auf einmal leer. 
im ersten Post


----------

