2011-01-17 2 views
62

Кажется, что существует много путаницы между этими двумя библиотеками объединения пулов. Я хочу знать, какой из них лучше (если вообще)?tomcat-dbcp vs commons-dbcp

Вот несколько моментов, которые я хотел бы рассказать ... Может кто-то, пожалуйста, подтвердите?

  1. Tomcat ДБХП: использует по умолчанию TOMCAT-dbcp.jar, который будет присутствовать в вашем TOMCAT каталоге/Lib. Вам не нужно нужны библиотеки commons-dbcp.jar или commons-pool.jar в вашем web-inf/lib. Драйвер DB должен быть помещен в tomcat/lib.

  2. Категория источника данных DBCP Tomcat - org.apache.tomcat.dbcp.dbcp.BasicDataSource. Общий ресурс базы данных DBCP: org.apache.commons.dbcp.BasicDataSource.

  3. Единственная разница между этими двумя может быть найдена в this blog. Не знаю, правильна ли информация или нет.

  4. The official Tomcat documentation ясно упоминает, что большинство классов только что переименованы и повторно упакованы.

Так что вопрос: который использовать и какой из них лучше?

+0

На всех установках Tomcat, с которыми я сталкивался до сих пор, 'tomcat-dbcp.jar' сделал ** не ** существует, а' commons-dbcp.jar' был частью каталога Tomcat lib. То есть, пока кто-то не скачал Tomcat с веб-сайта ASF и попытался запустить его на прошлой неделе. Итак, определенно странно. – mirabilos

ответ

11

В более старых версиях DBCP (то есть версии 1.2) Apache Commons были некоторые неприятные проблемы с безопасностью потоков при высоких нагрузках, что делает их непригодными для такого использования. Меня не удивляет, что люди Tomcat переработали его, чтобы исправить эти проблемы.

Однако, я понимаю, что Commons DBCP 1.4 устраняет эти проблемы. Я не могу подтвердить это лично, но это может сделать версию Tomcat излишней.

Интересно, что SpringSource также переписал Commons DBCP для их переупакованной версии Tomcat (tc-Server), и они требуют от нее больших преимуществ. Тем не менее, у них нет открытых источников.

+4

DBCP 1.4 - это большое улучшение производительности по сравнению с 1.2, и с тех пор, как я обновился, у меня не было больше проблем с блокировкой или потоком. – Chochos

+0

@ Chhosos: Приятно знать. Для чего это было? – skaffman

+0

Переключатель транзакций, выполняющий 200K + ежедневные операции. Множество коротких 1-5 строк запросов, множество и множество обновлений и вставок. – Chochos

31

Tomcat DBCP - это просто переименованная версия DBCP Apache Commons, а также другой префикс имени внутреннего пакета.

Во время сборки, Tomcat выбирает источники Commons ГСБД (версия зависит от версии Tomcat, например, Tomcat 7.0.27 использует Commons ГСБД 1.4), и делает замену имя пакета (org.apache.commons ->org.apache.tomcat.dbcp) и строит результат как tomcat-dbcp.jar.

Это делается для того, чтобы внутренние пулы Tomcat JDBC никогда не конфликтуют с возможными применениями использования классов DBCP Commons. Это позволяет избежать многих проблем, связанных с загрузкой.

Редактировать: Пакеты "dbcp" относятся к управлению источниками данных. Для реализации чистого пула Commons DBCP зависит от Commons Pool (пакет org.apache.commons.pool), но в Tomcat реализация пула заменяется собственным Tomcat JDBC pool (пакет org.apache.tomcat.jdbc.pool).

+18

Действительно ли это так? [В самом первом разделе документации DBCP от Tomcat (http://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html#Introduction) содержится существенное количество различий между ними. – pimlottc

+2

Я отредактировал свой ответ, чтобы добавить разъяснение о истории пула. –

+0

Ссылка pomlottc указывает на пул соединений Tomcat JDBC ('org.apache.tomcat.jdbc.pool'), который является отдельной библиотекой –

6

Tomcat 7 продолжает использовать DBCP.Основная причина может быть скрыта в их документации Tomcat:

  • The Apache Commons ГСБД может быть настроен для отслеживания и восстановления этих заброшенных соединений с базой данных. Мало того, что он может их восстановить, но также генерировать трассировку стека для кода, который открыл эти ресурсы, и никогда не закрывали их.

  • Tomcat библиотека JDBC-бассейн, может быть быстрее в весьма параллельных сценариев, но не может закрыть и заявления релиз автоматически (что разработчик забыл закрыть), в результате возможных утечек памяти в некоторых JDBC драйверов.

Однако одна из проблем, с ГСБДОМ кодом является моделью делегирования они используют, в настоящее время их последние версии поддерживает JDK1.6 и ниже. Для поддержки 1,7 означает изменение хотя бы четверти своих классов, что стало одной из причин появления библиотеки пула JDBC.

ПРИМЕЧАНИЕ. При дальнейшем расследовании пул JDBC имеет способ закрытия вступительных заявлений при закрытии соединения с использованием перехватчика StatementFinalizer.

3

Просто добавить здесь: я заметил интересное поведение, хотя это, как ожидается, но не смог найти какую-либо документацию для этого:

Для Tomcat вам нужно определить Tomcat завод (org.apache.tomcat.jdbc.pool.DataSourceFactory или другие заводы Tomcat) в противном случае он будет работать как общий DBCP.

Существует различие в значениях по умолчанию между Общей ДБХП и Tomcat ДБХП, специально testOnBorrow (true в общем ДБХПЕ но false в Tomcat ДБХПЕ).

13

Кажется, есть много путаницы между этими двумя библиотеками Пулы соединений. Я хочу знать, какой из них лучше (если вообще)?

TL/DR: они те же, не используйте ни один из них.

Tomcat-dbcp является оригинальным ре-пакетом пула apache commons, включенным в дистрибутив Tomcat. Чтобы избежать классового кластерного пакета, было переименовано в org.apache.tomcat.dbcp.dbcp. *

В Tomcat 7 (начиная с 7.0.19 в июле 2011 г.) дополнительный пул подключений был включен в пакет Tomcat по умолчанию (как часть кот-JDBC.банка) в качестве альтернативы несвежей апачских реализаций общих, под названием "Tomcat JDBC Connection Pool":

https://tomcat.apache.org/tomcat-7.0-doc/jdbc-pool.html

В данной статье рассматривается различие между ними:

http://vigilbose.blogspot.com/2009/03/apache-commons-dbcp-and-tomcat-jdbc.html

Краткого резюме почему новым Бассейн Tomcat лучше:

  • активно поддерживается
  • гораздо меньше, легче понять и поддерживать (если вы заботитесь, чтобы посмотреть на источник)
  • поддерживает все Обще-ГСБД особенности + добавляет супер полезные, как «initSQL», «validationInterval», «jdbcInterceptors» и более
+0

Удивительное объяснение !! – Oliver

+0

Я буду голосовать двумя, если смогу! Спасибо за ссылку в блоге. – Adarsha

+2

это путано: 'TL/DR: это то же самое, не используйте ни один из них' против« Краткое описание, почему новый пул Tomcat лучше » –

Смежные вопросы