Сохранение conexion в Сессии Java EE .vs.пул соединений - PullRequest
1 голос
/ 30 марта 2012

Я знаю, что объект session Java EE может хранить сложные объекты, такие как соединение с базой данных.

Я размышляю, как реализовать определенное приложение для практики программирования, созданное с помощью Java EE.Мой первый вариант использовать пул соединений, который очень прост в Java EE.

Интересно, из любопытства, а также для правильного обоснования решения, каковы плюсы и минусы создания соединения с базой данных каждый раз, когда клиент запускает сеанс и сохраняет его там, противиспользование пула соединений.

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 30 марта 2012

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

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

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

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

Таким образом, хранение соединения с базой данных в контексте сеанса рассматривается как плохая практика .

РЕДАКТИРОВАТЬ: я забыл упомянуть, что в сеансе должны храниться только объекты Serializable, поэтому, если сервер приложений решает пассивировать сеанс, его можно сохранить и восстановить, когда сервер приложений решит повторно его активировать.Соединение с базой данных не является ресурсом Serializable.

1 голос
/ 30 марта 2012

Использование пула соединений позволяет максимизировать удобство использования ваших соединений. Это означает, что меньше соединений = меньше памяти = меньше сокетов и т. Д. Причина, по которой пул лучше, чем сохранение в сеансе, заключается в том, что происходит, если кто-то неожиданно отключается? Если у вас есть соединение в вашем сеансе, вы рискуете сохранить это соединение в течение длительного времени, возможно, на неопределенный срок.

...