![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
yray |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 16.6.2006 Где: Запорожье, Украин а Репутация: нет Всего: нет |
Я недавно начал разбираться с j2ee, возникла проблема и пока не могу ее решить. Видел, что на форуме есть знатоки Spring, поэтому прошу помощи. Суть в следующем. Нужно при первом запуске страницы проверить определенное условие и в зависимости от результата проверки использовать различный набор бинов, определенных в xml файлах. Т.е. есть, например, файлы applicationContext _1.xml и applicationContext _2.xml. Когда пользователь в браузере обращается к стартовой странице, я должен проверить условие, если оно истинно, то веб-приложение использует applicationContext _1.xml, если ложно, то applicationContext _2.xml.
Проблема в том, что я знаю только один способ определения application context для spring: с помощью web.xml:
Но указать в качестве параметра путь к applicationContext _1.xml и то applicationContext _2.xml одновременно нельзя, т.к. эти файлы взаимозаменяемы. А вот можно ли как-нибудь программно устанавливать путь к xml файлам с описанием бинов и где и как это можно сделать? Это сообщение отредактировал(а) yray - 26.9.2006, 15:07 |
|||
|
||||
powerOn |
|
|||
![]() software saboteur ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 4367 Регистрация: 7.10.2005 Репутация: 28 Всего: 159 |
Модератор: Название темы должно отражать ее суть!
|
|||
|
||||
yray |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 16.6.2006 Где: Запорожье, Украин а Репутация: нет Всего: нет |
Прошу прощения, не придумал более внятное название темы.
Наверное, тему можно было бы назвать "Application context в Sping framework" Я неоднократно в архиве видел, что здесь много участников форума имели дело со Spring'oм, поэтому очень надеюсь на помощь. Возможно, не совсем ясно раскрыл суть проблемы |
|||
|
||||
batigoal |
|
|||
![]() Нелетучий Мыш ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 6423 Регистрация: 28.12.2004 Где: Санктъ-Петербургъ Репутация: 16 Всего: 151 |
Переименовал тему.
-------------------- "Чтобы правильно задать вопрос, нужно знать большую часть ответа" (Р. Шекли) ЖоржЖЖ |
|||
|
||||
yray |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 16.6.2006 Где: Запорожье, Украин а Репутация: нет Всего: нет |
Спасибо, Lamer George. Сейчас название темы точно отражает суть вопроса.
Хочу дать некоторые пояснения. Дело в том, что я использую библиотеку Asegi Security for Spring, спомощью которой хотелось бы организовать контроль доступа к веб-приложению. Предполагается использовать SSO (единую точку входа) на сайт с помощью CAS если есть связь с сервером CAS или авторизацию с помощью веб-формы, если связи нет. То есть в первом случае мы имеем один файл конфигурации AcegiSecurity, а во втором случае конфигурация Acegi будет совершенно иной. Мне бы хотелось, чтобы при запуске стартовой страницы веб-приложения происходила проверка связи с сервером CAS и если связь есть, то приложение перенаправляется на сервер CAS и там пользователь проходит процесс идентификации\авторизации с помощью cas-настроек acegisecurity, если связи нет, то процесс логина происходит с помощью веб-форм настроек acegisecurity. Вся проблема и сводится к тому, чтобы динамически менять applicattion context spring в зависимости от условия. |
|||
|
||||
tux |
|
|||
![]() Летатель ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 1853 Регистрация: 10.2.2005 Где: msk.ru Репутация: 74 Всего: 132 |
Я вижу такой выход - не использовать средства Spring для конфигурирования веб-приложений, а загрузить конфигурацию вручную используя классы org.springframework.context.support.ClassPathXmlApplicationContext или org.springframework.context.support.FileSystemXmlApplicationContext.
|
|||
|
||||
_and |
|
|||
![]() 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] |
|||
|
||||
yray |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 16.6.2006 Где: Запорожье, Украин а Репутация: нет Всего: нет |
Большое спасибо за советы, сейчас буду пробовать реализовать один из подходов
|
|||
|
||||
_and |
|
|||
![]() Java-developer ![]() Профиль Группа: Участник Сообщений: 139 Регистрация: 6.8.2004 Где: Новокузнецк Репутация: 1 Всего: 4 |
yray, поделись решением своим а то интересно всё-таки как енто реализовать мона(вдруг еще кому придется такое же делать)
|
|||
|
||||
onsh76 |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 93 Регистрация: 20.11.2005 Где: Beautiful BC Репутация: 4 Всего: 5 |
А может проще будет дать уникальные имена бинам в двух спринговских конфиг.файлах (например, задав определенные префиксы), загрузить оба файла по обычной методике, прописав их в web.xml. Далее написать свой бин, в котором делать обычную проверку проверку на связь с сервером CAS. Если она существует, то выдергивать КАСовский бин из первого контекста по префиксу и базовому имени. Если же связи нет, бросай exception, ну а в обработке exception-а берешь другой префик и подстыковываешь его к базовому имени. |
|||
|
||||
yray |
|
|||
Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 16.6.2006 Где: Запорожье, Украин а Репутация: нет Всего: нет |
Спасибо всем за помощь. Я изначально сделал так, как предлагал _and, то есть переопределил org.springframework.web.context.ContextLoaderListener и прописал его в web.xml, но этот способ не подходит, т.к. ContextLoaderListener, если я не ошибаюсь, как и присуще Listener'y срабатывает только один раз при запуске веб-сервера или деплое веб-приложения. Способ, предложенный onsh76 тоже можно реализовать. Пока занят несколько другими вещами, поэтому написать о том, как это реализовал пока не могу
|
|||
|
||||
vaz |
|
|||
Новичок Профиль Группа: Участник Сообщений: 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 |
|||
|
||||
![]() ![]() ![]() |
Правила форума "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. |