|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||||
|
Invité de passage
![]() Inscription : mars 2009 Messages : 9 ![]() |
Bonjour,
je suis en train de développer une application client serveur, en utilisant les sockets. Le serveur quand il reçoit un client créé un thread de traitement. J'utilise Hibernate pour la persistance des données, avec la classe utilitaire HibernateUtil : Code :
Cela fonctionne très bien, mais toutes les 1h30 (à peu près) la ligne "query.list();" ne répond plus, et bloque le thread client : Code :
Je pré-suppose que dans une application multi-threads, cette classe n'est pas vraiment compatible, car les threads utilisent toujours la même session. Mais j'ai beau créé un threadLocal, une session Hibernate pour chaque thread, le problème persiste... Existe-t-il une classe utilitaire qui gère les sessions dans un contexte multi-threading ? Ou dans quelle direction puis-je me diriger pour avoir toujours une bonne session pour ne plus avoir ce blocage ? |
||||
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() ![]() |
Ta gestion multithread des sessions est correcte. Par contre, es-tu sur de systématiquement fermer toutes les sessions? Si tu laisse des sessions ouvertes, tu va progressivement consommer ton pool de données jdbc jusqu'à épuisement.
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mars 2009 Messages : 9 ![]() |
Quand tu me dis que "Ta gestion multithread des sessions est correcte", tu parles de la classe utilitaire que j'ai présentée ? Ou la modif que j'ai apportée en créant une session par thread ?
La classe utilitaire suffit-elle pour le multithreading ? En tentant de gérer une session par thread, j'ai créé un singleton qui gère une map avec comme clé l'id du thread et comme valeur la session associée. Comme cela, le DAO fait appel à la classe utilitaire, lui demandant la session associée à l'id du thread (Thread.currentThread().getId()). Enfin, je ferme la session dans la méthode finalize(). Cette gestion des session est-elle pérenne ? Sinon, dans quelle direction puis-je m'orienter ? Avec les recherches que j'ai effectuées, le pool de session est géré habituellement avec un serveur d'application, sauf que j'en ai pas ici. J'ai l'impression de réinventer la roue, mais j'ai besoin de le faire. |
|
|
00
|
|
|
#4 | |||
|
Expert Confirmé Sénior
![]() ![]() |
Citation:
Citation:
Citation:
__________________
⥀⥁ Чиз faq java, cours java, javadoc. Pensez à et ![]() Laisse entrer le jour après une nuit sombre. Si tu es toujours là, tu n'es pas faite pour mourir. |
|||
|
|
00
|
Copyright © 2000-2013 - www.developpez.com