Spring:2.5.6.SEC01
DWR:2.0.5
我想使用 DWR 中的会话范围 bean。当我将 bean 配置为单例时,它工作得很好。我读过这个导师:
(http://directwebremoting.org/dwr/server/integration/spring.html)
并修改了我的applicationContext.xml,但它仍然是错误的地方。
我的 applicationContext.xml:
http://pastebin.com/m8d57f18
效果很好,但是当我使用 AJAX 函数时,我得到这个异常:
11:31:09,593 信息 [默认远程]
执行:DBTestAjaxFunc.testJNDI()
11:31:09,609 警告 [默认远程]
方法执行失败:
org.springframework.beans.factory.BeanCreationException:
使用名称创建 bean 时出错
'scopedTarget.dbtestajax':范围
“会话”未处于活动状态
当前线程;考虑定义一个
如果您有此 bean 的作用域代理
打算从一个参考它
单例;嵌套异常是
java.lang.IllegalStateException:否
发现线程绑定请求:你是吗
参考请求属性
在实际的网络请求之外,或者
处理外部请求
最初接收线程?如果你
实际上是在网络中运行的
请求并仍然收到此消息
消息,您的代码可能正在运行
之外
DispatcherServlet/DispatcherPortlet:
在这种情况下,使用
RequestContextListener 或
RequestContextFilter 公开
当前请求。
看来 aop 代理没有创建,但我不知道为什么。
类路径中的库:
- aspectjrt.jar
- aspectjweaver.jar
- cglib-nodep-2.2.jar
- dwr.jar
- spring.jar
- spring-aop.jar
- spring-dwr-2.0.xsd
- spring-web.jar
- spring-webmvc.jar
有什么想法吗? (谢谢!)
Spring: 2.5.6.SEC01
DWR: 2.0.5
I would like to use a session scoped bean from DWR. It works fine, when I configure the bean to be a singleton. I read this tutor:
(http://directwebremoting.org/dwr/server/integration/spring.html)
and modified my applicationContext.xml, but it is still wrong somewhere.
My applicationContext.xml:
http://pastebin.com/m8d57f18
It ork well, but when I use an AJAX function, I get this exception:
11:31:09,593 INFO [DefaultRemoter]
Exec: DBTestAjaxFunc.testJNDI()
11:31:09,609 WARN [DefaultRemoter]
Method execution failed:
org.springframework.beans.factory.BeanCreationException:
Error creating bean with name
'scopedTarget.dbtestajax': Scope
'session' is not active for the
current thread; consider defining a
scoped proxy for this bean if you
intend to refer to it from a
singleton; nested exception is
java.lang.IllegalStateException: No
thread-bound request found: Are you
referring to request attributes
outside of an actual web request, or
processing a request outside of the
originally receiving thread? If you
are actually operating within a web
request and still receive this
message, your code is probably running
outside of
DispatcherServlet/DispatcherPortlet:
In this case, use
RequestContextListener or
RequestContextFilter to expose the
current request.
It seems, that the aop proxy wasn't created, but I don't know why.
Libs in the classpath:
- aspectjrt.jar
- aspectjweaver.jar
- cglib-nodep-2.2.jar
- dwr.jar
- spring.jar
- spring-aop.jar
- spring-dwr-2.0.xsd
- spring-web.jar
- spring-webmvc.jar
Any idea? (Thanks!)
发布评论
评论(2)
为了使会话范围或请求范围的 bean 在 Spring 中工作,必须将当前请求和会话与当前线程关联起来。通常,这将由 DispatcherServlet 完成,但如果您不使用它,那么您需要一个替代方案。
这种情况下的替代方案是
RequestContextListener
或RequestContextFilter
,您可以将其中一个连接到您的web.xml
,并且两个操作系统都允许您使用 request - 和会话范围的 bean。只需确保在web.xml
中配置它们,以便 DWR 请求通过它们。In order for session- or request-scoped beans to work in Spring, something has to associate the current request and session with the current thread. Normally, this would be done by
DispatcherServlet
, but if you're not using that, then you need an alternative.The alternative in this case is
RequestContextListener
orRequestContextFilter
, either of which you can wire in to yourweb.xml
, and both os which will allow you to use request- and session-scoped beans. Just make sure that you configure them inweb.xml
so that DWR requests pass through them.检查会话作用域 bean 是否由全局或单例访问。在这种情况下,您需要降低调用 bean 的范围。
Check if the Session scoped bean is accessed by a global or a singleton. In that case you need to lower the scope of calling bean.