web-dev-qa-db-fra.com

Hibernate: Qu'est-ce que le pool de connexions et pourquoi le pool par défaut ne convient-il pas à la production?

Je ne connais pas très bien Hibernate et je viens de commencer à travailler sur une application web qui l'utilise avec une base de données MySQL. Je remarque que le tutoriel de documentation communautaire déclare:

Le pool de connexions Hibernate intégré n'est en aucun cas destiné à une utilisation en production. Il manque plusieurs fonctionnalités trouvées sur un pool de connexion décent.

Quelqu'un peut-il développer cela? Que manque-t-il exactement et quels sont les problèmes rencontrés par les utilisateurs avec celui par défaut? Sur Google, j'ai trouvé un site Web ici mais cela n'explique pas vraiment les problèmes, juste ce que vous devriez utiliser à la place.

36
Kryptic

Qu'est-ce que le pool de connexions et pourquoi le pool par défaut ne convient-il pas à la production? Quelqu'un peut-il développer cela?

Le regroupement de connexions est une technique pour ouvrir/préparer/fermer des connexions. Un mécanisme de regroupement de connexions est un logiciel (composant) auquel vous déléguez la fonction de gestion des connexions. Votre application demande simplement une connexion, l'utilise et la restitue au pool. Le composant est chargé d'ouvrir N connexions et de les laisser prêtes lorsque votre application le demande. Si une connexion est périmée, le mécanisme de regroupement la ferme et en rouvre une nouvelle. Cela représente une meilleure utilisation des connexions, car vous n'avez pas besoin d'attendre que la connexion soit établie pendant l'exécution réelle de votre code et vous n'avez pas à vous soucier des connexions périmées.

Hibernate ne propose pas vraiment de véritable mécanisme de regroupement de connexions. Il fournit un gestionnaire de connexion interne, ce qui est très rudimentaire. La raison est simple: presque (sinon tous) les serveurs d'applications (comme JBoss AS) et les conteneurs de servlets (comme Tomcat) fournissent un mécanisme de regroupement de connexions par défaut. Ainsi, votre application n'a pas à se soucier des détails à ce sujet. Il demande simplement à l'AS une connexion.

À mon avis, il n'y a que deux cas où vous devez vous soucier du pool de connexions:

  1. Vous avez affaire à une application autonome (qui ne s'exécute pas à l'intérieur d'un conteneur)
  2. Vous êtes vraiment expert dans la mise en commun des connexions et aucune des solutions existantes ne répond à vos besoins.

Mais d'après mon expérience, la plupart des gens qui utilisent un pool de connexions "externe" le font par manque de connaissances sur le pool de connexions et manque de connaissances sur leur conteneur.

50
jpkrohling

Lorsque vous traitez une application autonome, il y a quelques gestionnaires de pool qui n'ont pas été gérés par Hibernate. Hibernate n'a jamais favorisé une explicite. Au fil des ans, beaucoup sont venus et ont disparu à nouveau. Il est vraiment difficile de juger finalement quels sont les meilleurs. Il est bon de vérifier et de comparer par vous-même les projets et leur niveau d'activité.

Voici quelques recommandations de mise en commun récentes (2017) pour les applications autonomes par ordre alphabétique:

C3P0 http://www.mchange.com/projects/c3p0/

Hikari https://github.com/brettwooldridge/HikariCP

Vibur http://www.vibur.org/

2
Thomas