Ich habe eine 3-stufige Anwendung mit Glassfish 3.1.2.2, MySQL-Datenbank und einer Swing-Client-Anwendung. Ist es irgendwie möglich, einen Datenbankserverabsturz zu behandeln?
Ich habe versucht, den MySQL-Dienst während der Ausführung meiner Anwendung zu stoppen. Dann bekomme ich javax.ejb.EJBAccessException-Ausnahmen jedes Mal, wenn ich versuche, über eine meiner Session-Beans auf die Datenbank zuzugreifen.
Ich möchte den Benutzer darüber informieren, dass die Datenbank derzeit nicht verfügbar ist. Außerdem möchte ich meine Anwendung in Form eines "Sleep-Modus" einrichten, bis die Datenbank wieder läuft und läuft.
Was wäre ein guter (und möglicherweise einfacher) Ansatz für ein solches Szenario?
Vielen Dank für Ihre Hilfe im Voraus!
A) Stellen Sie sicher, dass Sie den Glassfish Connection Pool für die automatische Wiederherstellung / Wiederherstellung konfigurieren
Legen Sie in der Konfiguration des Glassfish-JDBC-Verbindungspools die Werte für Folgendes fest:
is-connection-validation-required, validate-atmost-once-period-in-seconds, connection-creation-retry-attempts, connection-validation-method, connection-creation-retry-interval-in-seconds, ping
Glassfish-Konfiguration jdbc-connection-pool Eigenschaften
Glassfish-Administrator - create-jdbc Unterbefehl -connection-pool
Schritte:
http://localhost:4848
(oder verwenden Sie den von Ihnen während der Installation angegebenen Port. B) Implementieren der Anwendungsfehlerbehandlung / DB-Überwachung & amp; Warnungen
Obligatorisch: Es werden schwerwiegende Benutzerfehler auf der "Infrastrukturebene" und Alert-Support-Mitarbeiter ausgelöst.
Erstellen Sie eine einfache JMX-Klasse zum Senden einer Benachrichtigung & amp; rufe seine Methode auf Wenn ein schwerwiegender Fehler auftritt, JMX MBean-Klasse, die Benachrichtigungen sendet . Sie können eine JMX-Monitorkonsole verwenden, um den Status von Servern zu beobachten - einige dieser Konsolen senden E-Mail-Warnungen (z. B. JManage und RHQ) und es gibt Brücken für den Zugriff von HTTP / AJax oder anderen Sprachen (z. B. Jolokia kann JavaScript / Perl / Java-API verwenden, um auf JMX-Benachrichtigungen zuzugreifen).
Verwenden Sie die Google Kalender-API , um die Fehlermitteilung an den Google-Kalender der Mitarbeiter zu senden (1 oder 2 Minuten in Zukunft). Konfigurieren Sie dann Google Kalender, um E-Mail- / SMS-Benachrichtigungen zu senden. So erhalten Sie eine Fehlermeldung direkt an das Support-Personal in nahezu Echtzeit. Dies unterliegt den Google-Nutzungsbeschränkungen (ein Höflichkeitslimit von 10.000 Suchanfragen pro Tag, also stellen Sie sicher, dass Ihre Apps nicht übermäßig Buggy sind und verwenden Sie Logik, um die Anzahl der in einer Stunde / Tag / Woche gesendeten Nachrichten zu begrenzen)
Wünschenswert: Überwachen Sie die Datenbank (und wahrscheinlich den App-Server) und informieren Sie das Supportpersonal über Ausfälle
In allen Fällen erfolgt die Einrichtung nicht sofort - am besten als separates Miniprojekt zu implementieren & amp; tun Sie es richtig - am besten, um Unterstützungspersonal dabei zu haben.
Wenn diese "out of scope" sind, dann erstellen Sie Ihren eigenen einfachen Monitor:
Über seinen eigenen Connection Pool wird der Zustand der Datenbank überwacht. Sie könnten einen Interceptor erstellen und abholen, wenn db ausfällt. Der Container wird versuchen, die Verbindung wiederherzustellen, aber Sie werden nicht unbedingt wissen, wann er erfolgreich ist. Sobald Sie den Fehler feststellen, müssen Sie einen Semaphor irgendwo setzen. Dann müssten Sie einen Timer starten, um regelmäßig den Zustand der db zu überprüfen und das Semaphor zurückzusetzen, sobald es wieder da ist. Zuletzt müsstest du deine App codieren, um den Semaphor zu respektieren.
Dies ist ein Vorschlag auf hoher Ebene. Viel Glück.
Alternativ können Sie möglicherweise alle Ereignisse mit JMX verknüpfen. Ich bin mir aber nicht sicher.