# swing app und hibernate



## ARadauer (16. Jul 2008)

Hallo ich verwenden jetzt das erste mal Hibernate bei einer Swing Desktop Anwendung.

Normalerweise benutzen meine Model Klassen, DAOs mit denen sie Daten laden, speichern usw... Dieses DAOs hohlen sich über einen zentralen Connection Pool eine Connection. Also Connection öffnen, laden, Connection an Pool zurück geben.

Aber wie gehe ich nun mit Hibernate vor. Ich hätte geplant, meine Dao Schicht beizubehalten und darin dann in den jeweiligen Methoden mit Hibernate zb die Daten laden.

ich weiß jetzt zb nicht genau, welchen code ich in diesen Methoden ausführen soll und welchen Code ich nur einmal am Beginn der Anwendung ausführe.


```
public ArrayList datenLaden() {
		AnnotationConfiguration configuration = new AnnotationConfiguration();
		configuration.configure();
		SessionFactory sessionFactory = configuration.buildSessionFactory();
		Session session = sessionFactory.getCurrentSession();
		
		//hier lade ich meine Daten
		
		
		session.close();
		sessionFactory.close();
		//return meine Daten
	}
```

Wie macht man das normalerweise, bleibt die session immer offen?

Wie verhält sich das mit lazy loading?

Danke für die Tipps


----------



## byte (17. Jul 2008)

Die SessionFactory erzeugst Du nur einmal. Diese liefert Dir im laufenden Betrieb dann bei Bedarf eine Sessions. Wie lange Du die Session offen hälst, bleibt im Grunde Dir überlassen. Grundsätzlich sollte sie eher kurzlebig sein. In Webanwendungen ist sie einfach so lange offen, wie der Request dauert. Bei Rich Clients ist das ganze nicht ganz so trivial.

Meine Empfehlung wäre, Hibernate in Kombination mit Spring einzusetzen. Spring bringt Dir nochmal sehr viel Abstraktion hinsichtlich des Session und Transaktions Management. Zudem gibts nützliche Hilfsfunktionen für die DAOs (HibernateTemplate) und sinnvolle Wrapper für die Hibernate-Exceptions (die alleine häufig sehr nichtssagend sind).

Wenn Du Spring nicht einsetzen willst, dann schau Dich im Netz mal um, welche Strategien es hinsichtlich der Sessions bei Rich Clients gibt:
http://www.hibernate.org/333.html


----------



## ARadauer (17. Jul 2008)

> In Webanwendungen ist sie einfach so lange offen, wie der Request dauert. Bei Rich Clients ist das ganze nicht ganz so trivial.


tja das ist genau mein Problem



> Meine Empfehlung wäre, Hibernate in Kombination mit Spring einzusetzen.


ich bin noch am überlegen, mir ist der wirkliche vorteil von depency injection noch nicht ganz klar.
meiner meinung nach flexiblität vs einfachem debugging. aber es reden so viele leute darüber, wahrscheinlich machts sinn und es wird mir sicher klarer wenn ich es einsetze. buch liegt schon zu hause ;-)

danke für die tipps


----------



## tfa (17. Jul 2008)

Einfach mal ausprobieren. Dann wirst du sehen, ob es dir nützt. 
Mit dem Debugging hast du allerdings recht. Da hilft nur ein Mittel: einfach weniger Bugs einbauen


----------



## byte (17. Jul 2008)

Das Debugging der Proxies ist etwas schwieriger, richtig. Aber wenn Du Hibernate benutzt, dann bist Du da eh schon leidgeprüft (PersistentBags sehen auch eklig aus im Debugger *g*). Ausserdem überwiegen die Vorteile von Spring einfach. Die Möglichkeiten durch DI und vor allem durch AOP sind echt fantastisch.
Aber das schöne an Spring ist, dass Du es auch ganz punktuell anwenden kannst. In Deinem Fall kannst Du Spring z.B. nur für die Persistenzschicht einsetzen. In diesem Fall lässt Du durch DI nur Deine DAOs (und bei Bedarf Services) erzeugen. Der Rest der Anwendung braucht von Spring nichts zu wissen.


----------



## maki (17. Jul 2008)

Debugging nutze ich so gut wie gar nicht, logging & Unittests machen es (fast) überflüssig, nebenbei ist Debuggen häufig verwirrender als den Fehler im Log zu Tracen.


----------



## byte (17. Jul 2008)

Also bei Swing Clients kann man imo ziemlich gut debuggen, zumindest wenn nicht jedes zweite Objekt geproxyt ist. Aber das Thema hatten wir schonmal.


----------

