调用控制器形成另一个bean。找不到线程绑定请求

时间:2014-06-23 10:18:19

标签: java spring controller jms

我正在开发一个spring mvc,我希望我的控制器能够监听应用程序事件 通过@controller我从网页发送一条jms消息 并且我在接收消息jms时尝试通知控制器,以便将一些数据推送到网页

首先,我尝试使用观察者模式,将控制器实现为ApplicationListener

@ Controller ("MyController") 
@ Scope (value = "session" = proxyMode ScopedProxyMode.TARGET_CLASS) 
public class MyController implements Serializable, ApplicationListener <CustomEvent>

然后我在接收到jms消息时尝试从另一个bean调用控制器方法

@Resource(name="MyController")
private MyController c;
c.update(String data);

但我总是得到同样的错误

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.

有没有办法从另一个bean调用控制器? 感谢

1 个答案:

答案 0 :(得分:1)

问题是您的控制器是会话范围的,并且您尝试从没有HTTP会话可用的上下文中调用其方法。

因此,我假设您的控制器结合了依赖于HTTP会话(因此session范围)的功能,以及需要在会话外调用的功能(例如update()方法)。

如果是这样,您可以通过将不需要HTTP会话的功能移动到单独的bean(没有session范围)来解决此问题。