使用会话范围的Spring bean和DWR

时间:2010-01-26 10:47:01

标签: spring dwr

春天: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 INFO [DefaultRemoter]   执行:DBTestAjaxFunc.testJNDI()   11:31:09,609 WARN [DefaultRemoter]   方法执行失败:   org.springframework.beans.factory.BeanCreationException:   使用名称创建bean时出错   'scopedTarget.dbtestajax':范围   'session'不适用于   当前线程;考虑定义一个   如果你这个bean的作用域代理   打算从a中引用它   单;嵌套异常是   java.lang.IllegalStateException:没有   找到线程绑定请求:是吗?   引用请求属性   在实际的Web请求之外,或   处理外的请求   最初接收线程?如果你   实际上是在网络中运作   请求并仍然收到此   消息,您的代码可能正在运行   在外面   DispatcherServlet的/ DispatcherPortlet的:   在这种情况下,使用   RequestContextListener或   RequestContextFilter来公开   当前的要求。

似乎没有创建aop代理,但我不知道为什么。

类路径中的Libs:

  • aspectjrt.jar
  • aspectjweaver.jar
  • CGLIB的节点p-2.2.jar
  • dwr.jar
  • 的spring.jar
  • 弹簧aop.jar
  • 弹簧DWR-2.0.XSD
  • 弹簧web.jar
  • 弹簧webmvc.jar

有什么想法吗? (谢谢!)

2 个答案:

答案 0 :(得分:7)

为了使会话或请求范围的bean在Spring中工作,必须将当前请求和会话与当前线程相关联。通常情况下,这将由DispatcherServlet完成,但如果您不使用,则需要替代方案。

在这种情况下,替代方案是RequestContextListenerRequestContextFilter,您可以将其中任何一个连接到web.xml,以及两个允许您使用请求和会话的操作系统范围豆。只需确保在web.xml中配置它们,以便DWR请求通过它们。

答案 1 :(得分:1)

检查全局或单例是否访问会话范围bean。在这种情况下,您需要降低调用bean的范围。