2015-01-15 5 views
3

Я немного отчасти от Java EE, но у меня есть основная идея всего этого.Драйвер JTDS - Соединение пула vs Пул соединений

Я читать JTDS документы здесь:

http://jtds.sourceforge.net/features.html

Он говорит, что это обеспечивает утверждение пулы и пулы соединений, но не обеспечивает реализацию в пул соединений.

  1. При условии, что водитель JTDS само по себе обеспечивает пулы соединений, то зачем мне нужен пул соединений (например ДБХП) на вершине его?
  2. Другими словами, в чем разница между этим соединением пула, предоставляемым JTDS, и полномасштабным пулом подключений (в смысле этой страницы документации JTDS) наверху ?
  3. Кроме того, какая разница между заявлением и пулом соединений (как упоминалось там на этой странице документа JTDS)?

Вы можете добавить больше деталей к вашему ответу
(все, что вы считаете важными, что я не просил явно о)
как я совсем запутался с этим.

+1

Похоже, что «Сводка команд» - это опечатка и должна быть «Кэш Statement», которая является довольно необходимой функцией: драйвер повторно использует подготовленные операторы для соединения, когда приложение запускает одни и те же запросы (например, повторяющиеся запросы, такие как «выберите * у пользователей, где userid =?»). Это может сэкономить много времени (IO/network) и реализацию пула соединений, например [HikariCP] (https://github.com/brettwooldridge/HikariCP), предполагает, что драйвер JDBC имеет эту функцию (HikariCP выбрал не выполнение инструкции кеш). – vanOekel

ответ

5

Насколько я могу судить по документации API, они означают, что jTDS обеспечивает реализацию javax.sql.PooledConnection и javax.sql.ConnectionPoolDataSource. Эти классы должны использоваться пулом соединений, например, - сервером приложений Java EE, и сами не являются пулом соединений.

ConnectionPoolDataSource создает PooledConnection объекты, или другими словами, это источник данных для a pool pool. PooledConnection - это ручка для физического соединения и удерживается в пуле соединений. Когда пользователь запрашивает соединение из пула, пул соединений перемещает PooledConnection из списка «доступно» в список «в использовании» и получает логический номер java.sql.Connection из PooledConnection. Это логическое соединение - это то, что передается пользователю.

PooledConnection может использоваться пулом соединений для контроля логического соединения. Например, вернуть PooledConnection в «доступный», когда вызывается close(), или принудительно аннулировать и аннулировать логическое соединение (например, если оно используется слишком долго).

Так что jTDS не имеет реализации пула соединений, но имеет поддержку пула соединений. К сожалению, формулировка в спецификации JDBC настолько запутанна.

У меня есть более подробный ответ на эту тему на a similar question.