69 votes

tomcat-dbcp vs communes-dbcp

Il semble y avoir beaucoup de confusion entre ces deux pool de connexion de bibliothèques. Ce que je veux savoir, c'est quel est le meilleur (le cas échéant)?

Voici quelques points que je voudrais mettre en place... quelqu'un Pourrait-veuillez vérifier?

  1. Tomcat DBCP: utilise la valeur par défaut tomcat-dbcp.jar qui sera présent dans votre tomcat/lib. Vous n'avez pas besoin commons-dbcp.jar ou commons-pool.jar les bibliothèques de votre site web-inf/lib. Le pilote de base de données doit être placé dans tomcat/lib.

  2. Tomcat DBCP classe datasource est - org.apache.tomcat.dbcp.dbcp.BasicDataSource. Communes DBCP classe datasource est - org.apache.commons.dbcp.BasicDataSource.

  3. La seule différence entre ces deux peuvent être trouvés dans ce blog. Ne sais pas si l'information est correcte ou non.

  4. L'officiel Tomcat documentation mentionne clairement que la plupart des classes ont simplement été re-nommé et ré-emballé.

Donc la question est: lequel utiliser et qui est le mieux?

35voto

Florent Guillaume Points 1820

Tomcat DBCP est juste une version renommée de Apache Commons DBCP, avec aussi un autre module interne préfixe de nom.

Au moment de la construction, Tomcat extrait les Communes DBCP sources (la version dépend de la version de Tomcat, par exemple Tomcat 7.0.27 utilise Communes DBCP 1.4), et n'nom du package de remplacement (org.apache.commons -> org.apache.tomcat.dbcp) et construit le résultat en tant que tomcat-dbcp.jar.

Ceci est fait de sorte que l'intérieur de Tomcat JDBC piscines entrent jamais en conflit avec l'application possible des usages de la chambre des Communes DBCP classes. Cela évite beaucoup de potentiel classloading questions.

Edit: Le "dbcp" paquets sont sur la source de données de gestion. Pour le pur piscine de mise en œuvre, les Communes DBCP dépend de Communes de la Piscine (package org.apache.commons.pool), mais dans Tomcat dans la mise en œuvre de la piscine est remplacé par Tomcat propre JDBC piscine (package org.apache.tomcat.jdbc.pool).

11voto

skaffman Points 197885

Les anciennes versions de Apache Commons DBCP (c'est à dire la version 1.2) avait une méchante thread-les questions de sécurité sous des conditions de charge, la rendant impropre pour ce type d'utilisation. Ça ne m'étonne pas que le Tomcat gens re-travaillé à résoudre ces problèmes.

Cependant, ma compréhension est que les Communes DBCP 1.4 résout ces problèmes. Je ne peux pas confirmer que personnellement, mais il peut rendre la version de Tomcat redondant.

Il est intéressant de noter, SpringSource également réécrit Communes DBCP pour leur reconditionné version de Tomcat (tc-Serveur), et ils ont droit à des avantages de performance. Ils n'ont pas open-source qui, si.

6voto

austindz Points 36

Tomcat 7 continue à utiliser DBCP. La principale raison pourrait être caché dans leur Tomcat docs:

  • L'Apache Commons DBCP peut être configuré pour suivre et récupérer ces abandonné connexions de base de données. Non seulement il peut les récupérer, mais aussi générer une trace de la pile pour le code qui a ouvert ces ressources et jamais fermé.

  • Tomcat jdbc-piscine de la bibliothèque, peut-être plus vite en très simultanées de scénarios, mais ne peut pas fermer et communiqué de déclarations automatiquement (un développeur a oublié de fermer), résultant en possible les fuites de mémoire dans certains pilotes jdbc.

Cependant, un des problèmes avec DBCP code est le modèle de la délégation qu'ils utilisent actuellement leur dernière version prend en charge JDK1.6 et inférieur. À l'appui de 1,7 signifie changer d'au moins un quart de leurs classes, qui était l'une des raisons JDBC piscine de la bibliothèque est venu à l'existence.

REMARQUE: Après enquête, JDBC piscine a une façon de fermer les déclarations d'ouverture lorsqu'une connexion est fermée, à l'aide d'un StatementFinalizer de l'intercepteur.

4voto

Jonathan Points 789

Voici une liste des avantages de l'utilisation de Tomcat JDBC de la piscine plutôt que de communes-dbcp: http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

4voto

arviarya Points 145

Juste pour ajouter ici: J'ai remarqué un comportement intéressant, si c'est prévu, mais n'a pas pu trouver de la documentation pour que:

Pour Tomcat, vous devez définir Tomcat usine (org.apache.tomcat.jdbc.pool.DataSourceFactory ou d'autres Tomcat usines) sinon, il travaillera en tant que Commune DBCP.

Il y a des différences entre les valeurs par défaut de la Commune de DBCP et Tomcat DBCP, spécialement testOnBorrow (true en Commun DBCP, mais false dans Tomcat DBCP).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X