![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
4epT |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Доброе утро, собственно проблема в том, что после конфигурации SessionFactory через Spring он не инициализируется.
Вот его конфигурация:
Файл hibernate.cfg.xml:
Так же в файле конфигурации указываю какие пакеты сканировать:
В DAO классе создается приватная переменная sessionFactory (get и set методы я для нее не делал) .... и в момент вызова какого либо метода класса sessionFactory null. Кто может подсказать что я не правильно делаю ? |
||||||
|
|||||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
На самом DAO какие нибудь ещё аннотации висят?... безопасность, транзакции...
Посмотри типы бинов в рантайме sessionFactory и dao-бинов... -------------------- Таково моё общее мнение. |
|||
|
||||
4epT |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
На самом DAO классе висит еще аннотация @Repository, в транзакции методы пока что не оборачивал.
а вот насчет этого можно поподробнее ? Как посмотреть и зачем ? Это сообщение отредактировал(а) 4epT - 13.7.2011, 10:52 |
||||
|
|||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
Да сделай так, чтобы тот же DAO реализовывал интерфейс ApplicationContextAware. Он добавит метод, где присваивается applicationContext, сохрани его в какое-нибудь поле класса. Затем в методе, который можешь вызвать, брось брекпоинт. А в отладке на брекпоинте через watch можно повызывать метод getBean с разными параметрами у контекста. Он будет возвращать бины. Так можно проверить, существуют ли бины в контексте, в каком количестве и какой у них класс... Короче можно посмотреть что творится с контекстом в рантайме.
-------------------- Таково моё общее мнение. |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Хорошо, попробую .. и отпишусь о результате ) Спасибо! P.s. я надеюсь это ведь делается только для отладки ?) |
|||
|
||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
applicationContext бывает удобно получать бинам-синглтонам, чтоб они могли выдёргивать из контекста прототипы и сессионные бины...
-------------------- Таково моё общее мнение. |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
А чем удобнее выдергивать бины из контекста, чем сразу описать нужные бины полями в классе ?
|
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Получишь такой баг как "Scope Impedance". Выйдет ситуация такая: твой бин в scope="singleton" "проаутоварится" бинами в более низком scope только один раз - при инициализации. И зашарит эти поля для всех конечных пользователей. -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Не очень понятно насчет бага ... в конечном счете он все равно про инициализирует эти поля и с этими полями можно будет нормально работать.
Например я ведь могу сделать singleton класс, в котором будут "аутоварится" все бины (к примеру Dao классы). все бины сделать static, и через этот класс всегда доставать нужный мне бин ... как тут проявится этот баг ? |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
4epT,
Ты привел пример, когда все бины у тебя сервисы. А вот что ты будешь делать, если у тебя этот синглетонный сервис на этапе вызова должен обслужить сессионные данные конкретного пользователя? Сначала почитай , а потом ругайся -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Ты меня не правильно понял. Я даже не пытался ругаться =) Я знал что я не прав, но мне хотелось понять когда именно проявляется этот баг. теперь все понятно. спасибо. |
|||
|
||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
клерик всё грамотно задвинул )
-------------------- Таково моё общее мнение. |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Хм, очень интересно ) сделал все как вы посоветовали ... в момент вызова любого метода dao класса у меня applicationContext = null.
Вот код инициализации ApplicationContext:
сам arg0 - не пустой, в нем есть множество бинов .... в том чсиле и бин "countryDaoImpl" - это класс помеченный аннотацией @Repository. Так же в arg0 есть и бин - "sessionFactory", проинициализирован он вроде нормально (не null, хотя многие поля там все таки null, но мне кажется что так и должно быть). так же хочется заметить что в момент вызова метода "setApplicationContext" sessionFactory не null. Где то у меня происходит повторная инициализация либо какой то баг с временем жизни этого бина, хотя если время жизни бина заканчивается повторная его инициализация должна ведь заного все поля обносить. Поправьте если я ошибаюсь. Это сообщение отредактировал(а) 4epT - 14.7.2011, 00:02 |
|||
|
||||
Farmazon |
|
|||
![]() Разработчик ![]() ![]() Профиль Группа: Участник Сообщений: 265 Регистрация: 7.7.2006 Репутация: 3 Всего: 5 |
У тебя DAO точно через контекст создаётся?... Для любого бина созданного в контексте и меющего интерфейс ApplicationContextAware вызывается метод setApplicationContext...
Кажется, как будто ты DAO вне контекста создал... Это сообщение отредактировал(а) Farmazon - 14.7.2011, 05:40 -------------------- Таково моё общее мнение. |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
setApplicationContext у меня вызывается в момент когда стартует томкет, это означает что этот бин создается именно в контексте ?
|
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
А как правильно инициализировать DAO бин ? Мне нужно что бы он был проинициализирован в JSF бине ....
я делаю вот так вот:
но counrtyDao = null (( |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Вот!!!
Ты же о JSF ничего не говорил. У тебя @Autowired получается NULL, потому как ты этот UserBean достаешь не из Spring контейнера, а из JSF контейнера. Что бы все нормально работало, надо все JSF-обращение отделегировать в Spring. Т.е. тебе нужно сконфигурить только один контейнер - Spring. А JSF будет им пользоваться. Почитай про интерагцию JSF+Spring и будет тебе счастье. Я тут на форуме тоже не раз уже об этом писал. -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Окей, почитаю ) спасибо!
А как насчет варианта что бы сделать класс в котором все спринг бины будут статик ? и из JSF выдергивать нужные бины ? Это сообщение отредактировал(а) 4epT - 14.7.2011, 09:46 |
|||
|
||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Не-а. Такое не нужно у тебя уже есть такой объект - applicationContext. Ты его можешь сделать статик полем в каком-то классе, и инициализировать это static поле каким-то ServletContextListener.
И доставая applicationContext с помощью WebApplicationContextUtils Но, по-моему, это излишне. Можно всегда выкрутиться теми способами, которые уже существую и показали себя со временем. -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
4epT |
|
||||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Попробовал так как ты посоветовал ) Дописал в web.xml:
Добавил faces-config.xml:
Managed bean остался таким же:
Но при вызове метода, countryDao = null. Это означает что этот бин находиться не в том контексте ? |
||||||
|
|||||||
MisterCleric |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1043 Регистрация: 16.2.2006 Где: Харьков, Украина Репутация: 33 Всего: 38 |
Привет.
Конечно не там. Если ты уж перешел на Spring, то и отказывайся от JSF-контейнера. Это class должен быть помечен так:
т.е. сделай его полностью spring'овским -------------------- ПРИШЕЛ, УВИДЕЛ - ПЕРЕПИСАЛ... |
|||
|
||||
4epT |
|
|||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
Так и думал .... сейчас попробую )
И еще такой вопрос, во многих примерах (почти все такие находил) спринг бин (в данном случае countryDao), инжекстится (managed-property) в jsf бин, и в faces-config прописываются другой параметр (не помню как называется )... почему везде приводят именно такой пример ? Это сообщение отредактировал(а) 4epT - 17.7.2011, 22:26 |
|||
|
||||
4epT |
|
||||
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 784 Регистрация: 13.8.2007 Репутация: 3 Всего: 3 |
После того как сделал UserBean полностью спринговым, стало писать вот такое:
Как мне теперь работать с этим бином ? я не могу с ним работать так как с managed jsf bean ? В бине объявлены два поля:
и для них созданы get и set методы Это сообщение отредактировал(а) 4epT - 17.7.2011, 23:06 |
||||
|
|||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java EE (J2EE) и Spring | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |