Использование пула соединений, управляемого приложением, на сервере приложений Java EE

Безопасно ли запускать пул соединений с базой данных (например, Commons DBCP или c3p0) как часть приложения, развернутого на сервере приложений, таком как Glassfish или Websphere? Существуют ли какие-либо дополнительные действия по сравнению с автономным приложением, которые следует предпринять для обеспечения безопасности или производительности?


Обновление, разъяснение причины - вариант использования, который я имею в виду, может потребовать определения новых источников данных во время выполнения опытными конечными пользователями - изменение источников данных является частью функциональности приложения, если хотите. Я не думаю, что смогу создавать и использовать пулы, управляемые контейнером, на лету?


person brabster    schedule 23.06.2010    source источник
comment
возможный дубликат Каков наилучший подход к объединению соединений?   -  person ewernli    schedule 23.06.2010
comment
нет, это вообще не дубликат   -  person Vladimir Dyuzhev    schedule 23.06.2010
comment
опытные конечные пользователи звучит как оксюморон :)   -  person Pascal Thivent    schedule 23.06.2010
comment
ИМХО совсем нет; Иногда бизнес-аналитики достаточно опытны для прямого доступа к СУБД. они просто не могут ждать, пока будут реализованы желаемые приложения, и вместо этого осваивают SQL.   -  person Vladimir Dyuzhev    schedule 24.06.2010


Ответы (3)


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

Кроме того, я не совсем уверен, как происходит развертывание или повторное развертывание и правильно ли удалены соединения. Но это можно рассматривать как незначительную деталь безопасности: я думаю, при неправильной утилизации соединения просто прервутся. Я также не совсем уверен, работает ли он для источника данных XA, который интегрируется с диспетчером распределенных транзакций.

Тем не менее, с помощью приложения. Пул серверов обычно зависит от настройки имени JNDI в файле конфигурации. Тогда вы получаете бесплатно мониторинг, настройку из админки, управление нагрузкой и т.д.

person ewernli    schedule 23.06.2010
comment
Утилизировать легко: создайте несопоставленный сервлет и удалите все соединения в методе destroy(). Метод вызывается, когда приложение выгружается. - person Vladimir Dyuzhev; 23.06.2010
comment
Пул серверов обычно зависит от настройки URL-адреса подключения, учетных данных, свойств подключения, размеров пула, параметров проверки подключения и т. Д. И т. Д. И да, имя JNDI :) - person Vladimir Dyuzhev; 23.06.2010

На самом деле вы можете создавать источники данных, управляемые контейнером, в зависимости от используемой AS.

Например, у Weblogic есть обширный API управления, который используется, например, их собственной WLST (оболочкой Weblogic) для настройки серверов с помощью сценариев. Это, конечно же, Java API. Он также имеет методы для создания и настройки источников данных.

Другой путь — настройка на основе JMX. Все современные AS представляют себя как JMX-контейнеры. Вы также можете создавать источники данных через JMX.

Все, что вам нужно, это предоставить вашему приложению права администратора (т.е. указать имя пользователя/пароль).

Преимущество DS, управляемой контейнером, заключается в том, что ее можно кластеризовать. Кроме того, им может управлять человек с помощью стандартного пользовательского интерфейса AS.

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

person Vladimir Dyuzhev    schedule 23.06.2010
comment
Кстати, недостатком пула, управляемого контейнером, является то, что он переживет приложение. Приложение исчезло, как и пользователь, но пул все еще существует. Хотите вы этого или нет - зависит от вашего приложения. - person Vladimir Dyuzhev; 23.06.2010
comment
Для этого потребуются права на это (и обычно вы не хотите давать такие права приложению). - person Pascal Thivent; 23.06.2010
comment
В WLS вы можете предоставить приложению настроенную роль (я полагаю, это Deployer). В любом случае, я бы сам создал DS, управляемую приложением, в таком случае. - person Vladimir Dyuzhev; 24.06.2010

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

Обновление: я не верю, что можно создавать новые пулы на лету без необходимости отбрасывать сервер приложений, но я могу ошибаться. Если это так, я не верю, что Commons DBCP или C3P0 помогут.

person duffymo    schedule 23.06.2010
comment
Я думал, что кто-то спросит об этом - уточнил рассматриваемый вариант использования. - person brabster; 23.06.2010
comment
Что именно потребует утилизации AS? Пул — это просто набор соединений, используемых указанным драйвером JDBC. - person Vladimir Dyuzhev; 23.06.2010
comment
Конечно, но настройка пула соединений требует изменений в конфигурации сервера приложений. Если он читается только при запуске и не обновляется периодически, сервер приложений не может узнать, что его конфигурация изменилась - отсюда и отказ. - person duffymo; 23.06.2010
comment
Конфигурация может быть изменена на лету с помощью JMX. Конфигурация на диске читается при запуске и сохраняется при обновлении или завершении работы. - person Vladimir Dyuzhev; 24.06.2010