Подтвердить что ты не робот

Tomcat-dbcp vs commons-dbcp

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

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

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

  • Класс datasource Tomcat DBCP org.apache.tomcat.dbcp.dbcp.BasicDataSource. Commons DBCP datasource class org.apache.commons.dbcp.BasicDataSource.

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

  • Официальная документация Tomcat четко указывает, что большинство классов только что переименованы и повторно упакованы.

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

4b9b3361

Ответ 1

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

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

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

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

Ответ 2

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

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

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

В Tomcat 7 (начиная с 7.0.19 в июле 2011 года) дополнительный пул подключений был включен в пакет Tomcat по умолчанию (как часть tomcat-jdbc.jar) в качестве альтернативы реализации устаревшей версии apache, называемой "Соединение Tomcat JDBC бассейн":

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 лучше:

  • активно поддерживается
  • намного меньше, легче понять и поддерживать (если вы хотите посмотреть на источник)
  • поддерживает все функции commons-dbcp + добавляет супер полезные, такие как "initSQL", "validationInterval", "jdbcInterceptors" и многое другое.

Ответ 3

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

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

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

Ответ 4

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

  • Коммутатор Apache Commons DBCP может быть настроен для отслеживания и восстановления этих заброшенные соединения с базами данных. Это может не только восстановить их, но и генерировать трассировку стека для кода, который открыл эти ресурсы и никогда не закрывали их.

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

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

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

Ответ 5

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

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

Существуют различия между значениями по умолчанию для общих DBCP и DBC Tomcat, особенно testOnBorrow (true в Common DBCP, но false в Tomcat DBCP).