tomcat-dbcp vs commons-dbcp

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

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

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

  2. Класс org.apache.tomcat.dbcp.dbcp.BasicDataSource DBCP datasource – org.apache.tomcat.dbcp.dbcp.BasicDataSource . Commons DBCP datasource class – org.apache.commons.dbcp.BasicDataSource .

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

  4. В официальной документации Tomcat четко указано, что большинство classов только что переименованы и повторно упакованы.

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

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

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

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

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

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

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

Tomcat-dbcp является оригинальным ре-пакетом пула apache commons, включенного в дистрибутив Tomcat. Чтобы избежать столкновения с classовым пакетом, было переименовано в 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» и многое другое

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

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

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

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

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

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

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

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

Вот список преимуществ использования пула Tomcat JDBC, а не commons-dbcp: http://people.apache.org/~fhanik/jdbc-pool/jdbc-pool.html

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

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

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

  • Java: Найти .txt файлы в указанной папке
  • Как вы знаете переменный тип в java?
  • Как загрузить ленивые элементы из Hibernate / JPA в моем controllerе
  • Чтение InputStream как UTF-8
  • Файл для байта в Java
  • Включая банки в classpath в командной строке (javac или apt)
  • JAVAFX / WebView / WebEngine FireBugLite или какой-нибудь другой отладчик?
  • Почему вы не можете объявить class статическим в Java?
  • Создать экземпляр родового типа в Java?
  • Как узнать, какое хранилище использует моя JVM?
  • Если утверждение с сопоставлением строк не выполняется
  • Давайте будем гением компьютера.