-->
These old forums are deprecated now and set to read-only. We are waiting for you on our new forums!
More modern, Discourse-based and with GitHub/Google/Twitter authentication built-in.

All times are UTC - 5 hours [ DST ]



Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 
Author Message
 Post subject: Session Management
PostPosted: Sun Sep 03, 2006 1:36 pm 
Newbie

Joined: Sun Sep 03, 2006 1:28 pm
Posts: 5
Hallo,

ich komme bei einem Problem einfach nicht mehr weiter. Die Lösung dazu ist
bestimmt recht einfach oder sehe ich den Wald vor lauter Bäumen nicht mehr?
Naja egal,...
SessionFactory factory;

1.) Wo liegt der Unterschied zwischen factory.getCurrentSession() und
factory.openSession()?
Denn Erklärungen aus der API entnehme ich, dass bei getCurrentSession eine Session aus dem Pool entnohmen wird und bei openSession eine neue Session angelegt wird. Lege ich damit richtig?

2.) Wenn ja, muss ich nach dem gebrauchen der Session aus getCurrentSession danach schließen bzw. darf ich diese danach schließen?

3.) Ist eine org.hibernate.Session Thread sicher?


MfG,
Thomas


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 04, 2006 10:02 am 
Newbie

Joined: Mon Sep 04, 2006 9:03 am
Posts: 9
Hallo Enzei,

zu 1) ja. getCurrentSession() ist neu in Hibernate3 und soll das OneSessionPerThread Pattern unterstützen. Ich benutze dafür Spring.

zu 2) Kann ich nicht genau sagen, weil ich getCurrentSession() selbst nicht benutze. Aber soviel ich weiß bekommst du da eine verwaltete Session, die an irgendeinen Context (z.B. Thread) gebunden ist. Somit sollst du die eher nicht schließen.

zu 3) Nein definitiv nicht. Das steht auch irgendwo in der Doku. So eine Session sollte eher kurz offen sein und auf jeden Fall nur von einem Thread benutzt werden.

Warum willst du getCurrentSession() benutzen? Wiegesagt gabs das vor Hibernate3 noch gar nicht. Verwirrt vielleicht nur. Schau dir mal Spring (www.springframework.org) an, falls du das noch nicht kennst.

Viele Grüße

Alex


Top
 Profile  
 
 Post subject:
PostPosted: Mon Sep 04, 2006 10:14 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Also ich kann nur sagen, dass getCurrentSession() nicht erst in Hibernate3 hinzugekommen ist. Ich habe bereits unter Hibernate2 mit getCurrentSession() gearbeitet. Es ist in sofern nützlich wenn Du mit einem ConnectionPool arbeitest, da Dir immer einer der freien Connections zurückgegeben wird und bei SessionFactory.close() wird sie wieder dem Pool zurückgegeben.


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 05, 2006 2:42 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Quote:
Also ich kann nur sagen, dass getCurrentSession() nicht erst in Hibernate3 hinzugekommen ist. Ich habe bereits unter Hibernate2 mit getCurrentSession() gearbeitet. Es ist in sofern nützlich wenn Du mit einem ConnectionPool arbeitest, da Dir immer einer der freien Connections zurückgegeben wird und bei SessionFactory.close() wird sie wieder dem Pool zurückgegeben.


getCurrentSession() gibt es seit Hibernate3. Mit dem JDBC connection pool hat das auch nix zu tun. Und SessionFactory.close() auch nicht, ist ja die Factory.

http://hibernate.org/42.html


Top
 Profile  
 
 Post subject:
PostPosted: Tue Sep 05, 2006 6:31 am 
Regular
Regular

Joined: Thu Jan 27, 2005 8:58 am
Posts: 80
Ups stimmt. Ich meinte SessionFactory.currentSession()
Mein Fehler


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 07, 2006 5:42 am 
Newbie

Joined: Sun Sep 03, 2006 1:28 pm
Posts: 5
Hallo,

erstmal danke für eure Antworten. So sehen wir einmal das ich das richtig verstanden haben. factory.getCurrentSession() gibt eine Session von dem Pool zurück ung factory.openSession() gibt eine neue Session zurück. Eine Session aus openSession() muss man nach dem Verwenden schließen. Doch wie kann ich eine Session, die mittels getCurrentSession() erstellt wurde, wieder in den Pool zurück geben? Oder muss ich diese auch danach mittels close() schließen?

MfG,
Thomas


Top
 Profile  
 
 Post subject:
PostPosted: Thu Sep 07, 2006 11:26 am 
Hibernate Team
Hibernate Team

Joined: Mon Aug 25, 2003 9:11 pm
Posts: 4592
Location: Switzerland
Es gibt keinen Session Pool, das Wort "pool" wird nirgendwo in der Hibernate Dokumentation erwaehnt. Die Methode getCurrentSession() gibt zurueck was ein CurrentSessionContext liefert. Man kann die Implementation von CurrentSessionContext in der Hibernate Konfiguration auswaehlen. Ein Pool ist da nicht dabei (wuerde auch keinen Sinn machen).


Top
 Profile  
 
Display posts from previous:  Sort by  
Forum locked This topic is locked, you cannot edit posts or make further replies.  [ 7 posts ] 

All times are UTC - 5 hours [ DST ]


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
© Copyright 2014, Red Hat Inc. All rights reserved. JBoss and Hibernate are registered trademarks and servicemarks of Red Hat, Inc.