Использование Session Spring Bean с DWR
Вопрос
Весна: 2.5.6.sec01
DWR: 2.0.5
Я хотел бы использовать сеанс -орезок из DWR. Это работает нормально, когда я настраиваю бобы как синглтон. Я прочитал этот репетитор: (http://directwebremoting.org/dwr/server/integration/spring.html) и изменил мой ApplicationContext.xml, но это все еще где -то неправильно.
My ApplicationContext.xml:
Это хорошо, но когда я использую функцию Ajax, я получаю это исключение:
11: 31: 09,593 Информация [defaultremoter] Exec: dbtestajaxfunc.testjndi () 11: 31: 09,609 Warn [defaultremoter] Выполнение метода: org.springframework.beans.factory.beancreationexcept Область «сеанс» не активен для текущего потока; Рассмотрите возможность определения прокси -сервера для этого боба, если вы намереваетесь ссылаться на него из Синглтона; Вложенное исключение-java.lang.illegalstateException: Запрос, связанный с потоком, не найдено: вы ссылаетесь на атрибуты запроса за пределами фактического веб-запроса или обрабатывают запрос за пределами первоначально принимающего потока? Если вы фактически работаете в веб -запросе и все еще получаете это сообщение, ваш код, вероятно, работает за пределами DispatcherServlet/DispatcherPortlet: в данном случае используйте requestContextListener или RequestContextFilter, чтобы выявить текущий запрос.
Кажется, что прокси AOP не был создан, но я не знаю почему.
Libs in the Classpath:
- AspectJrt.Jar
- AspectJweaver.jar
- cglib-nodep-2.2.jar
- dwr.jar
- Весна. Яр
- Spring-Aop.jar
- Spring-DWR-2.0.xsd
- Spring-Web.jar
- Spring-Webmvc.jar
Есть идеи? (Спасибо!)
Решение
Для того, чтобы бобы с сеансом или запросом работали весной, что-то должно связать текущий запрос и сеанс с текущим потоком. Обычно это делается DispatcherServlet
, но если вы этого не используете, вам нужна альтернатива.
Альтернатива в этом случае RequestContextListener
или же RequestContextFilter
, любой из которых вы можете подключить к своему web.xml
, и обе ОС, которые позволят вам использовать бобы с запросом и сеансом. Просто убедитесь, что вы настраиваете их в web.xml
Так что просьбы DWR проходят через них.
Другие советы
Проверьте, доступен ли к сеансу Bean Global или Singleton. В этом случае вам нужно снизить объем вызова бобов.