Connection.close против PooledConnection.close - PullRequest
2 голосов
/ 11 октября 2011

Я читаю Java Data Access—JDBC, JNDI, and JAXP о Connection, PooledConnection интерфейсах.Как я понимаю, Connection, возвращаемое PooledConnection, представляет собой "логическое" соединение.PooledConnection - само по себе представляет "физическое".В чем разница между ними в отношении закрытия?

Вызов метода close () для стандартного объекта Connection закрывает физическое соединение.Напротив, вызов метода close () для объекта логического соединения возвращает логическое соединение с пулом для использования другими клиентами.

  1. Мой первый вопрос: должен ли я вызыватьPooledConnection.close ()?Если я прав, я не хочу закрывать физическое соединение, я только хочу проверить физическое соединение (чтобы освободить его) к его пулу.

  2. Второй вопрос: я не понимаю, почему мне нужно вызвать Connection.close() для объекта, возвращаемого PooledConnection.getConnection()

  3. Если вы посмотрите на пример: Пример PooledConnection вызывается только Connection.close() метод, но не PooledConnection.close().Прокомментируйте это.

  4. Согласно официальной документации: PooledConnection.close PooledConnection фактически закрывает физическое соединение, которое представляет этот объект PooledConnection.Но, как я понимаю, основная (одна из основных) целей пула соединений - поддерживать физические соединения, не закрывая / не создавая их.Согласно документации, если я запустил PooledConnection.close (), то пул подключений должен будет воссоздать его снова.Не могли бы вы это прокомментировать.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

У вас нет выбора. Все, что у вас есть, это объект некоторого класса, который реализует Connection, и у него есть метод close (). Так назови это. Решение не требуется. «Программист приложений не использует интерфейс PooledConnection напрямую».

0 голосов
/ 11 октября 2011

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

Стандартные объекты java.sql.Connection используются клиентами JDBC и используются для фактической работы с базой данных. Этот код не должен касаться PooledConnection, и ему будут либо предоставлены подключения к нему через контейнер (например, контейнер Java EE или через внедрение зависимостей), либо он сам создаст подключения из DataSource или из DriverManager.

...