Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> данные из DataSource, как достать данные из DataSource? 
:(
    Опции темы
PHelen
Дата 30.3.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Привет всем. есть код

Код

public static TreeMap    c_PooledDataSource = null ;
... 
javax.naming.InitialContext ic ;
DataSource ds;           
String key ;                   

ic = new javax.naming.InitialContext();    
Enumeration l_enum = ic.list("jdbc");          
while( l_enum.hasMoreElements() )
{
  javax.naming.NameClassPair l_par_name = (javax.naming.NameClassPair)l_enum.nextElement();
  if ( l_par_name.getClassName().equals("com.evermind.sql.OrionCMTDataSource") )
  {
    key = l_par_name.getName();
    ds = (DataSource) ic.lookup( "jdbc/" + key );         
    c_PooledDataSource.put(key,ds); 
  } 
}



Использую JDeveloper с oc4j. В oc4j из data-source.xml заносится информация о пулах адресов:

Код

<data-source name="mi" class="..." location="..." ... username="..." ... url="..." min-connections="1" max-connections="30"/>   
...
<data-source name="or" class="..." location="..." ... username="..." ... url="..." min-connections="1" max-connections="30"/>


Как мне кроме имени получить еще url и username? Как я поняла они храняться в DataSource (ds).

Есть вариант с использованием metadata: 
Код

 DatabaseMetaData dbd = conn.getMetaData();
 String su = " url = " +  dbd.getURL() + " username = " + dbd.getUserName() +"\n"; 


Но это получение данных (url, username) только у успешного соединения, а надо бы вытащить данные обо всех. 

Подскажите, пожалуйста, как это можно сделать?
PM MAIL   Вверх
mbasil
Дата 31.3.2008, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Код

((OracleDataSource)ds).getURL();
((OracleDataSource)ds).getUser();


Кстати DatabaseMetaData "жрет" память со страшной силой и при нормальной работе этот объект лучше не создавать.

Это сообщение отредактировал(а) mbasil - 31.3.2008, 12:30
PM MAIL   Вверх
PHelen
Дата 31.3.2008, 16:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



com.evermind.sql.OrionCMTDataSource надо бы оставить

но 
Код

java.lang.ClassCastException: com.evermind.sql.OrionCMTDataSource


DataSource и OracleDataSource насколько я поняла "несовместимы".
Как быть?
PM MAIL   Вверх
mbasil
Дата 1.4.2008, 10:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Извините - я не очень внимательно просмотрел текст и решил, что Вы используете источник данных непосредственно  из драйвера Oracle. Поскольку Вам нужен именно источник данных, реализованный как com.evermind.sql.OrionCMTDataSource (судя по названию это пул подключений, унаследованный Oracle от сервера Orion), так и приводите ссылку к нему, а затем выяснив, какие у этого специфического источника имеются методы для получения нужной информации, вызывайте их.

Если документация на этот источник отсутствует я бы "выковырял" класс и декомпилировал его, например jad'ом.

Какую реализацию источника данных использовать (пула подключений) это дело технического решения.

Просто в коде Вы используете только com.evermind.sql.OrionCMTDataSourceЮ и это Ваше решение: 
Код

if ( l_par_name.getClassName().equals("com.evermind.sql.OrionCMTDataSource") )
  {
    key = l_par_name.getName();
    ds = (DataSource) ic.lookup( "jdbc/" + key );
    OrionCMTDataSource ds2 = ((OrionCMTDataSource)ds;
    String s ds2.<method()>;

    c_PooledDataSource.put( key,ds ); 
  } 



Это сообщение отредактировал(а) mbasil - 1.4.2008, 11:01
PM MAIL   Вверх
mbasil
Дата 1.4.2008, 12:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 399
Регистрация: 4.5.2007
Где: Москва

Репутация: 9
Всего: 13



Кстати здесь, кажется можно было бы обойтись без Reflection, например так:
Код

while( l_enum.hasMoreElements() ) {

  javax.naming.NameClassPair l_par_name = (javax.naming.NameClassPair)l_enum.nextElement();
  key = l_par_name.getName();
  Object o = ic.lookup( "jdbc/" + key ); 
  if ( o instanceof OrionCMTDataSource ) {
    OrionCMTDataSource ds = (OrionCMTDataSource)o;
    . . .     
    c_PooledDataSource.put(key,ds); 
  } 
}

Привожу этот пример, чтобы было более понятно, чтоя имел ввиду ранее. 

Это сообщение отредактировал(а) mbasil - 1.4.2008, 16:06
PM MAIL   Вверх
PHelen
Дата 1.4.2008, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 26
Регистрация: 17.5.2006

Репутация: нет
Всего: нет



Спасибо за (OrionCMTDataSource)ds;
Буду пытаться вытащить URL 
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема »


 




[ Время генерации скрипта: 0.0646 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.