Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (Deutsch) » QAnywhere » QAnywhere-Clientanwendungen schreiben

 

QAnywhere-Ausnahmebedingungen verarbeiten

Die QAnywhere C++-, Java- und .NET-APIs enthalten spezielle Objekte und Eigenschaften für die Verarbeitung von Ausnahmefehlern.

.NET-Ausnahmefehler

Die QAException-Klasse kapselt Ausnahmefehler von QAnywhere-Clientanwendungen. Nachdem Sie einen QAnywhere-Ausnahmefehler abgefangen haben, können Sie QAException ErrorCode- und Message-Eigenschaften verwenden, um den Fehlercode und die Fehlermeldung zu ermitteln.

Beachten Sie: Wenn eine QAException innerhalb eines Nachrichten-Listenerdelegaten ausgelöst und im Nachrichten-Listener nicht abgefangen wird, erfolgt ihre Protokollierung in der QAManager-Logdatei. Da nicht abgefangene QAExceptions nur protokolliert werden, wird empfohlen, alle Ausnahmefehler in Nachrichten-Listenerdelegaten zu erfassen oder durch Ausnahme-Listenerdelegate zu erfassen, damit eine Weiterverarbeitung möglich ist.

Weitere Informationen zu Nachrichten-Listenerdelegaten und Ausnahme-Listenerdelegaten finden Sie unter:

Weitere Informationen zur Logdatei finden Sie unter Konfigurationseigenschaften des QAnywhere-Managers.

Nach dem Auslösen einer QAException wird die laufende Transaktion zurückgesetzt. Wenn dies in einem Nachrichten-Listener mit einem QATransactionalManager erfolgt, wird die Nachricht, die beim Auslösen der QAException verarbeitet wurde, in die Empfangswarteschlange zurückgesetzt, damit sie nochmals empfangen wird. Sie können die Nachrichtenspeichereigenschaft ias_MaxDeliveryAttempts verwenden, um eine Endlosschleife zu verhindern.

Wenn die Eigenschaft ias_MaxDeliveryAttempts von einer QAnywhere-Anwendung auf eine positive Ganzzahl n eingestellt wird, wie in mgr.SetIntStoreProperty( "ias_MaxDeliveryAttempts", 5 ), versucht der QAnywhere-Client bis zu n Mal, eine nicht bestätigte Nachricht zu empfangen. Danach wird der Status der Nachricht auf "Nicht empfangbar" gesetzt. Wenn die Eigenschaft ias_MaxDeliveryAttempts nicht festgelegt wurde oder negativ ist, versucht der QAnywhere-Client den Empfang der Nachricht ohne Limit.

Weitere Hinweise finden Sie unter:

C++-Ausnahmefehler

In C++ kapselt die QAError-Klasse Ausnahmefehler von QAnywhere-Clientanwendungen. Sie können die QAManagerBase::getLastError()- oder QAManagerFactory::getLastError()-Methode verwenden, um den mit der zuletzt ausgeführten Methode verbundenen Fehlercode zu ermitteln. Sie können die entsprechende getLastErrorMessage()-Methode verwenden, um den Fehlertext zu erhalten.

Eine Liste der Fehlercodes und weitere Hinweise finden Sie unter QAError-Klasse.

Weitere Informationen zu getLastError und getLastErrorMessage finden Sie unter:

Java-Ausnahmefehler

Die QAException-Klasse kapselt Ausnahmefehler von QAnywhere-Clientanwendungen. Nachdem Sie einen QAnywhere-Ausnahmefehler abgefangen haben, können Sie QAException ErrorCode- und Message-Eigenschaften verwenden, um den Fehlercode und die Fehlermeldung zu ermitteln.

Wenn eine QAException innerhalb eines Nachrichten-Listeners ausgelöst und dort nicht abgefangen wird, erfolgt ihre Protokollierung in der QAManager-Logdatei. Da nicht abgefangene QAExceptions nur protokolliert werden, wird empfohlen, alle Ausnahmefehler in Nachrichten-Listenern zu erfassen oder durch Ausnahme-Listener zu erfassen, damit eine Weiterverarbeitung möglich ist.

