# Hibernate Sessionmanagement



## DamienX (12. Apr 2009)

Hallo zusammen,

habe mich die letzten Tage in Hibernate eingearbeitet und bin sehr begeistert.
Eine paar Fragen habe ich jedoch zu den Sessions. 

Bei gepoolten Verbindung via c3pO werden mehrere Verbindungen aufgebaut.
Holen sich die Sessions dann offene Verbindungen oder sind diese praktisch
per Session gebunden? 

Ich möchte Hibernate Serverseitig für den Zugriff zu einer MySql Datenbank benutzen.
Dabei werden mehrere Threads hin und wieder von der Datenbank lesen, schreiben etc.

Nun möchte ich wissen wie ich das am elegantesten löse. Die Frage stellt sich mir
seit ich einen Artikel darüber gelesen habe dass Sessions bestimmte Daten nicht mehr
freigeben und sich immer weiter aufblähen. Der artikel ist von 2007 womit es sich
durchaus um ein Problem handeln könnte das nicht mehr existiert =)

Wie teuer ist es sich eine Session aus der Factory zu holen?
Für mich wäre es logisch das Threads sich eine Session holen,
die Daten manipulieren o. ä. und dann die Session wieder freigeben. Oder
ist es sinnvoller dem Thread gleich über die ganze Laufzeit eine Session bereitzustellen?
Oder die letzte mir erdenkliche Möglichkeit: Ist es sinnvoll eine Session via Spring zu 
injezieren?

Wie praktiziert ihr das?

Mfg Alex


----------



## KlinCh (13. Apr 2009)

Hi,
Hab mich selbst erst seit ein paar tagen mit Hibernate beschaefftigt.(Mithilfe >>Praxisbuch Hibernate<<(Galileocomputing)). Der Autor schreibt, dass er meist die loesung mit kurzen sessions bevorzugt, da das erzeugen von session kaum etwas kostet.

Kann es jetzt allerdings (noch) nicht aus eigener Erfahrung sagen.


----------



## void (14. Apr 2009)

DamienX hat gesagt.:


> Wie teuer ist es sich eine Session aus der Factory zu holen?
> Für mich wäre es logisch das Threads sich eine Session holen,
> die Daten manipulieren o. ä. und dann die Session wieder freigeben. Oder
> ist es sinnvoller dem Thread gleich über die ganze Laufzeit eine Session bereitzustellen?
> ...



Hibernate-Sessions sollten möglichst schnell wieder geschlossen werden. Ein klassischer Ansatz bei Webservern ist ein OpenSessionInViewFilter der eine Session öffnet sobald ein Request hereinkommt und die Session wieder schließt wenn der Response gesendet wurde.

Hibernate und Spring sind auf jeden Fall eine sinnvolle Kombination, da Spring bereits viele Hilfsklassen für Hibernate mitliefert, z.B. die Klasse HibernateTemplate.


----------



## byte (14. Apr 2009)

HibernateTemplate braucht man seit Hibernate 3.2 nicht mehr zu verwenden (siehe hier).


----------

