Я новичок в java в дизайне веб-приложений, и я удивляюсь, сколько вещей у меня сейчас нет.
В частности, у меня возникают проблемы с пониманием того, как контейнеры сервлетов управляют такими ресурсами, как классы объединения пулов.Некоторые вопросы о подключении пула в приложении сервлета
Предполагая, что я выбираю библиотеку пула (скажем, c3p0), я читал, что существует много способов использования и управления классами объединения пулов.
Например, во многих примерах я увидел, что определенный класс (скажем, ComboPooledDataSource) создается в методе init() сервлета, и здесь я немного запутываюсь. Я имею в виду, я думаю, что система объединения соединений должна существовать и иметь отдельную жизнь по отношению ко всем сервлетам, которые нуждаются в соединении, иначе это не имеет смысла. Поэтому я считаю, что нижеприведенный класс может быть потоком, который запускается один раз из первого сервлета, который вызывает метод init, а затем он продолжает существовать, пока кто-то не прерывает его. Это верно? Если нет, то как это работает?
В любом случае, когда я запускаю этот класс, он распределяется между всеми сервлетами в контексте (я имею в виду все сервлеты, которые вызывают его в методе init)?
Другие примеры создают систему объединения пулов в качестве ресурса, например, определяя его в контексте .xml, а затем любой сервлет, которому требуется соединение, просто должен получить к нему доступ через JNDI (JNDI правильно?). То, что я понял (или я думаю), заключается в том, что в этом случае поток, который будет запускать систему объединения, запускается, когда приложение запускается, и каждый сервлет может получить к нему доступ, когда захочет. Это верно?
В этом случае я могу изменить свойства системы пула соединений с помощью сервлета или среды выполнения фонового потока? (например, если я хочу изменить количество подключений в зависимости от статистики по количеству запросов и т. д.)
Если я хочу создать разные пулы (например, я хочу разделить доступ к базе данных N разные базы данных или я хочу получить доступ с использованием разных имен пользователей) мне нужно создать столько ресурсов, сколько требуется для другого типа соединения?
Есть ли «лучший» способ среди этих двух или они эквивалентны?
Я думаю, что вы немного смущены целью [пула объектов] (http://en.wikipedia.org/wiki/Object_pool_pattern), обычно нет потока * для пула соединений. –
да, это потому, что я задаю вопросы – LJSilver
Всегда используйте пул соединений, встроенный в сервер приложений, который вы используете. –