Драйвер JTDS — пул соединений и пул соединений

Я некоторое время был в стороне от Java EE, но у меня есть общее представление обо всем этом.

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

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

В нем говорится, что он обеспечивает пул операторов и пул соединений, но не обеспечивает реализацию пула соединений.

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

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


person peter.petrov    schedule 15.01.2015    source источник
comment
Похоже, что пул операторов является опечаткой и должен быть кешем операторов, который является довольно необходимой функцией: драйвер будет повторно использовать подготовленные операторы для соединения, когда приложение запускает одни и те же запросы (например, повторяющиеся запросы, такие как select * от пользователей, где userid= ?). Это может сэкономить много времени (ввода-вывода/сети), а реализация пула соединений, такая как HikariCP, предполагает использование JDBC. драйвер имеет эту функцию (HikariCP решила не реализовывать функцию кэширования операторов).   -  person vanOekel    schedule 16.01.2015


Ответы (1)


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

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

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

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

У меня есть более подробный ответ на эту тему на аналогичный вопрос.

person Mark Rotteveel    schedule 15.01.2015