Должны ли дескрипторы соединений JDBC быть для каждого приложения, для каждого потока или для каждого запроса? - PullRequest
1 голос
/ 21 октября 2010

Допустим, у нас на сервере приложений есть веб-приложение или веб-служба, поддерживающая пул соединений JDBC.

Должен ли я получить новый Connection для каждого потока или для каждого запроса?

Спасибо!

Ответы [ 2 ]

8 голосов
/ 21 октября 2010

Надеюсь, вы получаете их за каждую единицу работы.

Для каждого запроса подразумевается, что в вашей системе никогда не бывает логической единицы работы, охватывающей более одного запроса.(Может быть, это правда, но вы все еще можете подумать о будущем!)

Для каждого потока (который я предполагаю означать объем запроса, а не для всей жизни потока?), Вероятно, приведетудерживать их дольше, чем это абсолютно необходимо, но это позволяет вам намного лучше управлять транзакциями.(и это то, как многие ведущие фреймворки работали или работали в течение длительного времени. Шаблон, известный как Open Entity Manager In View, если вы хотите поработать над ним с помощью Google-fu)

Назначениенеопределенно для одного потока означает, что максимальное число активных процессоров запросов ограничено максимальным размером пула базы данных, что является определенным сбоем в масштабируемости.

1 голос
/ 21 октября 2010

за нить

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

...