2013-08-29 3 views
0

У меня есть настройки JNDI для 2 источников данных в одном сервере приложений (Jboss 4.2.3).Как сопоставить пользователей с разными источниками данных

Как определить, с какого имени пользователя попал запрос на соединение с базой данных? Как установить соединение Db на основе пользовательского запроса. Мне нужно одно время DB-соединение для пользователя. i.e Я хочу использовать динамический источник данных в своем приложении. я использовал чистое соединение JDBC

+0

Просьба уточнить, и есть два или три вопроса (уменьшите его до одного). Кстати какая база данных? – Beryllium

+0

У меня один сервер приложений (JBoss), в котором я определил 2 источника данных (оба указывают на Oracle), мой вопрос в том, как мы можем идентифицировать (сервер приложений указать, какой db должен использовать) –

ответ

0

Вы строите приложение с несколькими арендаторами.

  • Для этого вам нужно другое сопоставление между пользователями и источником данных (например, в таблице DB). Основываясь на этом сопоставлении, выберите источник данных.

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

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

В приложении вы LookUp источник данных по его имени:

final DataSource ds = (DataSource) ic.lookup("java:/jdbc/x1"); 
final Connection conn = ds.getConnection(); 
try { 
    // Do something with connection 
} finally { 
    conn.close(); 
} 

так что в вашем случае у вас есть два названия, как java:/jdbc/x1 и java:/jdbc/x2.

Вы определяете имя JNDI в том же месте, где задан источник данных.

+0

Спасибо Beryllium, i хотите знать, есть ли какой-либо techniq, чтобы передать Имя источника данных (Java:/jdbc/x1 или java:/jdbc/x2) в запросе пользователя? –

+0

Да, это уже в примере: просто передайте строковый аргумент из запроса в метод 'lookup()'. Технически возможно, но, пожалуйста, убедитесь, что вы не открываете отверстия для безопасности. – Beryllium

+0

Возьмите мой сценарий, Пользователь A с источником данных x1 и US B с источником данных x2, всякий раз, когда пользователь A регистрирует приложение в то время, мне нужно имя источника x1 в моем приложении, мы не знаем, какой пользователь может получить доступ к приложению одновременно .. –

Смежные вопросы