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 @ClientCallable
public void logout() { public void logout() {
UI ui = UI.getCurrent();
try { 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(() -> { executor.submit(() -> {
try { try {
logger.info("Shutdown wird gestartet...");
shutdown(); shutdown();
logger.info("Shutdown erfolgreich abgeschlossen");
} catch (Exception ex) { } catch (Exception ex) {
logger.error("Fehler beim Shutdown während Logout", 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) { if (niederlassung != null) {
Application.activeNiederlassungen.remove(niederlassung.name()); Application.activeNiederlassungen.remove(niederlassung.name());
logger.info("Niederlassung {} aus aktiven Niederlassungen entfernt", niederlassung.name());
} }
if (username != null) { if (username != null) {
Application.activeUsers.remove(username); Application.activeUsers.remove(username);
logger.info("Benutzer {} aus aktiven Benutzern entfernt", username);
} }
// Session invalidieren // Session invalidieren und weiterleiten erst ganz am Ende
UI.getCurrent().getSession().getSession().invalidate(); ui.getSession().getSession().invalidate();
logger.info("Session invalidiert - Weiterleitung zur Login-Seite");
ui.getPage().setLocation("login");
// Direkte Browser-Weiterleitung ohne Vaadin Navigation } catch (Exception ex) {
UI.getCurrent().getPage().setLocation("login"); logger.error("Fehler beim Logout UI-Update", ex);
// Fallback: Browser reload
ui.getPage().reload();
}
});
}
});
} catch (Exception ex) { } catch (Exception ex) {
logger.error("Fehler beim Logout", ex); logger.error("Fehler beim Logout", ex);
// Fallback: Browser reload // Fallback: Browser reload falls sofortiger Fehler
UI.getCurrent().getPage().reload(); ui.getPage().reload();
} }
} }
} }