Wie wird mit Datenbankabstürzen (Glassfish / MySQL) umgegangen?

8

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!

    
salocinx 26.10.2012, 11:18
quelle

2 Antworten

29

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:

  • Attribute: 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:

  1. Unter der Annahme, dass Glassfish ausgeführt wird (z. B. Server in der Netbeans-Registerkarte Dienste starten, Server öffnen und mit der rechten Maustaste auf Glassfish klicken), sollte der Domänenadministratorserver
  2. ausgeführt werden
  3. Öffnen Sie die Admin-Konsole im Webbrowser: http://localhost:4848 (oder verwenden Sie den von Ihnen während der Installation angegebenen Port.
  4. Öffnen Sie links im Menü Allgemeine Aufgaben Ressourcen - & gt; JDBC und klicken Sie auf JDBC-Verbindungspools
  5. Klicken Sie auf den POOL-NAME Ihres Verbindungspools (oder erstellen Sie einen neuen, indem Sie auf die Schaltfläche Neu klicken)
  6. Wählen Sie Erweitert Tab & amp; Geben Sie Folgendes ein:
  7. Nur einmal bestätigen: (z. B. 60) in Sekunden
  8. Wiederholungsversuche für Creation: (z. B. 3)
  9. Wiederholungsintervall: (z. B. 10) in Sekunden
  10. Verbindungsvalidierung: (Tick) Erforderlich
  11. Validierungsmethode: (z. B. Auto-Commit)
  12. Andere erweiterte Eigenschaften wie gewünscht
  13. Wählen Sie Registerkarte Allgemein & amp; Geben Sie Folgendes ein:
  14. Ping (Tick)
  15. Andere allgemeine Eigenschaften wie gewünscht

B) Implementieren der Anwendungsfehlerbehandlung / DB-Überwachung & amp; Warnungen

  1. 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)

  2. Wünschenswert: Überwachen Sie die Datenbank (und wahrscheinlich den App-Server) und informieren Sie das Supportpersonal über Ausfälle

    • Zabbix open source hat integrierte mySQL-Überwachung und -Warnung - ist leicht, erfordert aber Setup & amp; Konfiguration
    • Hyperic open source verfügt über Erweiterungs-Plug-ins für mySQL-Überwachung und integrierte Alarmierung - ist schwergewichtig, kann sich komplex einrichten & amp; Konfigurieren Sie
    • Nagois open source ist die Standardeinstellung für * nix-Betriebssysteme - ist schwergewichtig, kann komplex eingerichtet und konfiguriert werden

    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:

    • Ein EJB-Timer zum Ausführen einer geplanten einfachen Testabfrage für Ihre Datenbank - falls dies fehlschlägt, senden Sie eine Warnung (über JMX / Google Kalender / Java Mail / SMS-Gateway-API). Oder verwenden Sie den quelloffenen Quellplaner, um den gleichen Job auszuführen
Glen Best 06.11.2012, 04:18
quelle
1

Ü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.

    
Preston 28.10.2012 15:25
quelle

Tags und Links