Я 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>
В моем вебе-приложениях пользователя может сделать заказ, который сохраняется в сессии, пока не будет закончен. Если заказ не был завершен, а сеанс был уничтожен (пользователь вышел из системы или закончился сеанс), я хочу сделать резервную копию всех данных, которые были обработаны этим заказом.
Без репликации сессии Гц, я сделать это с обычаем 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]
@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 для вашей помощи, он работал, как вы сказали. Тем не менее, я не совсем понял, почему я должен создать другой экземпляр Hz. Он отлично справился с экземпляром по умолчанию без указания 'init-param' для' instance-name'. Я просто добавил 'entry-listener' в' hazelcast-default.xml'. Скоро добавит еще один ответ с конкретным объяснением того, как это можно сделать. – tarashypka