Question

J'aimerais ajouter une méthode à l'interface CORBA de mon serveur existant.Cela nécessitera-t-il de recompiler tous les clients ?

J'utilise TAO.

Était-ce utile?

La solution

La recompilation des clients n'est pas obligatoire (et ne devrait pas l'être, quel que soit l'ORB que vous utilisez).Comme Adam l'a indiqué, les recherches sont effectuées par nom d'opération (une comparaison de texte simple).

J'ai fait ce que vous décrivez avec notre système basé sur ACE/TAO et je n'ai rencontré aucun problème (les serveurs étaient en ACE/TAO C++, les clients étaient ACE/TAO C++, C# utilisant Janeva de Borland et OmniORBPy).

Autres conseils

En supposant que les clients et les serveurs communiquent via IIOP, aucune recompilation n'est requise.Un message IIOP contient le nom de l'interface, le nom de la méthode et les paramètres.Si aucune de ces choses n’a changé, alors tout devrait rester compatible.L'ajout d'une autre méthode à l'interface ne changera rien à ces éléments existants.

D'un autre côté, si vos objets utilisent un protocole différent ou si les clients sont en cours de traitement avec le serveur et contournent ainsi IIOP, vous devrez peut-être vous assurer que tout est recompilé.

Les opérations (méthodes) sont recherchées par nom, il vous suffit donc de recompiler les clients qui utilisent la nouvelle opération.

Clients utilisant la colocation (c.-à-d.exécuté dans le même processus avec la colocation activée dans ORB) doit être recompilé.Les clients distants peuvent rester les mêmes - comme indiqué précédemment, les méthodes correspondent à un nom symbolique.

Cela dépend de l'utilisation de la nouvelle méthode idl.Si l'invocation de Corba est statique (SII), ce qui signifie que votre client est lié au stub, vous devez recompiler un stub si vous souhaitez utiliser votre nouvelle interface de méthode ajoutée.

Si l’invocation corba est dynamique (DII), aucun stub n’est requis pour le client.Aucune recompilation n’est requise.Dans ce cas, votre code client devrait ressembler à :

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

J'ai fait l'invocation CORBA DII il y a quatre ans et cela fonctionne avec le client TAO et le service corba TAO/Jacorb/IONA.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top