Erweiterungen

This commit is contained in:
2025-09-18 20:15:55 +02:00
parent cf1bf1eaa0
commit fdd319a461

View File

@@ -562,34 +562,55 @@ public final class MainView extends Main implements BeforeEnterObserver
@ClientCallable
public void logout() {
UI ui = UI.getCurrent();
try {
// Cleanup in separatem Thread ohne UI-Navigation
// Wartemeldung anzeigen
var dialog = showWaitDialog("Emulator wird heruntergefahren, bitte warten...");
// Cleanup in separatem Thread - KEINE sofortige Session-Manipulation
executor.submit(() -> {
try {
logger.info("Shutdown wird gestartet...");
shutdown();
logger.info("Shutdown erfolgreich abgeschlossen");
} catch (Exception ex) {
logger.error("Fehler beim Shutdown während Logout", ex);
}
});
} finally {
// UI-Update erst NACH vollständigem Shutdown
ui.access(() -> {
try {
logger.info("Starte Logout-Cleanup nach Shutdown");
dialog.close();
// Session cleanup sofort
// Session cleanup erst nach Shutdown
if (niederlassung != null) {
Application.activeNiederlassungen.remove(niederlassung.name());
logger.info("Niederlassung {} aus aktiven Niederlassungen entfernt", niederlassung.name());
}
if (username != null) {
Application.activeUsers.remove(username);
logger.info("Benutzer {} aus aktiven Benutzern entfernt", username);
}
// Session invalidieren
UI.getCurrent().getSession().getSession().invalidate();
// Session invalidieren und weiterleiten erst ganz am Ende
ui.getSession().getSession().invalidate();
logger.info("Session invalidiert - Weiterleitung zur Login-Seite");
ui.getPage().setLocation("login");
// Direkte Browser-Weiterleitung ohne Vaadin Navigation
UI.getCurrent().getPage().setLocation("login");
} catch (Exception ex) {
logger.error("Fehler beim Logout UI-Update", ex);
// Fallback: Browser reload
ui.getPage().reload();
}
});
}
});
} catch (Exception ex) {
logger.error("Fehler beim Logout", ex);
// Fallback: Browser reload
UI.getCurrent().getPage().reload();
// Fallback: Browser reload falls sofortiger Fehler
ui.getPage().reload();
}
}
}