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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Spring: application context, динамическое определение 
:(
    Опции темы
yray
Дата 26.9.2006, 11:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 16.6.2006
Где: Запорожье, Украин а

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



Я недавно начал разбираться с j2ee, возникла проблема и пока не могу ее решить. Видел, что на форуме есть знатоки Spring, поэтому прошу помощи. Суть в следующем. Нужно при первом запуске страницы проверить определенное условие и в зависимости от результата проверки использовать различный набор бинов, определенных в xml файлах. Т.е. есть, например, файлы applicationContext _1.xml и applicationContext _2.xml. Когда пользователь в браузере обращается к стартовой странице, я должен проверить условие, если оно истинно, то веб-приложение использует applicationContext _1.xml, если ложно, то applicationContext _2.xml.

Проблема в том, что я знаю только один способ определения application context для spring: с помощью web.xml:

Код

<context-param>
     <param-name>contextConfigLocation</param-name>
         <param-value>
             /WEB-INF/applicationContext.xml
         </param-value>
</context-param>


Но указать в качестве параметра путь к applicationContext _1.xml и то applicationContext _2.xml одновременно нельзя, т.к. эти файлы взаимозаменяемы.

А вот можно ли как-нибудь программно устанавливать путь к xml файлам с описанием бинов и где  и как это можно сделать?

Это сообщение отредактировал(а) yray - 26.9.2006, 15:07
PM MAIL ICQ   Вверх
powerOn
Дата 26.9.2006, 13:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



Модератор: Название темы должно отражать ее суть!


--------------------
user posted image нет времени думать - нужно писать КОД!

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


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 16.6.2006
Где: Запорожье, Украин а

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



Прошу прощения, не придумал более внятное название темы.
Наверное, тему можно было бы назвать "Application context в Sping framework"

Я неоднократно в архиве видел, что здесь много участников форума имели дело со Spring'oм, поэтому очень надеюсь на помощь.
Возможно, не совсем ясно раскрыл суть проблемы
PM MAIL ICQ   Вверх
batigoal
Дата 26.9.2006, 15:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Нелетучий Мыш
****


Профиль
Группа: Участник Клуба
Сообщений: 6423
Регистрация: 28.12.2004
Где: Санктъ-Петербургъ

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



Переименовал тему.


--------------------
"Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли)
ЖоржЖЖ
PM WWW   Вверх
yray
Дата 26.9.2006, 15:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 16.6.2006
Где: Запорожье, Украин а

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



Спасибо, Lamer George. Сейчас название темы точно отражает суть вопроса.

Хочу дать некоторые пояснения. Дело в том, что я использую библиотеку Asegi Security for Spring, спомощью которой хотелось бы организовать контроль доступа к веб-приложению. Предполагается использовать SSO (единую точку входа) на сайт с помощью CAS если есть связь с сервером CAS или авторизацию с помощью веб-формы, если связи нет. То есть в первом случае мы имеем один файл конфигурации AcegiSecurity, а во втором случае конфигурация Acegi будет совершенно иной. Мне бы хотелось, чтобы при запуске стартовой страницы веб-приложения происходила проверка связи с сервером CAS и если связь есть, то приложение перенаправляется на сервер CAS и там пользователь проходит процесс идентификации\авторизации с помощью cas-настроек acegisecurity, если связи нет, то процесс логина происходит с помощью веб-форм настроек acegisecurity. Вся проблема и сводится к тому, чтобы динамически менять applicattion context spring в зависимости от условия.


PM MAIL ICQ   Вверх
tux
Дата 27.9.2006, 01:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Летатель
***


Профиль
Группа: Участник Клуба
Сообщений: 1853
Регистрация: 10.2.2005
Где: msk.ru

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



Я вижу такой выход - не использовать средства Spring для конфигурирования веб-приложений, а загрузить конфигурацию вручную используя классы org.springframework.context.support.ClassPathXmlApplicationContext или org.springframework.context.support.FileSystemXmlApplicationContext
PM MAIL Skype GTalk Jabber YIM   Вверх
_and
Дата 27.9.2006, 07:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-developer
*


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

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



yray, может можно попробовать сделать extends класса org.springframework.web.context.ContextLoaderListener 
и переопределить необходимые его методы или мона попробывать заимплементить интерфейс ServletContextListener
который в свою очередь реализуется классом org.springframework.web.context.ContextLoaderListener. Затем в web.xml
прописать свой листенер.

Сам такого не пробовал так как мало работал со спрингом, так что если не прав то поправьте

--
Feedback:
    E-mail: [email protected]
    ICQ#: 256052128
    Jabber: [email protected] 

PM MAIL ICQ Jabber   Вверх
yray
Дата 27.9.2006, 08:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 16.6.2006
Где: Запорожье, Украин а

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



Большое спасибо за советы, сейчас буду пробовать реализовать один из подходов
PM MAIL ICQ   Вверх
_and
Дата 2.10.2006, 11:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Java-developer
*


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

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



yray, поделись решением своим а то интересно всё-таки как енто реализовать мона(вдруг еще кому придется такое же делать)
PM MAIL ICQ Jabber   Вверх
onsh76
Дата 3.10.2006, 08:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 93
Регистрация: 20.11.2005
Где: Beautiful BC

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



Цитата(yray @ 26.9.2006,  15:42)
... То есть в первом случае мы имеем один файл конфигурации AcegiSecurity, а во втором случае конфигурация Acegi будет совершенно иной. Мне бы хотелось, чтобы при запуске стартовой страницы веб-приложения происходила проверка связи с сервером CAS и если связь есть, то приложение перенаправляется на сервер CAS и там пользователь проходит процесс идентификации\авторизации с помощью cas-настроек acegisecurity, если связи нет, то процесс логина происходит с помощью веб-форм настроек acegisecurity. Вся проблема и сводится к тому, чтобы динамически менять applicattion context spring в зависимости от условия.

А может проще будет дать уникальные имена бинам в двух спринговских конфиг.файлах (например, задав определенные префиксы), загрузить оба файла по обычной методике, прописав их в web.xml. Далее написать свой бин, в котором делать обычную проверку проверку на связь с сервером CAS. Если она существует, то выдергивать КАСовский бин из первого контекста по префиксу и базовому имени. Если же связи нет, бросай exception, ну а в обработке exception-а берешь другой префик и подстыковываешь его к базовому имени. 
PM MAIL   Вверх
yray
Дата 5.10.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 16.6.2006
Где: Запорожье, Украин а

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



Спасибо всем за помощь. Я изначально сделал так, как предлагал _and, то есть переопределил org.springframework.web.context.ContextLoaderListener и прописал его в web.xml, но этот способ не подходит, т.к. ContextLoaderListener, если я не ошибаюсь, как и присуще Listener'y срабатывает только один раз при запуске веб-сервера или деплое веб-приложения. Способ, предложенный onsh76 тоже можно реализовать. Пока занят несколько другими вещами, поэтому написать о том, как это реализовал пока не могу
PM MAIL ICQ   Вверх
vaz
Дата 8.7.2010, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Столкнулся с такой проблемой при миграции со spring 1.2.7 в 3.0.2:
ul 8, 2010 5:03:40 PM org.apache.catalina.core.StandardContext listenerStart
SEVERE: Exception sending context initialized event to listener instance of class com.xxx.webapp.listener.UserCounterListener
java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!

У меня действительно используется два листенера в web.xml:
<listener>
      <listener-class>com.xxx.webapp.listener.StartupListener</listener-class>
   </listener>
   <listener>
      <listener-class>com.xxx.webapp.listener.UserCounterListener</listener-class>
   </listener>

оба наследуются от ContextLoaderListener, оба важны, объединить в один не могу по идеологическим причинам. Но томкэт, как видно из куска лога не пропускает два листенера. Интересно, что в 1.2.7 все пропускало нормально в том же окружении. Может кто знает, каким образом можно оставить два листенера наследуясь от ContextLoaderListener?

Это сообщение отредактировал(а) vaz - 8.7.2010, 17:30
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.1132 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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