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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> поиск всех DataSource в контейнере 
:(
    Опции темы
Kivov
Дата 14.12.2007, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



есть ли способ соствать кэш из всех датасорсов, которые прописаны в контейнере? 

тоесть выполнить статический метод, который бы вернул все созданые в контейнере jdbc-соединеия и их сохранить в HashMap, а после по имени брать из этого HashMap датасорсы

P.s. использую WebSphere 6.1
PM MAIL   Вверх
ekr
Дата 14.12.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



средствами JNDI API можно получить все объекты и подконтексты в нужном контексте.
соответственно, остается только понять их тип (datasource ли это) или искать в контексте, где априори лежат datasources (например, в локальном jndi-дереве по контексту java:comp/env/jdbc)


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
mbasil
Дата 14.12.2007, 17:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Все-таки считается более правильным получать ссылку на DS по имени из JNDI,
нежели  помещать ее в HashMap, хотя это будет  относительно и более медленно.
Это позволяет держать DAO объекты, которые ничего не знают о модели.
PM MAIL   Вверх
ekr
Дата 14.12.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


...и это пройдет...
**


Профиль
Группа: Участник
Сообщений: 359
Регистрация: 6.5.2007
Где: Moscow, RU

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



Цитата(mbasil @  14.12.2007,  17:06 Найти цитируемый пост)
Все-таки считается более правильным получать ссылку на DS по имени из JNDI,
нежели  помещать ее в HashMap, хотя это будет  относительно и более медленно.
Это позволяет держать DAO объекты, которые ничего не знают о модели. 

позвольте не согласиться.
кеширование фабрик (в т.ч. datasources) - очень полезная вещь, и многие design patterns явно предлагают использование кеширования ресурсов, затратных при получении.

другое дело, что кеширование в какой-то собственной структуре может усложнить поддержку системы.
проще всего кешировать фабрики в свойстве экземпляра.


--------------------
и это пройдет....

http://ekrs.blogspot.com
PM WWW   Вверх
Kivov
Дата 14.12.2007, 17:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



спасибо за советы ... уже кое-что начало получаться, в понедельник будет новая рабочая неделя и новые силы  smile 
PM MAIL   Вверх
mbasil
Дата 17.12.2007, 10:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



To ekr

1. Я читал Вашу статью, и не согласен с предложенной Вами терминологией,
    тем более, что DataSource, похоже, только Вы называете фабрикой.
    Если бы мы не пересеклись бы с Вами в этом топике и по близкому вопросу,
    я не стал к этому обращаться. Дело в том, что "источники данных" (DataSources)
    сами порождаются (как правило) с помощью фабрик и, хотя по смыслу могут
    быть отнесены к фабрикам. являются больше описателями подключения и
    посредниками создающими оное, нежели фабриками, каковые по смыслу
    шаблона должны обеспечивать генерирование объектов РАЗНЫХ классов,
    но одного назначения. Тогда как DataSource генерирует множество
    объектов одного класса и, более того, с одинаковыми параметрами, в связи
    с чем (мне кажется) применение термина фабрика к этому объекту крайне
    нежелательно, так как здесь отсутствует прямое пересечение с одноименным
    шаблоном

2. Сохранение ссылки на DataSource в службе, обеспечивающей работу с объектом
    DAO, связанным с конкретным источником - разумеется, правильное решение.
    Однако с терминологической точки зрения я не стал бы называть это кэшированием.
    А вот сохранение всех источников данных в HashMap это действительно кэширование.
    И от него, на мой взгляд разумно отказаться, поскольку JNDI также обеспечивает
    кэширование, однако более универсальным способом - для того и сделано.
    Механизм гибкий, однородно работает во всех серверах и обеспечивает доступ
    из любого места приложения, а посему и более предпочтительный.

PM MAIL   Вверх
Kivov
Дата 26.12.2007, 19:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



при поиске в локальном jndi-дереве
Код

final Hashtable properties = new Hashtable();        
properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.ibm.websphere.naming.WsnInitialContextFactory");
properties.put(Context.PROVIDER_URL, "corbaloc:iiop:localhost:2809");
Context ctx = new InitialContext(properties); 
NamingEnumeration ne = ctx.list("java:comp/env/jdbc");


получаю ошибку:
Код

SystemErr     R javax.naming.NameNotFoundException: Name "comp/env/jdbc" not found in context "java:".
SystemErr     R    at com.ibm.ws.naming.ipbase.NameSpace.lookupInternal(NameSpace.java:1074)


в чем загвоздка?
PM MAIL   Вверх
Kivov
Дата 26.12.2007, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



немного упорства и найдуться ответы на все вопросы smile)

нашел решение:
Код

NamingEnumeration ne = ctx.listBindings("jdbc");
while (ne.hasMore()) {
     System.out.println("Object = " + ne.next());
}


и желаемый ответ:
Код

SystemOut     O Object = RCCoreDS: javax.resource.cci.ConnectionFactory:com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource@eda475c8
SystemOut     O Object = DefaultEJBTimerDataSource: javax.resource.cci.ConnectionFactory:com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource@dc5e307d
SystemOut     O Object = UnionClient2DS: javax.resource.cci.ConnectionFactory:com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource@5aaf820
SystemOut     O Object = LoansDS: javax.resource.cci.ConnectionFactory:com.ibm.ws.rsadapter.jdbc.WSJdbcDataSource@e0f9d36f

PM MAIL   Вверх
ecologist
Дата 27.12.2007, 09:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Могу присоедениться к mbasil в вопросе кэширования.

Если рассматривать локальный вызов DataSource через JNDI, то скорость получения будет достаточно велика. В конце концов вызов идет в рамках одной JVM. И вряд ли это радикально скажется на быстродействии. Если проектирование сделано так, что частота получения DataSource сравнимы с общим временем работы - то такое проектирование надо переработать. Ибо плохо сделано.

Если же вызов происходит удаленно - то кэширование бессмысленно совсем.
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.0839 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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