Cycle de vie de la session Spring + Hibernate
Comment correctement "cycle de vie" d'une session Hibernate en vertu de Printemps devrait être fait?
La SessionFactory
est créé automatiquement par le Printemps et est en train de la DB connexions de Glassfish pool de connexion. Pour le moment, je reçois une session Hibernate via SessionFactory.getCurrentSession()
. Puis j'ai lancer la transaction, faire le travail, puis commit()
ou rollback()
à la fin. Ai-je besoin d'effectuer d'autres actions comme disconnect()
close()
flush()
ou toutes autres personnes à tout moment si les connexions seraient retournés à la piscine ou est-ce déjà fait automatiquement par le Printemps?
Avec beaucoup de ces méthodes, il est un peu confus pour moi pour le moment à comprendre lorsque ce qui doit être fait, peut-être quelqu'un peut-point à droite direction?
source d'informationauteur Laimoncijus
Vous devez vous connecter pour publier un commentaire.
Comme SessionFactory est créé automatiquement par le printemps, le Printemps-cadre prendra soin de fermer la connexion.
Découvrez Le Printemps De La Gestion Des Ressources
Si vous voulez vérifier. Vous pouvez vérifier le journal, si vous utilisez la journalisation pour votre application. Ça va être comme :
Je obtenir les lignes suivantes à partir de ce lien
Les politiques sur la façon dont la connexion de communiqués de retour à la connexion de la piscine n'ont rien à voir avec le Printemps .Il est configuré par Hibernate lui-même à travers le paramètre de configuration
hibernate.connection.release_mode
, qui est identifié par l'enum dans le org.mise en veille prolongée.ConnectionReleaseModeCommencer à partir de la version 3.1+ , la valeur par défaut de la
hibernate.connection.release_mode
estauto
qui le correspondantConnectionReleaseMode
valeur dépend de la JTA ou JDBC transaction est utilisée. En cas de JDBC transaction est utilisé , il est mis àConnectionReleaseMode.AFTER_TRANSACTION
(j'.eafter_transaction
).Le comportement de
ConnectionReleaseMode.AFTER_TRANSACTION
est que : La connexion devra être retourné à la connexion de la piscine après chaque opération , c'est par l'appel de l'unetransaction.commit()
outransaction.rollback()
, ainsi que l'appel à lasession.close()
etsession.disconnect()
Vous pouvez vérifier ce comportement dans hibernate documentation de la Section 11.5.
Lorsque vous exécutez une requête hql par le biais d'une SessionFactory.getCurrentSession() , Printemps effectue la tâche nécessaire de l'ouverture et de la fermeture de la connexion . La SessionFactory vous utilisez dans le printemps config appelle aussi la config.buildSessionFactory méthode en interne .
La plupart de ce qui se passe dans les implémentations de la AbstractSessionFactoryBean. La fermeture de la connexion se fait par mise en veille prolongée dans la SessionFactoryImpl classe à l'aide de paramètres de l'instruction.getConnectionProvider().close(); . En bref , hibernate fait tout pour vous . Le printemps appelle de l'aide lorsque cela est nécessaire.
Espère cette lien qui va vous guider sur la session et les transactions.
Comme vous l'appelez commit() de la Transaction, il sera ferme automatiquement la session, en fin de compte clôture des appels de méthode sur le lien pour retourner à la piscine.