在Weblogic 12c上使用primepush(p:socket)时,在注销时未从SessionRegistry中删除会话

时间:2016-06-09 22:07:53

标签: spring primefaces weblogic atmosphere

我有一个弹簧应用程序(弹簧4)并使用primefaces(版本5.1)用于UI。我有一个页面,我只使用p:socket从服务器获取更新:

<p:socket transport="sse" channel="#{backingBean.refreshChannel}" autoConnect="true">
    <p:ajax process="@this" update="fplUpdateDialogId" event="message" oncomplete="PF('fplUpdateDialog').show()"/>
</p:socket>

我使用tomcat 7进行本地开发,使用weblogic 12c进行生产部署。消息推送到客户端非常适用于两个应用程序服务器。

这里的问题是,当用户通过单击注销按钮注销时,会话不会从会话注册表中删除。但是这个问题只出现在weblogic中。在tomcat上它很好。

如果我从页面中删除p:套接字,它可以正常工作。所以这必须与weblogic-primefaces-atmosphere框架三角形相关(primefaces使用大气框架将消息推送到客户端)。

我已经调试过并且看到session.invalidate()在SecurityContextLogoutHandler类中被明确调用(使用spring security 3.2.7)。在session.invalidate()时,通过调用sessionDestroyed方法通知HttpSessionEventPublisher类,即HttpSessionListener。然后HttpSessionEventPublisher在应用程序上下文中发布HttpSessionDestroyedEvent。稍后会话将从会话注册表中删除。

在weblogic上,即使调用session.invalidate(),HttpSessionEventPublisher也不会被告知会话破坏事件。从现在开始,我不知道为什么。这件事从未被解雇过吗?如果被解雇了,发生了什么事?我搜索了几个小时但找不到有用的提示。

0 个答案:

没有答案
相关问题