自定义会话监听器:与我已经Hazelcast配置会话复制Hazelcast会话复制
<filter>
<filter-name>hazelcast-filter</filter-name>
<filter-class>com.hazelcast.web.WebFilter</filter-class>
<init-param>
<param-name>map-name</param-name>
<param-value>my-sessions</param-value>
</init-param>
<init-param>
<param-name>cookie-name</param-name>
<param-value>hazelcast.sessionId</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>hazelcast-filter</filter-name>
<url-pattern>/</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>INCLUDE</dispatcher>
<dispatcher>REQUEST</dispatcher>
</filter-mapping>
<listener>
<listener-class>com.hazelcast.web.SessionListener</listener-class>
</listener>
在我的web应用程序的用户可以订购,直到它完成其坚持会话。如果订单没有完成,会话被销毁(用户注销或会话过期),我想备份该订单处理的所有数据。
没有赫兹会话复制,我完成这个自定义HttpSessionListener实现,如:
@Override
public void sessionDestroyed(HttpSessionEvent se) {
Order order = (Order) se.getSession().getAttribute("order");
if (order != null) {
// Backup all data processed by order
}
}
,它工作正常,但赫兹我得到未同步2个不同的会话:
switch (action) {
case "addOrderItems":
System.out.print("sesId=" + req.getSession().getId());
System.out.println("order=" + req.getSession().getAttribute("order"));
打印sesId=HZDCDC1C77E7934E03A9FE329AAB7053B0 [email protected]
while
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.print("sesId=" + se.getSession().getId());
System.out.println("order=" + se.getSession().getAttribute("order"));
打印sesId=8748D170885C44B425FEEAA94AAB8A86 order=null
。
看来,Hazelcast创建和销毁它自己的会话,我不能(或不知道如何)在这个会话事件上听。
是否可以保持两个会话同步或实现您自己的Hz会话监听器?
Ty for your help,it worked as you said。但是,我并没有完全明白为什么我应该创建另一个Hz实例。它使用默认实例很好地工作,没有为'instance-name'指定'init-param'。我只是将'entry-listener'添加到'hazelcast-default.xml'中。将很快添加另一个答案,具体解释如何完成。 – tarashypka