Frage

Ich möchte der CORBA-Schnittstelle meines vorhandenen Servers eine Methode hinzufügen.Ist dafür eine Neukompilierung aller Clients erforderlich?

Ich verwende TAO.

War es hilfreich?

Lösung

Eine Neukompilierung der Clients ist nicht erforderlich (und sollte auch nicht erforderlich sein, unabhängig vom verwendeten ORB).Wie Adam angedeutet hat, erfolgt die Suche nach Operationsnamen (ein direkter Textvergleich).

Ich habe das, was Sie beschreiben, mit unserem ACE/TAO-basierten System durchgeführt und keine Probleme festgestellt (Server waren in ACE/TAO C++, Clients waren ACE/TAO C++, C# mit Janeva von Borland und OmniORBPy).

Andere Tipps

Vorausgesetzt, dass die Clients und Server über IIOP kommunizieren, ist keine Neukompilierung erforderlich.Eine IIOP-Nachricht enthält den Namen der Schnittstelle, den Namen der Methode und die Parameter.Wenn sich nichts davon geändert hat, sollte alles kompatibel bleiben.Das Hinzufügen einer weiteren Methode zur Schnittstelle ändert nichts an diesen vorhandenen Dingen.

Wenn Ihre Objekte andererseits ein anderes Protokoll verwenden oder wenn die Clients gerade mit dem Server arbeiten und somit IIOP umgehen, müssen Sie möglicherweise sicherstellen, dass alles neu kompiliert wird.

Operationen (Methoden) werden nach Namen gesucht, sodass Sie nur die Clients neu kompilieren müssen, die die neue Operation verwenden.

Kunden, die Colocation nutzen (d. h.(die innerhalb desselben Prozesses mit aktivierter Colocation im ORB ausgeführt werden) müssen neu kompiliert werden.Remote-Clients können dieselben bleiben – wie bereits erwähnt, werden Methoden durch symbolische Namen abgeglichen.

Dies hängt von der Verwendung der neuen IDL-Methode ab.Wenn der Corba-Aufruf statisch (SII) ist, was bedeutet, dass Ihr Client mit Stub verknüpft ist, müssen Sie einen Stub neu kompilieren, wenn Sie Ihre neu hinzugefügte Methodenschnittstelle verwenden möchten.

Wenn der Corba-Aufruf dynamisch (DII) ist, ist für den Client kein Stub erforderlich.Es ist keine Neukompilierung erforderlich.In diesem Fall sollte Ihr Clientcode wie folgt aussehen:

     remoteObjRef->invoke("methodname", args); // send("methodname", args)

Ich habe den CORBA DII-Aufruf vor vier Jahren durchgeführt und er funktioniert mit dem TAO-Client und dem TAO/Jacorb/IONA-Corba-Dienst.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top