Beispiel 2: MDB automatisch stoppen, wenn eine Systemressource nicht verfügbar ist
Als Vorbereitung auf die Nichtverfügbarkeit einer Systemressource konfigurieren Sie das System so, dass die MDB nach wenigen Nachrichtenfehlern automatisch gestoppt wird und Sie über das Problem benachrichtigt werden.
Vorbereitende Schritte
Das Ziel, an dem die MDB empfangsbereit ist, muss ein Ausnahmeziel verwenden. Dieses Ausnahmeziel kann das Systemstandardausnahmeziel oder ein speziell für das Ziel konfiguriertes Ausnahmeziel sein.
- die Unternehmensanwendung, die die MDB enthält
- die abhängigen externen Systemressourcen
- der Wert 3 für Schwellenwert für aufeinanderfolgende Nachrichtenfehler. Dies ist die maximal zulässige Anzahl aufeinanderfolgender Fehler bei der Nachrichtenzustellung. Danach wird die MDB gestoppt. Diese Eigenschaft gilt für Nachrichtensätze.
- der Wert 5000 für Verzögerung zwischen Wiederholungen fehlerhafter Nachrichten, d. h. für die Zeit in Millisekunden, nach deren Ablauf eine Nachricht, deren Zustellung fehlgeschlagen ist, erneut an die MDB übermittelt werden kann. In dieser Zeit können weitere Nachrichten zugestellt werden, sofern Schwellenwert für aufeinanderfolgende Nachrichtenfehler und die maximale Parallelität nicht auf 1 gesetzt sind.
- der Wert 5 für Maximale Anzahl fehlgeschlagener Zustellungen pro Nachricht, d. h. für die maximal zulässige Anzahl fehlgeschlagener Versuche, eine Nachricht zu verarbeiten. Danach wird die Nachricht vom geplanten Ziel an das Ausnahmeziel weitergeleitet. Diese Eigenschaft gilt für einzelne Nachrichten.
Informationen zu diesem Vorgang
In diesem Szenario ist die Unternehmens- bzw. Geschäftsanwendung ein kontinuierlich aktives System, das eine implementierte MDB verwendet, um auf eine externe Systemressource zuzugreifen.
Wenn bei dieser Ressource ein Problem auftritt und die Ressource nicht mehr verfügbar ist, kann die implementierte MDB nicht auf diese Ressource zugreifen. Deshalb wird die der MDB zugeordnete Transaktion rückgängig gemacht, und die Nachricht "msg1" wird in die Warteschlange zurückgestellt.
Die Nachricht "msg1" wird während des Wiederholungsintervalls (fünf Sekunden), das mit Verzögerung zwischen Wiederholungen fehlerhafter Nachrichten definiert wurde, verborgen, bevor sie an die MDB übermittelt wird.
In der Zwischenzeit verarbeitet die MDB die nächste Nachricht in der Warteschlange, die Nachricht "msg2". Die externe Ressource ist weiterhin nicht verfügbar. Deshalb schlägt die Verarbeitung dieser Nachricht ebenfalls fehl. Die Nachrichtentransaktion wird rückgängig gemacht, und die Nachricht wird fünf Sekunden lang verborgen. Die nächste Nachricht in der Warteschlange, Nachricht "msg3" wird verarbeitet. Die Verarbeitung schlägt fehl, und die Nachricht wird ebenfalls verborgen.
Wenn die Anzahl verborgener Nachrichten den mit der Eigenschaft Schwellenwert für aufeinanderfolgende Nachrichtenfehler festgelegten Wert erreicht, verarbeitet die MDB so lange keine weiteren Nachrichten, bis eine der verborgenen Nachrichten wieder verfügbar ist.
Wenn der mit Verzögerung zwischen Wiederholungen fehlerhafter Nachrichten festgelegte Zeitraum für msg1 abläuft, wird msg1 wieder sichtbar und kann erneut verarbeitet werden. Da die Ressource weiterhin nicht verfügbar ist, wird die Nachricht erneut verborgen. Dasselbe geschieht mit den Nachrichten "msg2" und "msg3".
Eine Nachricht wird dann als gescheitert betrachtet, wenn die Anzahl der Rollback-Transaktionen für diese Nachricht dem mit Maximale Anzahl fehlgeschlagener Zustellungen pro Nachricht festgelegten Grenzwert minus eins entspricht (in diesem Szenario fünfmal). Sobald msg1 zum vierten Mal sichtbar, rückgängig gemacht und wieder verborgen wurde, wird die Anzahl aufeinanderfolgender Fehler um eins erhöht. Dann wird msg2 wieder sichtbar, rückgängig gemacht und erneut verborgen. Dasselbe geschieht mit msg3. Die Anzahl aufeinander folgender Fehler erreicht den für Schwellenwert für aufeinanderfolgende Nachrichtenfehler festgelegten Wert, und die MDB wird automatisch gestoppt. Eine JCA-MBean gibt eine JMX-Benachrichtigung aus, und der Systemadministrator wird über einen Protokolleintrag benachrichtigt, dass die MDB gestoppt wurde.