Ich habe für Hazelcast-Sitzung Replikation konfiguriert:Benutzerdefinierte Sitzung Listener mit Hazelcast-Sitzung Replikation
<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>
In meiner Web-Anwendung Benutzer kann Bestellung machen, die in der Sitzung bleibt bestehen, bis es fertig ist. Falls der Auftrag nicht abgeschlossen wurde und die Sitzung zerstört wurde (Benutzer ausgeloggt oder Sitzung abgelaufen), möchte ich alle Daten sichern, die von diesem Auftrag verarbeitet wurden.
Ohne Hz Sitzung Replikation, ich erreichen dies mit benutzerdefinierten Httpsessionlistener Implementierung wie:
@Override
public void sessionDestroyed(HttpSessionEvent se) {
Order order = (Order) se.getSession().getAttribute("order");
if (order != null) {
// Backup all data processed by order
}
}
und es funktioniert gut, aber mit Hz bekomme ich 2 verschiedene Sitzungen, die nicht synchronisiert werden:
switch (action) {
case "addOrderItems":
System.out.print("sesId=" + req.getSession().getId());
System.out.println("order=" + req.getSession().getAttribute("order"));
Drucke sesId=HZDCDC1C77E7934E03A9FE329AAB7053B0 [email protected]
während
@Override
public void sessionDestroyed(HttpSessionEvent se) {
System.out.print("sesId=" + se.getSession().getId());
System.out.println("order=" + se.getSession().getAttribute("order"));
druckt sesId=8748D170885C44B425FEEAA94AAB8A86 order=null
.
Es scheint, dass Hazelcast seine eigene Sitzung erstellt und zerstört und ich kann nicht auf diese Sitzung Ereignisse hören (oder nicht wissen).
Ist es möglich, beide Sitzungen synchron zu halten oder einen eigenen Listener für Hz-Sitzung zu implementieren?
Ty für Ihre Hilfe, es funktionierte wie gesagt. Allerdings habe ich nicht ganz verstanden, warum ich eine weitere Hz-Instanz erstellen soll. Es funktionierte perfekt mit der Standardinstanz, ohne 'init-param' für 'instanzname' zu spezifizieren. Ich habe "hookercast-default.xml" einfach 'entry-listener' hinzugefügt. Wird bald eine weitere Antwort mit einer konkreten Erklärung hinzufügen, wie es gemacht werden könnte. – tarashypka