2013-04-15 2 views
1

Я разрабатываю веб-приложение, имеющее несколько весенних контекстов. Он имеет основной контекст, который содержит бизнес-логику, спящий сеанс и основные потребности приложения, а также другие контексты для привязки весны mvc. Обычно приложение работает отлично и все, но когда я обновить основной контекст и попытаться достичь спящего режима сеанса из других контекстов, спящий режим сеанса выдает это исключение:Освежающий контекст контекста делает сеанс Hibernate выбрасывает это исключение: сеанс не найден для текущего потока

org.hibernate.HibernateException: No Session found for current thread at   
org.springframework.orm.hibernate4.SpringSessionContext.currentSession(SpringSessionContext.java:97) at 
org.hibernate.internal.SessionFactoryImpl.getCurrentSession(SessionFactoryImpl.java:980)... 

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

Есть ли способ, чтобы я мог освежить весенний контекст в целости и сохранности?

P.S: Я могу получить другие объекты контекста весны без проблем. И приложение отлично работает с несколькими контекстами, пока я не обновляю основной контекст. И я попробовал обновить контекст mvc, из которого я вызываю сессию спящего режима, после основного контекста. Все те же исключения в этом контексте mvc.

ответ

0

Причина, по которой вы получаете эту ошибку, заключается в том, что вы удаляете сеансы Hibernate из-под потоков. Сессии, из того, что я помню, связаны с Thread, которые их создали. Вот почему вы не можете передать прокси-сервер Hibernate в рамки, такие как BlazeDS. Как только прокси-сервер покидает поток, сеанс не связан с ним, и вы теряете способность идти после элементов, которые проксируются.

Одним из решений может быть не использование прокси-серверов, а полная загрузка всех отношений. Однако это будет подрывать одно из основных преимуществ использования ОРМ. Или, если вы каким-то образом заново запустите все темы в вопросах, создавая новые потоки, связанные с новым сеансом (Hibernate), которые могут работать тоже.

+0

Хорошо, но вот в чем проблема: я не создаю свои объекты в весеннем контексте, они создаются в сеансе спящего режима и не связаны с весенним контекстом. Если поток уничтожен и создан, то сеанс hibernate и сущности создаются в новом потоке. И я попробовал обновление контекста, прежде чем он должен работать во множестве весенних контекстов. – Masterhead

Смежные вопросы