[ Inhalt ] [ Index ] VDM Datenbankserver Implementierung Programmierung der Sitzungsschicht mit

Distributed-Processing

Remote-Procedure Calls mit TCL

Basierend auf Sitzungsschicht, sind Vollduplex-RPCs implementiert. Das bedeutet, das nicht nur der Client am Server, sondern auch der Server am Client Kommandos ausführen kann. Dies ist beim VDM-Server jedoch selbst nicht möglich, da dieses Feature zugunsten einer Kommandozeile geopfert wurde.

Zu der RPC Implementation existieren drei Funktionen. Die Einrichtung eines Server, die eines Clients, und das Kommando zum Absetzen eines RPCs. Zunächt soll das Kommando zur Einrichtung eines RPC-Servers dargestellt werden:

proc rpc_MakeServer {port {loginFunc ""} {logoffFunc ""} {checkFunc ""} \
                          {errFunc ""}}

Es wird der Listening-Port festgelegt, sowie Callback-Funktionen zum Anmelden, Abmelden, zum Überprüfen von Kommandos und zur Behandlung von Ausnahmen.

Der Client meldet sich am RPC-Server mit folgender Funktion an, und übergibt ebenfalls eine Callback-Funktion für die Überprüfung von RPC-Kommandos die vom Server aufgegeben werden als auch eine für die Behandlung von Ausnahmebedingungen. Als Funktionswert erhält der Client, wenn er vom Server akzeptiert wurde, einen Socketdeskriptor als Resultat.

proc rpc_MakeClient {host port {checkFunc ""} {errFunc ""}}

Sowohl Server als auch Client setzen RPCs mit folgendem Kommando ab. Das Argument server bezeichnet den Socketdeskriptor der Gegenstelle, denn auch der Client kann als RPC-Server bedienen. Währen dem Client der Deskriptor durch rpc_MakeClient bekannt ist, muß der Server die globale Variable rpcFile verwenden, die durch das RPC-System vor Aufruf der Callback-Funktionen gesetzt wird.

proc rpc_Exec {server args}

Kommunikationsprotokoll

  Die für RPCs nötige Kommunikation besteht aus dem Absetzen des Kommandos und dem Empfang des Resultats. Zunächst wird die Kommunikation durch das Dienstelement S-DATA.request eingeleitet, was auf der Gegenstelle die Sitzungsschicht veranlaßt, die Callback-Funktion aufzurufen, die für den Empfang von RPCs definiert wurde. Da das Packen von PDUs für die Kommunikation zu aufwendig wäre, wird anschließend direkt über die Socketverbindung kommuniziert. Dabei wird in beiden Richtungen das gleiche Protokoll verwendet.

len [type] <nl>
message

len gibt die Länge der Nachricht message an, optional kann ein Typ angegeben werden, der nach Ausführung des RPCs dazu verwendet wird, den Erfolg der Operation mitzuteilen.

Fehlerbehandlung

Die Ausführung von Fernkommandos kann auf der Gegenstelle zu Fehlern oder zur korrekten Bearbeitung führen. Da der Fehler selbstverständlich beim Aufrufer und nicht beim entfernten Host angezeigt werden soll, wird dieser bei der Ausführung mit dem TCL-Kommando catch abgefangen.

Die Fehlermeldung wird mitsamt der Information, daß ein Fehler aufgetreten ist, an den Aufrufer übertragen. Dort wird der Fehler mit dem TCL-Kommando error unter Angabe der Meldung neu erzeugt. Überwacht der Aufrufer seinerseits das RPC-Kommandos mit catch, so macht es für die Fehlerbehandlung keinen Unterschied, ob ein Fehler lokal oder entfernt auftritt.


[ Inhalt ] [ Index ] VDM Datenbankserver Implementierung Programmierung der Sitzungsschicht mit

VDM Class Library