2009-07-02 8 views
0

Мой вопрос очень связан с этим: Multiple dynamic data sources for a servlet context. Однако я пока не нашел подходящего решения и хотел бы снова спросить его.Динамический доступ к нескольким базам данных?

У меня есть небольшое приложение JSF, которое разговаривает с MS SQL Server через JDBC. Tomcat используется как веб-контейнер. Приложение извлекает и сохраняет свои данные из одной базы данных. Предусмотрен экран входа. Если учетные данные совпадают с данными, хранящимися в базе данных, тогда предоставляется доступ, и я могу поиграть с приложением.

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

В настоящее время я использую ресурсы JNDI для поиска баз данных в своем коде. Однако это заставляет меня редактировать context.xml и web.xml и перезагружать tomcat. Я не хочу этого делать. Перезапуск заставляет меня бегать вокруг, говоря всем: «Эй, я перезагружаюсь, не возражаете потерять все свои связи?»

Является ли еще более динамичный способ сделать это?

ответ

0

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

Сказали, что если вы должны установить все с помощью только одного сервера приложений, вам, вероятно, потребуется изучить пользовательский authentication realm, который сделает это. Вы можете либо выполнить фактическую работу по определению источника данных, чтобы использовать себя, либо посмотреть что-то вроде Hibernate Shards.

+0

Угадайте, что вы правы – raupach

0

Создайте массив источников данных и позвольте пользователю выбрать, какой индекс в этом массиве вы хотите использовать.

+0

Как эта динамика? Если DBA создает новый DB, индекс не находится в webapp. – raupach

0

Я не знаю ответа, но если вы вызываете OSQL -L из JNI, вы можете получить список доступных экземпляров базы данных SQL в этой области. Затем вы можете подключиться и получить список баз данных внутри.

Итак:

  1. пользователь вводит имя пользователя и пароль
  2. приложение работает OSQL -L, чтобы получить список экземпляров и предоставляет список выбора
  3. пользователь выбирает экземпляр, JDBC использует учетные данные на шаге 1 получить список баз данных из экземпляра
  4. jdbc использует выбранную базу данных для подключения.
0

Вы можете получить базы данных на SQL-сервере с помощью оператора select и в конечном итоге отказаться от некоторых из них, которые не имеют отношения к вашим приложениям.

ResultSet rs = stmt.executeQuery("show databases"); 
Смежные вопросы