![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Доброе всем времени суток.
Постала у меня задача, которую пока решить не могу. 1. Есть у меня куча филиалов, у которых стоит одинаковая база данных, но, естественно, с разным наполнением. 2. В каждом филиале я поставил по JBOSS с приложением для обращения к этой базе 3. Работаю с данными через EJB3+JPA+Hibernate. Ну эт, собственно й не важно. 4. Есть Remote Interface у бина фасада 5. В главном приложении Spring Context, в котором я определяю такие два бина:
Но это хорошо работает, если мне заранее известен ${app.server.host} 6. в главном приложении есть табличка в базе, в которой лежит инфа о филиалах (ID филиала, его IP). Т.е. если руками лукапить фасады филиалов, то все отлично работает. Вопрос заключаеться в следующем: Как динамически при старте приложения сконфигурить Spring на регистрацию бинов для всех фасадов по данным из таблицы. Т.е. у меня будет список однотипных бинов (JndiObjectFactoryBean), которые будут отличаться только по ИД (что бы я корректно мог их потом инджектить в экшены по залогиненому юзеру) и IP машины филиала с JBOSS Вторая сторона медали заключаеться в том, что бы админ мог во время работы приложения регистрировать новые филиалы, а также их грохать из Spring Context -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| Asal |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 26.12.2006 Где: Минск Репутация: 4 Всего: 7 |
осмелюсь предложить такой вариант
|
|||
|
||||
| MisterCleric |
|
||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Предположение не верное У меня должен быть набор таких бинов:
где переменная часть ИД самого бина и урл на java.naming.provider.url а ты в своем примере просто меняешь свойства существующего бина... Я могу, конечно, зарегистрировать factoryBean с коллекцией нужных мне JndiObjectFactoryBean и при нужден получать их из этой коллекции (или мэпа?) по ИД филиала из базы... Но может, есть какой-то иной способ регистрировать бины... -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||
|
|||||
| Asal |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 288 Регистрация: 26.12.2006 Где: Минск Репутация: 4 Всего: 7 |
из Вашего первого поста я именно так и понял. Второй пост пролил вет на ситуацию. жаль, но мне то же ничего другого не приходит в голову. |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Также я понимаю, что надо сделать реализацию BeanFactory и в нем провести конфигурацию нужных мне бинов...
Но как? хотя бы маленький примерчик, как реализовывать свою фабрику что-то типа такого
А в нем прочитать данные из базы и в цикле законфигурить JndiObjectFactoryBean столько, сколько надо по базе -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
А вот вопрос: Какой смысл иметь эти бины в Спринговом контексте, если их кол-во и id заренее не известны на этапе конфигурации. Как вы будете на них ссылаться("инжектить")? Можно про эту связь поподробнее? |
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
да по-моему будет просто:
-------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
А beenFactory это объект какого класса? org.springframework.jndi.JndiObjectFactoryBean или MyBeanFactory?
|
|||
|
||||
| MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
MyBeanFactory
как я понимаю он должен иметь все возможные свойства стандартного BeanFactory, что бы была возможность в нем зарегистрировать бины любого типа, а потом их от туда получать -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
| ivg |
|
|||
![]() Autonomous R&D ![]() ![]() Профиль Группа: Участник Сообщений: 686 Регистрация: 8.2.2006 Где: Екатеринбург Репутация: 32 Всего: 81 |
По моему, лучше сделать его обычным бином, без привязки к коду Spring'а. Инжектируете ему DataSource и что там ещё понадобится, во время инициализации бина лезете в базу, выгружаете иформацию о привязке IP-адресов, ну или во время запроса прокси фасада, тут можно по разному. То что делает org.springframework.jndi.JndiObjectFactoryBean можно реализовать и в коде, необязательно для этого регистрировать соответствующий бин в спринговом контексте. По сути он делает обычный lookup() к JNDI контексту и создание Proxy над полученным объектом для реализации интерфейса(который вы указываете в свойстве "proxyInterface"). Собственно в этом же бине можно реализовать и логику по добавлению/удалению филиалов. Ну и соответственно в Экшэны инжектируете этот бин, а получение Remote Interface нужного бина фасада будет делаться в одну строку, как вы, кажется, и хотели. |
|||
|
||||
| MisterCleric |
|
||||||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Здравствуйте всем.
Спасибо за внимание и поддержку Я нашел такое решение, хотя уверен оно не единственное
в applicationContext.xml прописал так:
И дальше у меня на экшенах висит интерцептор, который по залогиненному пользователю и ИД филиала этого пользователя делает инъекцию удаленного прокси таким простым куском кода:
Конечно, можно было все делать руками, но зачем тогда все эти фреймворки?.. Считаю тему закрытой -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
||||||
|
|||||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |