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) » UltraLite - Datenbankverwaltung » UltraLite-Datenbanken verwenden » Mit UltraLite-Datenbanken arbeiten

 

Mit Ereignisbenachrichtigungen arbeiten

UltraLite unterstützt nun Ereignisse und Benachrichtigungen. Eine Benachrichtigung ist eine Meldung, die gesendet wird, wenn ein Ereignis eintritt, und die auch zusätzliche Parameterinformationen enthält. In UltraLite gibt es Systemereignisse und benutzerdefinierte Ereignisse.

Mit Ereignisbenachrichtigungen können Sie Verbindungen oder Anwendungen, die mit derselben Datenbank verbunden sind, koordinieren und zwischen ihnen Signale austauschen. Benachrichtigungen werden in Warteschlangen verwaltet: Entweder in der Standard-Warteschlange der Verbindung oder optional in Warteschlangen, die explizit erstellt und benannt werden. Wenn ein Ereignis eintritt, werden Benachrichtigungen an registrierte Warteschlangen (oder Verbindungen) gesendet.

Jede Verbindung verwaltet ihre eigene Benachrichtigungs-Warteschlange. Benannte Warteschlangen können für jede Verbindung erstellt werden.

Die Verwendung von vordefinierten Systemereignissen stellt auch "Trigger" für Datenänderungen bereit, wenn z.B. eine Tabelle geändert wird, oder es wird ein Signal gesendet, wenn eine Synchronisation stattgefunden hat. Vordefinierte Ereignisse sind die folgenden:

Benutzerereignisse können auch von einer Anwendung definiert und ausgelöst werden.

APIs für Ereignisse und Benachrichtigungen werden in jeder unterstützten Sprache bereitgestellt. Außerdem wird eine SQL-Funktion für den Zugriff auf die API-Funktionalität bereitgestellt.

Ereignisse
Ereignis Auftreten
Commit

Signalisiert den Abschluss einer Festschreibung

SyncComplete

Signalisiert den Abschluss einer Synchronisation

TableModified

Wird ausgelöst, wenn Zeilen in einer Tabelle eingefügt, aktualisiert oder gelöscht werden. Ein Ereignis pro Anforderung wird signalisiert, unabhängig davon, wie viele Zeilen von der Anforderung bei der Registrierung für das Ereignis betroffen waren.

Der Parameter object_name gibt die zu überwachende Tabelle an. Der Wert "*" steht für alle Tabellen in der Datenbank.

Der Benachrichtigungsparameter table_name ist der Name der geänderten Tabelle.

note_info.event_name = "SyncComplete";
note_info.event_name_len = 12;
note_info.parms_type = ul_ev_note_info::P_NONE;
note_info.event_name = "TableModified";
note_info.event_name_len = 13;
note_info.parms_type = ul_ev_note_info::P_TABLE_NAME;
note_info.parms = table->name->data;
note_info.parms_len = table->name->len;
Mit Warteschlangen arbeiten

Warteschlangen können erstellt und vernichtet werden.

CreateNotificationQueue erstellt eine Warteschlange für Ereignisbenachrichtigungen der aktuellen Verbindung. Der Bereich von Warteschlangennamen gilt für die jeweilige Verbindung, daher können verschiedene Verbindungen Warteschlangen mit demselben Namen erstellen. Wenn eine Ereignisbenachrichtigung gesendet wird, empfangen alle Warteschlangen in der Datenbank mit einem übereinstimmenden Namen eine separate Instanz der Benachrichtigung. Namen reagieren nicht auf Groß- und Kleinschreibung. Eine Standard-Warteschlange wird bei Bedarf für jede Verbindung erstellt, falls keine Warteschlange angegeben ist. Dieser Aufruf schlägt mit einem Fehler fehl, wenn der Name für die Verbindung bereits vorhanden oder nicht gültig ist.

DestroyNotificationQueue vernichtet die angegebene Ereignisbenachrichtigungs-Warteschlange. Eine Warnung wird signalisiert, wenn ungelesene Benachrichtigungen in der Warteschlange verbleiben. Ungelesene Benachrichtigungen werden verworfen. Die Standard-Ereigniswarteschlange einer Verbindung, falls erstellt, wird vernichtet, wenn die Verbindung geschlossen wird.

Mit Ereignissen arbeiten

DeclareEvent deklariert ein Ereignis, für das man sich anschließend registrieren kann und das ausgelöst werden kann. In UltraLite gibt es vordefinierte Systemereignisse, die von Vorgängen in der Datenbank oder in der Umgebung ausgelöst werden. Der Ereignisname muss eindeutig sein. Namen berücksichtigen nicht die Groß- und Kleinschreibung. Gibt TRUE zurück, wenn das Ereignis erfolgreich deklariert wurde, und FALSE, wenn der Name bereits verwendet wird oder ungültig ist.

RegisterForEvent registriert eine Warteschlange, um Benachrichtigungen für ein Ereignis zu empfangen. Wenn kein Warteschlangenname geliefert wird, wird die Standard-Verbindungswarteschlange angenommen und ggf. erstellt. Bestimmte Systemereignisse lassen die Angabe eines Objektnamens zu, für den das Ereignis gilt. Das TableModified-Ereignis z.B. kann den Tabellennamen spezifizieren. Im Gegensatz zu SendNotification empfängt nur die spezifische registrierte Warteschlange Benachrichtigungen des Ereignisses, andere Warteschlangen mit demselben Namen bei anderen Verbindungen erhalten keine (außer sie sind auch explizit registriert). Gibt TRUE zurück, wenn die Registrierung erfolgreich war, und FALSE, wenn die Warteschlange oder das Ereignis nicht existiert.

TriggerEvent löst ein Ereignis aus und sendet eine Benachrichtigung an alle registrierten Warteschlangen. Gibt die Anzahl der gesendeten Ereignisbenachrichtigungen zurück. Parameter können als Name=Wert;-Paare übergeben werden.

Mit Benachrichtigungen arbeiten

SendNotification sendet eine Benachrichtigung an alle Warteschlangen in der Datenbank, die dem angegebenen Namen entsprechen (einschließlich etwaiger Warteschlangen für die aktuelle Verbindung). Dieser Aufruf bewirkt keine Blockierung. Verwenden Sie den speziellen Warteschlangennamen "*", um Benachrichtigungen an alle Warteschlangen zu senden. Gibt die Anzahl der gesendeten Benachrichtigungen zurück (die Anzahl der übereinstimmenden Warteschlangen). Parameter können als Name=Wert;-Paare übergeben werden.

GetNotification liest eine Ereignisbenachrichtigung. Dieser Aufruf blockiert, bis eine Benachrichtigung empfangen wird oder die angegebene Wartezeit abgelaufen ist. Um den Wartezustand zu beenden, senden Sie eine weitere Benachrichtigung an die Warteschlange oder verwenden Sie CancelGetNotification. Nach dem Lesen der Benachrichtigung verwenden Sie ReadNotificationParameter, um zusätzliche Parameter abzurufen. Gibt TRUE zurück, wenn ein Ereignis gelesen wurde, und FALSE, wenn die Wartezeit abgelaufen ist oder der Wartezustand beendet wurde.

GetNotificationParameter ruft einen benannten Parameter für die Ereignisbenachrichtigung ab, die gerade von GetNotification gelesen wurde. Es sind nur die Parameter aus der zuletzt gelesenen Benachrichtigung in der angegebenen Warteschlange verfügbar. Gibt TRUE zurück, wenn der Parameter gefunden wurde, und FALSE, wenn dies nicht der Fall war.

CancelGetNotification bricht ausstehende GetNotification-Aufrufe in allen Warteschlangen ab, die mit dem angegebenen Namen übereinstimmen. Gibt die Anzahl der betroffenen Warteschlangen (nicht notwendigerweise die Anzahl der blockierten Lesevorgänge) zurück.

Sonstige Hinweise