| |
munikationsmodell: den Ruf einer entfernten Methode eines CORBA-Objekts. Wie in Ab-
schnitt 2.3 erwähnt, lassen sich basierend auf RMI-Rufen wieder rein nachrichtenbasierte
Systeme implementieren. Allerdings definiert die CORBA-Spezifikation keine speziellen Nach-
richtenformate, mittels derer man etwa ein Message-Queuing-System aufbauen würde - was
nicht als Mangel gewertet werden darf, zumal die Philosophie der CORBA-Architektur Ob-
jekte und Rufe der Methoden dieser Objekte in den Mittelpunkt stellt. Es existieren mehrere
Varianten für Rufe entfernter Methoden, welche in diesem Abschnitt vorgestellt werden.
3.5.1 Synchroner Ruf
Bei einem gewöhnlichen Methodenruf sendet das Client-Programm eine Anfrage an das Server-
Programm und blockiert dann bis es eine Antwort erhält. Soweit keine Fehler auftreten,
entspricht diese Art des Aufrufes dem Aufruf einer gewöhnlichen lokalen Methode. Für den
Fall eines Fehlers legt der CORBA-Standard eine at-most-once Semantik fest. Das bedeutet,
die gewünschte Methode wurde gar nicht oder genau einmal gerufen.
3.5.2 Oneway-Ruf
Als Alternative zum gewöhnlichen synchronen Ruf ist es möglich, eine Methode mit dem
Modifizierer oneway zu versehen. Obwohl es intuitiv nahe liegt, dass es sich hierbei um einen
asynchronen Ruf handelt, scheint dies der CORBA-Standard nicht herzugeben. Hier ist die
Fachliteratur uneins. So wird von [Tan02, S. 502] angenommen: Caller continues immediately
without waiting for any response from the server. In [BVD01, S. 54] heißt es: The Caller
will get an immediate return and cannot know for certain if the request has been invoked..
Dagegen gibt der CORBA-Standard keine Garantien dafür, dass das Client-Programm bei
dem Ruf einer oneway-Methode nicht blockiert, weder in Version 2.3.1 [OMG99b, 3.12.1] noch
in der derzeit aktuellen Version 3.0. In letzterer ist es allerdings im Rahmen der Messaging-
Spezifikation (siehe Abschnitt 3.5.4) vorgesehen, das Verhalten von oneway-Rufen mittels
sogenannter Policy-Objekte kontrollieren zu können [OMG02b, vgl. 22.2.2.1] - was allerdings
immer noch nichts daran ändert, dass bezüglich des normalen Verhaltens eines oneway-Rufes
jegliche Garantien fehlen. Auch wenn es wahrscheinlich ist, dass ORB-Hersteller ebenfalls der
intuitiven Interpretation folgen oder sie berücksichtigen und oneway-Rufe nicht-blockierend
implementieren, so macht das Fehlen einer solchen Aussage in der CORBA-Spezifikation die
Verwendung von oneway-Rufen gefährlich, wenigstens wenn eine asynchrone Implementierung
Voraussetzung für eine korrekte Arbeitsweise des Programms ist. In [HV99, S. 96] wird sogar
empfohlen: The semantics established by oneway are too weak to be really useful, and we
recommend that you avoid the feature.
3.5.3 Verzögert-synchroner Ruf
Ein sogenannter verzögert-synchroner Ruf (engl.: deferred synchronous request) ist eine Kom-
bination aus zwei asynchronen Anfragen [Tan02, vgl. S. 80]. Die erste Anfrage geht dabei
vom Client- zum Server-Prozess. Der Client-Prozess blockiert dabei höchstens solange, bis
der Empfang der Anfrage bestätigt bzw. der Inhalt akzeptiert wurde. Während der Server-
Prozess die Anfrage bearbeitet, kann der Client-Prozess andere Aufgaben erledigen. Die
29
|  |
|
| |
|
|