【发布时间】:2013-09-06 21:08:48
【问题描述】:
版本 7 中的框架 Vaadin 使用 Atmosphere 来启用推送逻辑,并且在系统可用时显然还可以“全面”通信, 即通常是来自浏览器的请求。
当 Atmosphere 不使用 WebSockets 时(例如,当 Jetty 未配置 websocket 支持时)这一切都很好,因此必须依赖长轮询或类似的 HTTP“假”推送方法,看起来很长Servlet 调用。
但是,当实际使用 WebSocket 时,Shiro 和 Hibernate 都会大声抱怨。
问题在于 Servlet 过滤器不会“启动”WebSockets。 Hibernate 使用 spring 的 OpenSessionInViewFilter 创建每个请求的连接,它还通过在退出时提交/关闭它来充当事务边界。 Shiro 使用 AbstractShiroFilter 的扩展创建 WebSubject 对象 - 它甚至将 ServletRequest 和 ServletResponse 对象粘贴到主题中 - 并在退出时清除“ThreadContext”(它只是一个 ThreadLocal)。
这里有人有什么好主意吗?我希望 Atmosphere 有类似的“try-finally”——比如“filterChain.continue”逻辑,这样就可以重新创建上面描述的这个进入/退出逻辑。但是,到目前为止,正如我所看到的,Atmosphere 没有这种过滤可用。
我很想听听建议。
【问题讨论】:
标签: hibernate websocket vaadin shiro atmosphere