Weitere Informationen zu Nachrichten-Listenern und Ausnahme-Listenern finden Sie unter:

Weitere Informationen zur Logdatei finden Sie unter Konfigurationseigenschaften des QAnywhere-Managers.

Nach dem Auslösen einer QAException wird die laufende Transaktion zurückgesetzt. Wenn dies in einem Nachrichten-Listener mit einem QATransactionalManager erfolgt, wird die Nachricht, die beim Auslösen der QAException verarbeitet wurde, in die Empfangswarteschlange zurückgesetzt, damit sie nochmals empfangen wird. Sie können die Nachrichtenspeichereigenschaft ias_MaxDeliveryAttempts verwenden, um eine Endlosschleife zu verhindern.

Wenn die Eigenschaft ias_MaxDeliveryAttempts von einer QAnywhere-Anwendung auf eine positive Ganzzahl n eingestellt wird, wie in mgr.SetIntStoreProperty( "ias_MaxDeliveryAttempts", 5 ), versucht der QAnywhere-Client bis zu n Mal, eine nicht bestätigte Nachricht zu empfangen. Danach wird der Status der Nachricht auf "Nicht empfangbar" gesetzt. Wenn die Eigenschaft ias_MaxDeliveryAttempts nicht festgelegt wurde oder negativ ist, versucht der QAnywhere-Client den Empfang der Nachricht ohne Limit.

Weitere Hinweise finden Sie unter:

Fehlercodes

In der folgenden Tabelle werden die Werte der QAnywhere-Fehlercodes aufgeführt:

Fehlerwert

Beschreibung

0

Kein Fehler

1000

Initialisierungsfehler

1001

Beendigungsfehler

1002

Auf Client-Eigenschaftsdatei kann nicht zugegriffen werden

1003

Kein Ziel

1004

Die Funktion ist nicht implementiert.

1005

Sie können nicht in eine schreibgeschützte Nachricht schreiben.

1006

Fehler beim Speichern einer Nachricht im Client-Nachrichtenspeicher

1007

Fehler beim Abruf einer Nachricht aus dem Client-Nachrichtenspeicher

1008

Fehler beim Initialisieren des Hintergrund-Threads

1009

Fehler beim Öffnen einer Verbindung zum Nachrichtenspeicher

1010

In der Client-Eigenschaftsdatei ist eine ungültige Eigenschaft enthalten.

1011

Fehler beim Öffnen der Logdatei

1012

Unerwartetes Nachrichtenende erreicht

1013

Der Nachrichtenspeicher ist im Verhältnis zum freien Speicherplatz auf dem Gerät zu groß.

1014

Der Nachrichtenspeicher wurde nicht für Messaging initialisiert.

1015

Fehler beim Bezug der Warteschlangentiefe

1016

QAManagerBase.getQueueDepth kann nicht benutzt werden, wenn die Nachrichtenspeicher-ID nicht eingestellt wurde.

1017

QAManagerBase.getQueueDepth kann für ein bestimmtes Ziel nicht benutzt werden, wenn der Filter auf ALL gesetzt ist.

1018

Fehler beim Abbrechen der Nachricht.

1019

Fehler beim Abbrechen der Nachricht Eine bereits gesendete Nachricht kann nicht abgebrochen werden.

1020

Fehler beim Quittieren der Nachricht

1021

Der QAManager ist nicht geöffnet.

1022

Der QAManager ist bereits geöffnet.

1023

Der angegebene Selektor hat einen Syntaxfehler.

1024

Der Zeitstempel liegt außerhalb des zulässigen Bereichs.

1025

QAManager kann nicht geöffnet werden, da die Höchstzahl gleichzeitiger Serveranforderungen nicht hoch genug ist (siehe Datenbank Serveroption -gn).

1026

Fehler beim Abruf der Eigenschaft aus dem Nachrichtenspeicher.

1027

Fehler beim Speichern der Eigenschaft im Nachrichtenspeicher.