我正在开发一个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调用控制器? 感谢
答案 0 :(得分:1)
问题是您的控制器是会话范围的,并且您尝试从没有HTTP会话可用的上下文中调用其方法。
因此,我假设您的控制器结合了依赖于HTTP会话(因此session
范围)的功能,以及需要在会话外调用的功能(例如update()
方法)。
如果是这样,您可以通过将不需要HTTP会话的功能移动到单独的bean(没有session
范围)来解决此问题。